133 lines
3.5 KiB
JavaScript
133 lines
3.5 KiB
JavaScript
|
(function() {
|
||
|
/**
|
||
|
* Page to view the details of a single image.
|
||
|
*/
|
||
|
angular.module('quayPages').config(['pages', function(pages) {
|
||
|
pages.create('image-view', 'image-view.html', ImageViewCtrl);
|
||
|
}]);
|
||
|
|
||
|
function ImageViewCtrl($scope, $routeParams, $rootScope, $timeout, ApiService, ImageMetadataService) {
|
||
|
var namespace = $routeParams.namespace;
|
||
|
var name = $routeParams.name;
|
||
|
var imageid = $routeParams.image;
|
||
|
|
||
|
$scope.getFormattedCommand = ImageMetadataService.getFormattedCommand;
|
||
|
|
||
|
$scope.parseDate = function(dateString) {
|
||
|
return Date.parse(dateString);
|
||
|
};
|
||
|
|
||
|
$scope.getFolder = function(filepath) {
|
||
|
var index = filepath.lastIndexOf('/');
|
||
|
if (index < 0) {
|
||
|
return '';
|
||
|
}
|
||
|
return filepath.substr(0, index + 1);
|
||
|
};
|
||
|
|
||
|
$scope.getFolders = function(filepath) {
|
||
|
var index = filepath.lastIndexOf('/');
|
||
|
if (index < 0) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
return filepath.substr(0, index).split('/');
|
||
|
};
|
||
|
|
||
|
$scope.getFilename = function(filepath) {
|
||
|
var index = filepath.lastIndexOf('/');
|
||
|
if (index < 0) {
|
||
|
return filepath;
|
||
|
}
|
||
|
return filepath.substr(index + 1);
|
||
|
};
|
||
|
|
||
|
$scope.setFolderFilter = function(folderPath, index) {
|
||
|
var parts = folderPath.split('/');
|
||
|
parts = parts.slice(0, index + 1);
|
||
|
$scope.setFilter(parts.join('/'));
|
||
|
};
|
||
|
|
||
|
$scope.setFilter = function(filter) {
|
||
|
$scope.search = {};
|
||
|
$scope.search['$'] = filter;
|
||
|
document.getElementById('change-filter').value = filter;
|
||
|
};
|
||
|
|
||
|
$scope.initializeTree = function() {
|
||
|
if ($scope.tree) { return; }
|
||
|
|
||
|
$scope.tree = new ImageFileChangeTree($scope.image, $scope.combinedChanges);
|
||
|
$timeout(function() {
|
||
|
$scope.tree.draw('changes-tree-container');
|
||
|
}, 10);
|
||
|
};
|
||
|
|
||
|
var fetchRepository = function() {
|
||
|
var params = {
|
||
|
'repository': namespace + '/' + name
|
||
|
};
|
||
|
|
||
|
ApiService.getRepoAsResource(params).get(function(repo) {
|
||
|
$scope.repo = repo;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var fetchImage = function() {
|
||
|
var params = {
|
||
|
'repository': namespace + '/' + name,
|
||
|
'image_id': imageid
|
||
|
};
|
||
|
|
||
|
$scope.image = ApiService.getImageAsResource(params).get(function(image) {
|
||
|
if (!$scope.repo) {
|
||
|
$scope.repo = {
|
||
|
'name': name,
|
||
|
'namespace': namespace,
|
||
|
'is_public': true
|
||
|
};
|
||
|
}
|
||
|
|
||
|
$rootScope.title = 'View Image - ' + image.id;
|
||
|
$rootScope.description = 'Viewing docker image ' + image.id + ' under repository ' + namespace + '/' + name +
|
||
|
': Image changes tree and list view';
|
||
|
|
||
|
// Fetch the image's changes.
|
||
|
fetchChanges();
|
||
|
return image;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var fetchChanges = function() {
|
||
|
var params = {
|
||
|
'repository': namespace + '/' + name,
|
||
|
'image_id': imageid
|
||
|
};
|
||
|
|
||
|
ApiService.getImageChanges(null, params).then(function(changes) {
|
||
|
var combinedChanges = [];
|
||
|
var addCombinedChanges = function(c, kind) {
|
||
|
for (var i = 0; i < c.length; ++i) {
|
||
|
combinedChanges.push({
|
||
|
'kind': kind,
|
||
|
'file': c[i]
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
addCombinedChanges(changes.added, 'added');
|
||
|
addCombinedChanges(changes.removed, 'removed');
|
||
|
addCombinedChanges(changes.changed, 'changed');
|
||
|
|
||
|
$scope.combinedChanges = combinedChanges;
|
||
|
$scope.imageChanges = changes;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
// Fetch the repository.
|
||
|
fetchRepository();
|
||
|
|
||
|
// Fetch the image.
|
||
|
fetchImage();
|
||
|
}
|
||
|
})();
|