mirror of
https://github.com/portainer/portainer.git
synced 2025-07-21 14:29:40 +02:00
* fix(registry): fetch datatable details on page/filter/order state change instead of fetching all data on first load * fix(registry): fetch tags datatable details on state change instead of fetching all data on first load * fix(registry): add pagination support for tags + loading display on data load * fix(registry): debounce on text filter to avoid querying transient matching values * refactor(registry): rebase on latest develop * feat(registries): background tags and optimisation -- need code cleanup and for-await-of to cancel on page leave * refactor(registry-management): code cleanup * feat(registry): most optimized version -- need fix for add/retag * fix(registry): addTag working without page reload * fix(registry): retag working without reload * fix(registry): remove tag working without reload * fix(registry): remove repository working with latest changes * fix(registry): disable cache on firefox * feat(registry): use jquery for all 'most used' manifests requests * feat(registry): retag with progression + rewrite manifest REST service to jquery * fix(registry): remove forgotten DI * fix(registry): pagination on repository details * refactor(registry): info message + hidding images count until fetch has been done * fix(registry): fix selection reset deleting selectAll function and not resetting status * fix(registry): resetSelection was trying to set value on a getter * fix(registry): tags were dropped when too much tags were impacted by a tag removal * fix(registry): firefox add tag + progression * refactor(registry): rewording of elements * style(registry): add space between buttons and texts in status elements * fix(registry): cancelling a retag/delete action was not removing the status panel * fix(registry): tags count of empty repositories * feat(registry): reload page on action cancel to avoid desync * feat(registry): uncancellable modal on long operations * feat(registry): modal now closes on error + modal message improvement * feat(registries): remove empty repositories from the list * fix(registry): various bugfixes * feat(registry): independant timer on async actions + modal fix
80 lines
2 KiB
JavaScript
80 lines
2 KiB
JavaScript
import _ from 'lodash-es';
|
|
|
|
angular.module('portainer.docker')
|
|
.factory('ImageHelper', [function ImageHelperFactory() {
|
|
'use strict';
|
|
|
|
var helper = {};
|
|
|
|
helper.isValidTag = isValidTag;
|
|
|
|
function isValidTag(tag) {
|
|
return tag.match(/^(?![\.\-])([a-zA-Z0-9\_\.\-])+$/g);
|
|
}
|
|
|
|
helper.extractImageAndRegistryFromRepository = function(repository) {
|
|
var slashCount = _.countBy(repository)['/'];
|
|
var registry = null;
|
|
var image = repository;
|
|
if (slashCount >= 1) {
|
|
// assume something/something[/...]
|
|
registry = repository.substr(0, repository.indexOf('/'));
|
|
// assume valid DNS name or IP (contains at least one '.')
|
|
if (_.countBy(registry)['.'] > 0) {
|
|
image = repository.substr(repository.indexOf('/') + 1);
|
|
} else {
|
|
registry = null;
|
|
}
|
|
}
|
|
|
|
return {
|
|
registry: registry,
|
|
image: image
|
|
};
|
|
};
|
|
|
|
helper.getImagesNamesForDownload = function(images) {
|
|
var names = images.map(function(image) {
|
|
return image.RepoTags[0] !== '<none>:<none>' ? image.RepoTags[0] : image.Id;
|
|
});
|
|
return {
|
|
names: names
|
|
};
|
|
};
|
|
|
|
function extractNameAndTag(imageName, registry) {
|
|
var imageNameAndTag = imageName.split(':');
|
|
var image = imageNameAndTag[0];
|
|
var tag = imageNameAndTag[1] ? imageNameAndTag[1] : 'latest';
|
|
if (registry) {
|
|
image = registry + '/' + imageNameAndTag[0];
|
|
}
|
|
|
|
return {
|
|
image: image,
|
|
tag: tag
|
|
};
|
|
}
|
|
|
|
helper.createImageConfigForCommit = function(imageName, registry) {
|
|
var imageAndTag = extractNameAndTag(imageName, registry);
|
|
return {
|
|
repo: imageAndTag.image,
|
|
tag: imageAndTag.tag
|
|
};
|
|
};
|
|
|
|
helper.createImageConfigForContainer = function (imageName, registry) {
|
|
var imageAndTag = extractNameAndTag(imageName, registry);
|
|
return {
|
|
fromImage: imageAndTag.image,
|
|
tag: imageAndTag.tag
|
|
};
|
|
};
|
|
|
|
helper.removeDigestFromRepository = function(repository) {
|
|
return repository.split('@sha')[0];
|
|
};
|
|
|
|
return helper;
|
|
}]);
|