Add repository list pagination

Also changes our binds to be bind-once, which should significantly reduce memory and increase performance for large lists

Fixes #1856
This commit is contained in:
Joseph Schorr 2016-09-21 14:23:32 -04:00
parent 502fa23d31
commit e4ad25ea81
6 changed files with 55 additions and 20 deletions

View file

@ -8,11 +8,15 @@ angular.module('quay').directive('ngImageWatch', function ($parse) {
var fn = $parse(attr['ngImageWatch']);
return function(scope, element) {
element.bind('error', function() {
fn(scope, {result: false});
scope.$apply(function() {
fn(scope, {result: false});
})
});
element.bind('load', function() {
fn(scope, {result: true});
scope.$apply(function() {
fn(scope, {result: true});
})
});
}
}

View file

@ -16,19 +16,22 @@ angular.module('quay').directive('repoListTable', function () {
controller: function($scope, $element, $filter, TableService, UserService) {
$scope.repositories = null;
$scope.orderedRepositories = [];
$scope.reposPerPage = 50;
$scope.maxPopularity = 0;
$scope.options = {
'predicate': 'popularity',
'reverse': false,
'filter': null
'filter': null,
'page': 0
};
var buildOrderedRepositories = function() {
if (!$scope.repositories) { return; }
$scope.orderedRepositories = TableService.buildOrderedItems($scope.repositories, $scope.options,
[], ['last_modified_datetime', 'popularity'])
$scope.orderedRepositories = TableService.buildOrderedItems($scope.repositories,
$scope.options,
['namespace', 'name'], ['last_modified_datetime', 'popularity'])
};
$scope.tablePredicateClass = function(name, predicate, reverse) {
@ -70,6 +73,7 @@ angular.module('quay').directive('repoListTable', function () {
$scope.$watch('options.predicate', buildOrderedRepositories);
$scope.$watch('options.reverse', buildOrderedRepositories);
$scope.$watch('options.filter', buildOrderedRepositories);
$scope.$watch('repositoriesResources', function(resources) {
$scope.repositories = [];

View file

@ -17,6 +17,7 @@ angular.module('quay').directive('repoListView', function () {
$scope.resources = [];
$scope.loading = true;
$scope.showAsList = CookieService.get('quay.repoview') == 'list';
$scope.optionAllowed = true;
$scope.$watch('namespaces', function(namespaces) {
if (!namespaces) { return; }
@ -31,6 +32,11 @@ angular.module('quay').directive('repoListView', function () {
}
}
});
$scope.optionAllowed = $scope.resources.length <= 250;
if (!$scope.optionAllowed) {
$scope.showAsList = true;
}
}, true);
$scope.setShowAsList = function(value) {