2015-02-20 23:15:48 +00:00
|
|
|
(function() {
|
|
|
|
/**
|
|
|
|
* Repository listing page. Shows all repositories for all visibile namespaces.
|
|
|
|
*/
|
|
|
|
angular.module('quayPages').config(['pages', function(pages) {
|
2015-02-23 19:23:54 +00:00
|
|
|
pages.create('repo-list', 'repo-list.html', RepoListCtrl, {
|
2015-02-23 20:22:41 +00:00
|
|
|
'newLayout': true,
|
2015-02-23 19:23:54 +00:00
|
|
|
'title': 'Repositories',
|
|
|
|
'description': 'View and manage Docker repositories'
|
2015-02-23 20:22:41 +00:00
|
|
|
}, ['layout'])
|
|
|
|
|
|
|
|
pages.create('repo-list', 'old-repo-list.html', OldRepoListCtrl, {
|
|
|
|
'title': 'Repositories',
|
|
|
|
'description': 'View and manage Docker repositories'
|
|
|
|
}, ['old-layout']);
|
2015-02-20 23:15:48 +00:00
|
|
|
}]);
|
|
|
|
|
2015-02-23 20:22:41 +00:00
|
|
|
|
2015-02-26 18:58:29 +00:00
|
|
|
function RepoListCtrl($scope, $sanitize, $q, Restangular, UserService, ApiService) {
|
2015-02-20 23:15:48 +00:00
|
|
|
$scope.namespace = null;
|
|
|
|
$scope.page = 1;
|
|
|
|
$scope.publicPageCount = null;
|
2015-03-04 20:54:47 +00:00
|
|
|
$scope.allRepositories = {};
|
2015-02-20 23:15:48 +00:00
|
|
|
|
2015-02-23 20:22:41 +00:00
|
|
|
// When loading the UserService, if the user is logged in, create a list of
|
2015-03-04 20:54:47 +00:00
|
|
|
// relevant namespaces and collect the relevant repositories.
|
|
|
|
UserService.updateUserIn($scope, function(user) {
|
2015-02-23 20:22:41 +00:00
|
|
|
if (!user.anonymous) {
|
2015-03-04 20:54:47 +00:00
|
|
|
// Add our user to our list of namespaces.
|
|
|
|
$scope.namespaces = [{
|
|
|
|
'name': user.username,
|
|
|
|
'avatar': user.avatar
|
|
|
|
}];
|
|
|
|
|
|
|
|
// Add each org to our list of namespaces.
|
|
|
|
user.organizations.map(function(org) {
|
|
|
|
$scope.namespaces.push({
|
|
|
|
'name': org.name,
|
|
|
|
'avatar': org.avatar
|
|
|
|
});
|
|
|
|
});
|
2015-02-23 20:22:41 +00:00
|
|
|
|
2015-03-04 20:54:47 +00:00
|
|
|
// Load the repos.
|
|
|
|
loadStarredRepos();
|
|
|
|
loadRepos();
|
2015-02-24 22:50:54 +00:00
|
|
|
}
|
2015-03-04 20:54:47 +00:00
|
|
|
});
|
2015-02-23 20:22:41 +00:00
|
|
|
|
2015-03-05 19:21:46 +00:00
|
|
|
$scope.isOrganization = function(namespace) {
|
|
|
|
return !!UserService.getOrganization(namespace);
|
|
|
|
};
|
|
|
|
|
2015-03-04 20:54:47 +00:00
|
|
|
// Star a repository or unstar a repository.
|
2015-02-23 20:22:41 +00:00
|
|
|
$scope.toggleStar = function(repo) {
|
|
|
|
if (repo.is_starred) {
|
|
|
|
unstarRepo(repo);
|
|
|
|
} else {
|
|
|
|
starRepo(repo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-03-04 20:54:47 +00:00
|
|
|
// Star a repository and update the UI.
|
2015-02-23 20:22:41 +00:00
|
|
|
var starRepo = function(repo) {
|
|
|
|
var data = {
|
|
|
|
'namespace': repo.namespace,
|
|
|
|
'repository': repo.name
|
|
|
|
};
|
|
|
|
ApiService.createStar(data).then(function(result) {
|
2015-02-25 21:19:54 +00:00
|
|
|
repo.is_starred = true;
|
2015-02-26 18:58:29 +00:00
|
|
|
$scope.starred_repositories.value.push(repo);
|
2015-02-23 20:22:41 +00:00
|
|
|
}, ApiService.errorDisplay('Could not star repository'));
|
|
|
|
};
|
|
|
|
|
2015-03-04 20:54:47 +00:00
|
|
|
// Unstar a repository and update the UI.
|
2015-02-23 20:22:41 +00:00
|
|
|
var unstarRepo = function(repo) {
|
|
|
|
var data = {
|
|
|
|
'repository': repo.namespace + '/' + repo.name
|
|
|
|
};
|
|
|
|
ApiService.deleteStar(null, data).then(function(result) {
|
2015-02-25 21:19:54 +00:00
|
|
|
repo.is_starred = false;
|
2015-02-26 18:58:29 +00:00
|
|
|
$scope.starred_repositories.value = $scope.starred_repositories.value.filter(function(repo) {
|
|
|
|
return repo.is_starred;
|
|
|
|
});
|
2015-02-23 20:22:41 +00:00
|
|
|
}, ApiService.errorDisplay('Could not unstar repository'));
|
|
|
|
};
|
|
|
|
|
2015-03-02 18:28:38 +00:00
|
|
|
// Finds a duplicate repo if it exists. If it doesn't, inserts the repo.
|
|
|
|
var findDuplicateRepo = function(repo) {
|
2015-03-04 20:54:47 +00:00
|
|
|
var found = $scope.allRepositories[repo.namespace + '/' + repo.name];
|
|
|
|
if (found) {
|
2015-03-02 18:28:38 +00:00
|
|
|
return found;
|
|
|
|
} else {
|
2015-03-04 20:54:47 +00:00
|
|
|
$scope.allRepositories[repo.namespace + '/' + repo.name] = repo;
|
|
|
|
return repo;
|
2015-03-02 18:28:38 +00:00
|
|
|
}
|
2015-02-23 20:22:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
var loadStarredRepos = function() {
|
|
|
|
if (!$scope.user || $scope.user.anonymous) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.starred_repositories = ApiService.listStarredReposAsResource().get(function(resp) {
|
|
|
|
return resp.repositories.map(function(repo) {
|
2015-03-02 18:28:38 +00:00
|
|
|
repo = findDuplicateRepo(repo);
|
2015-02-23 20:22:41 +00:00
|
|
|
repo.is_starred = true;
|
|
|
|
return repo;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
var loadRepos = function() {
|
2015-03-04 20:54:47 +00:00
|
|
|
if (!$scope.user || $scope.user.anonymous || $scope.namespaces.length == 0) {
|
2015-02-23 20:22:41 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2015-03-04 20:54:47 +00:00
|
|
|
$scope.namespaces.map(function(namespace) {
|
2015-02-23 20:22:41 +00:00
|
|
|
var options = {
|
|
|
|
'public': false,
|
|
|
|
'sort': true,
|
2015-03-04 20:54:47 +00:00
|
|
|
'namespace': namespace.name,
|
2015-02-23 20:22:41 +00:00
|
|
|
};
|
2015-03-04 20:54:47 +00:00
|
|
|
|
2015-02-23 20:22:41 +00:00
|
|
|
namespace.repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
|
2015-03-02 18:28:38 +00:00
|
|
|
return resp.repositories.map(findDuplicateRepo);
|
2015-02-23 20:22:41 +00:00
|
|
|
});
|
2015-03-04 20:54:47 +00:00
|
|
|
});
|
2015-02-23 20:22:41 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function OldRepoListCtrl($scope, $sanitize, Restangular, UserService, ApiService) {
|
|
|
|
$scope.namespace = null;
|
|
|
|
$scope.page = 1;
|
|
|
|
$scope.publicPageCount = null;
|
|
|
|
|
2015-02-20 23:15:48 +00:00
|
|
|
// Monitor changes in the user.
|
|
|
|
UserService.updateUserIn($scope, function() {
|
|
|
|
loadMyRepos($scope.namespace);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Monitor changes in the namespace.
|
|
|
|
$scope.$watch('namespace', function(namespace) {
|
|
|
|
loadMyRepos(namespace);
|
|
|
|
});
|
|
|
|
|
|
|
|
$scope.movePublicPage = function(increment) {
|
|
|
|
if ($scope.publicPageCount == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$scope.page += increment;
|
|
|
|
if ($scope.page < 1) {
|
|
|
|
$scope.page = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($scope.page > $scope.publicPageCount) {
|
|
|
|
$scope.page = $scope.publicPageCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
loadPublicRepos();
|
|
|
|
};
|
|
|
|
|
|
|
|
var loadMyRepos = function(namespace) {
|
|
|
|
if (!$scope.user || $scope.user.anonymous || !namespace) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var options = {'public': false, 'sort': true, 'namespace': namespace};
|
|
|
|
|
|
|
|
$scope.user_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
|
|
|
|
return resp.repositories;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
var loadPublicRepos = function() {
|
|
|
|
var options = {
|
|
|
|
'public': true,
|
|
|
|
'private': false,
|
|
|
|
'sort': true,
|
|
|
|
'limit': 10,
|
|
|
|
'page': $scope.page,
|
|
|
|
'count': $scope.page == 1
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.public_repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) {
|
|
|
|
if (resp.count) {
|
|
|
|
$scope.publicPageCount = Math.ceil(resp.count / 10);
|
|
|
|
}
|
|
|
|
return resp.repositories;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
loadPublicRepos();
|
|
|
|
}
|
2015-02-23 20:22:41 +00:00
|
|
|
})();
|