diff --git a/static/js/controllers.js b/static/js/controllers.js index ebcbf2313..53de635f0 100644 --- a/static/js/controllers.js +++ b/static/js/controllers.js @@ -231,12 +231,13 @@ function TutorialCtrl($scope, AngularTour, AngularTourSignals, UserService, Conf }; } -function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, ApiService) { +function RepoListCtrl($scope, $sanitize, Restangular, UserService, ApiService) { $scope.namespace = null; $scope.page = 1; $scope.publicPageCount = null; - // Grab user namespaces + // When loading the UserService, if the user is logged in, create a list of + // relevant namespaces for later collecting relevant repositories. UserService.load(function() { var user = UserService.currentUser(); if (!user.anonymous) { @@ -244,13 +245,26 @@ function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, Ap for (var i = 0; i < user.organizations.length; i++) { $scope.namespaces.push(user.organizations[i]); } - loadStarredRepos(); - loadRepos(); - } else { - $location.path('signin'); + //loadStarredRepos(); + //loadRepos(); } }); + // If someone signs in on this page, we have to watch the user and re-load + // their repositories after they've signed in to actually have any content + // on the page. + $scope.$watch(function(scope) { return scope.user }, + function(user) { + if (!user.anonymous) { + $scope.namespaces = [user]; + for (var i = 0; i < user.organizations.length; i++) { + $scope.namespaces.push(user.organizations[i]); + } + loadStarredRepos(); + loadRepos(); + } + }); + $scope.toggleStar = function(repo) { if (repo.is_starred) { unstarRepo(repo); @@ -282,6 +296,7 @@ function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, Ap }); }; + // Finds a repository within the list of namespaces attached to $scope. var findRepoInList = function(repoNamespace, repoName) { var namespaceIndex = $scope.namespaces.map(function (n) { return n.username || n.name; @@ -296,6 +311,8 @@ function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, Ap return repoIndex != -1 ? namespace.repositories.value[repoIndex] : null; } + // Add a starred repository to the list starred repository list and make + // sure it appears starred elsewhere on the page. var updateReposAfterStar = function(repository) { $scope.starred_repositories.value.push(repository); @@ -305,9 +322,11 @@ function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, Ap } } + // Remove a repository from the starred repository list and make sure that + // it doesn't appear starred elsewhere on the page. var updateReposAfterUnstar = function(repository) { // Remove from the starred listings - var index = $scope.starred_repositories.value.map(function (r) { + var index = $scope.starred_repositories.value.map(function(r) { return r.namespace + '/' + r.name; }).indexOf(repository.namespace + '/' + repository.name); $scope.starred_repositories.value.splice(index, 1); @@ -325,17 +344,20 @@ function RepoListCtrl($scope, $location, $sanitize, Restangular, UserService, Ap } $scope.starred_repositories = ApiService.listStarredReposAsResource().get(function(resp) { - return resp.repositories.map(function (repo) { + return resp.repositories.map(function(repo) { repo.is_starred = true; return repo; }); }); }; + // Iterate over all of the $scope.namespaces and collect their respective + // repositories. var loadRepos = function() { if ($scope.namespaces.length == 0 || $scope.user.anonymous) { return; } + console.log('load repos called'); for (var i = 0; i < $scope.namespaces.length; i++) { var namespace = $scope.namespaces[i];