diff --git a/static/css/pages/repo-list.css b/static/css/pages/repo-list.css index 5088f36a7..ac0481c86 100644 --- a/static/css/pages/repo-list.css +++ b/static/css/pages/repo-list.css @@ -3,10 +3,6 @@ padding-top: 0px; } -.repo-list .repo-list-panel.loading { - padding-top: 20px; -} - .repo-list .repo-list-namespaces h4 { margin: 6px; margin-bottom: 20px; diff --git a/static/js/pages/repo-list.js b/static/js/pages/repo-list.js index 155074dc7..9ea73e774 100644 --- a/static/js/pages/repo-list.js +++ b/static/js/pages/repo-list.js @@ -17,46 +17,33 @@ function RepoListCtrl($scope, $sanitize, $q, Restangular, UserService, ApiService) { + $scope.namespace = null; + $scope.page = 1; + $scope.publicPageCount = null; $scope.allRepositories = {}; $scope.loading = true; - $scope.namespaces = []; - $scope.namespaceMap = {}; // When loading the UserService, if the user is logged in, create a list of // relevant namespaces and collect the relevant repositories. UserService.updateUserIn($scope, function(user) { $scope.loading = false; - - var addNamespace = function(namespace) { - var name = namespace.username || namespace.name; - var namespaceInfo = { - 'name': name, - 'avatar': namespace.avatar, - 'repositories': { - 'loading': true, - 'value': [] - } - }; - - $scope.namespaceMap[name] = namespaceInfo; - $scope.namespaces.push(namespaceInfo); - }; - if (!user.anonymous) { // Add our user to our list of namespaces. - addNamespace(user); + $scope.namespaces = [{ + 'name': user.username, + 'avatar': user.avatar + }]; // Add each org to our list of namespaces. user.organizations.map(function(org) { - addNamespace(org); + $scope.namespaces.push({ + 'name': org.name, + 'avatar': org.avatar + }); }); - $scope.starred_repositories = { - 'loading': true, - 'value': [] - }; - - // Load the repositories. + // Load the repos. + loadStarredRepos(); loadRepos(); } }); @@ -75,37 +62,46 @@ } }; - var loadRepos = function() { - if (!$scope.user || $scope.user.anonymous || $scope.loading) { + // Finds a duplicate repo if it exists. If it doesn't, inserts the repo. + var findDuplicateRepo = function(repo) { + var found = $scope.allRepositories[repo.namespace + '/' + repo.name]; + if (found) { + return found; + } else { + $scope.allRepositories[repo.namespace + '/' + repo.name] = repo; + return repo; + } + }; + + var loadStarredRepos = function() { + if (!$scope.user || $scope.user.anonymous) { return; } - var options = { - 'public': false, - 'sort': true - }; + $scope.starred_repositories = ApiService.listStarredReposAsResource().get(function(resp) { + return resp.repositories.map(function(repo) { + repo = findDuplicateRepo(repo); + repo.is_starred = true; + return repo; + }); + }); + }; - $scope.repositoriesResource = ApiService.listReposAsResource().withOptions(options).get(function(resp) { - for (var i = 0; i < resp.repositories.length; ++i) { - var repository = resp.repositories[i]; - var namespace = repository.namespace; - var namespaceInfo = $scope.namespaceMap[namespace]; - if (!namespaceInfo) { - continue; - } + var loadRepos = function() { + if (!$scope.user || $scope.user.anonymous || $scope.namespaces.length == 0) { + return; + } - namespaceInfo.repositories.value.push(repository); - if (repository.is_starred) { - $scope.starred_repositories.value.push(repository); - } - } + $scope.namespaces.map(function(namespace) { + var options = { + 'public': false, + 'sort': true, + 'namespace': namespace.name, + }; - for (var i = 0; i < $scope.namespaces.length; ++i) { - var namespaceInfo = $scope.namespaces[i]; - namespaceInfo.repositories.loading = false; - } - - $scope.starred_repositories.loading = false; + namespace.repositories = ApiService.listReposAsResource().withOptions(options).get(function(resp) { + return resp.repositories.map(findDuplicateRepo); + }); }); }; } diff --git a/static/partials/repo-list.html b/static/partials/repo-list.html index b2ea75f6d..07590a0ac 100644 --- a/static/partials/repo-list.html +++ b/static/partials/repo-list.html @@ -51,21 +51,18 @@