*/
(function() {
- angular
- .module('catalog', [])
-
- .config(function($stateProvider, $locationProvider) {
- $stateProvider
- .state('catalog', {
- url: '/',
- templateUrl: 'views/catalog/index.html',
- controller: 'CatalogCtrl',
- controllerAs: 'vm',
- abstract: true
- })
- .state('catalog.highlighted', {
- url: '',
- templateUrl: 'views/catalog/highlighted.html',
- controller: 'CatalogHighlightedCtrl',
- controllerAs: 'vm'
- })
- .state('catalog.required', {
- url: 'required',
- templateUrl: 'views/catalog/most_required.html',
- controller: 'CatalogRequiredCtrl',
- controllerAs: 'vm'
- })
- .state('catalog.tags', {
- url: 'tags',
- templateUrl: 'views/catalog/by_tags.html',
- controller: 'CatalogTagsCtrl',
- controllerAs: 'vm'
- })
- })
-
- .factory('Catalog', [ '$http', function($http) {
- return {
- loadHightlighted: function(cb, cbErr) {
- $http.get('/api/catalog/highlighted')
- .success(cb)
- .error(cbErr);
- },
-
- loadMostRequired: function(cb, cbErr) {
- $http.get('/api/catalog/required')
- .success(cb)
- .error(cbErr);
- },
-
- loadByTags: function(cb, cbErr) {
- $http.get('/api/catalog/bytags')
- .success(cb)
- .error(cbErr);
- },
-
- loadStats: function(cb, cbErr) {
- $http.get('/api/catalog/stats')
- .success(cb)
- .error(cbErr);
- },
-
- loadContributors: function(cb, cbErr) {
- $http.get('/api/catalog/contributors')
- .success(cb)
- .error(cbErr);
- },
+ angular.module('catalog', [])
+
+ /* Router */
+
+ .config(function($stateProvider, $locationProvider) {
+ $stateProvider
+ .state('catalog', {
+ url: '/?p&n',
+ controller: 'CatalogCtrl',
+ controllerAs: 'vm',
+ templateUrl: 'views/catalog/index.html',
+ resolve: {
+ packages: function(Catalog, $q, $stateParams, $state) {
+ var d = $q.defer();
+ var page = $stateParams.p ? $stateParams.p : 1;
+ var limit = $stateParams.n ? $stateParams.n : 10;
+ Catalog.packages(page, limit, d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ },
+ tags: function(Catalog, $q, $state) {
+ var d = $q.defer();
+ Catalog.tags(d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ },
+ stats: function(Catalog, $q, $state) {
+ var d = $q.defer();
+ Catalog.stats(d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+
+ }
+ }
+ })
+ .state('person', {
+ url: '/person/:id?p1&n1&p2&n2',
+ controller: 'PersonCtrl',
+ controllerAs: 'vm',
+ templateUrl: 'views/catalog/person.html',
+ resolve: {
+ person: function(Catalog, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Catalog.person($stateParams.id, d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ },
+ maintaining: function(Catalog, $q, $stateParams, $state) {
+ var d = $q.defer();
+ var p1 = $stateParams.p2 ? $stateParams.p1 : 1;
+ var n1 = $stateParams.n2 ? $stateParams.n1 : 10;
+ Catalog.personMaintaining($stateParams.id, p1, n1, d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ },
+ contributing: function(Catalog, $q, $stateParams, $state) {
+ var d = $q.defer();
+ var p2 = $stateParams.p2 ? $stateParams.p2 : 1;
+ var n2 = $stateParams.n2 ? $stateParams.n2 : 10;
+ Catalog.personContributing($stateParams.id, p2, n2, d.resolve,
+ function(err) {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+
+ }
+ }
+ })
+ .state('tag', {
+ url: '/tag/:id?p&n',
+ controller: 'TagCtrl',
+ controllerAs: 'vm',
+ templateUrl: 'views/catalog/tag.html',
+ resolve: {
+ tag: function(Catalog, $q, $stateParams, $state) {
+ var d = $q.defer();
+ var page = $stateParams.p ? $stateParams.p : 1;
+ var limit = $stateParams.l ? $stateParams.l : 10;
+ Catalog.tag($stateParams.id, page, limit, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ }
+ })
+ })
+
+ /* Factories */
+
+ .factory('Catalog', [ '$http', function($http) {
+ return {
+ stats: function(cb, cbErr) {
+ $http.get('/api/catalog/stats')
+ .success(cb)
+ .error(cbErr);
+ },
+ packages: function(p, n, cb, cbErr) {
+ $http.get('/api/catalog/packages?p=' + p + '&n=' + n)
+ .success(cb)
+ .error(cbErr);
+ },
+ tags: function(cb, cbErr) {
+ $http.get('/api/catalog/tags')
+ .success(cb)
+ .error(cbErr);
+ },
+ person: function(id, cb, cbErr) {
+ $http.get('/api/catalog/person/' + id)
+ .success(cb)
+ .error(cbErr);
+ },
+ personMaintaining: function(id, p, n, cb, cbErr) {
+ $http.get('/api/catalog/person/' + id + '/maintaining?p=' + p + '&n=' + n)
+ .success(cb)
+ .error(cbErr);
+ },
+ personContributing: function(id, p, n, cb, cbErr) {
+ $http.get('/api/catalog/person/' + id + '/contributing?p=' + p + '&n=' + n)
+ .success(cb)
+ .error(cbErr);
+ },
+ tag: function(id, p, n, cb, cbErr) {
+ $http.get('/api/catalog/tag/' + id + '?p=' + p + '&n=' + n)
+ .success(cb)
+ .error(cbErr);
}
- }])
-
- .controller('CatalogCtrl', function(Catalog) {
- var vm = this;
-
- Catalog.loadContributors(
- function(data) {
- vm.contributors = data;
- }, function(err) {
- vm.error = err;
- });
-
- Catalog.loadStats(
- function(data) {
- vm.stats = data;
- }, function(err) {
- vm.error = err;
- });
- })
-
- .controller('CatalogHighlightedCtrl', function(Catalog) {
- var vm = this;
+ };
+ }])
- Catalog.loadHightlighted(
- function(data) {
- vm.highlighted = data;
- }, function(err) {
- vm.error = err;
- });
- })
+ /* Controllers */
- .controller('CatalogRequiredCtrl', function(Catalog) {
- var vm = this;
+ .controller('CatalogCtrl', function($scope, $state, packages, tags, stats) {
+ var vm = this;
+ vm.packages = packages;
+ vm.tags = tags;
+ vm.stats = stats;
- Catalog.loadMostRequired(
- function(data) {
- vm.required = data;
- }, function(err) {
- vm.error = err;
- });
+ $scope.$on('change-page', function(e, page, limit) {
+ $state.go('catalog', {p: page, l: limit});
})
+ })
- .controller('CatalogTagsCtrl', function(Catalog, $anchorScroll, $location) {
- var vm = this;
+ .controller('PersonCtrl', function($scope, $state, $stateParams, person, maintaining, contributing) {
+ var vm = this;
+ vm.person = person;
+ vm.maintaining = maintaining;
+ vm.contributing = contributing;
- Catalog.loadByTags(
- function(data) {
- vm.bytags = data;
- }, function(err) {
- vm.error = err;
- });
+ var p1 = $stateParams.p1 ? $stateParams.p1 : 1;
+ var n1 = $stateParams.n1 ? $stateParams.n1 : 10;
+ var p2 = $stateParams.p2 ? $stateParams.p2 : 1;
+ var n2 = $stateParams.n2 ? $stateParams.n2 : 10;
+ $scope.$on('change-page1', function(e, page, limit) {
+ $state.go('person', {id: $stateParams.id, p1: page, n1: limit, p2: p2, n2: n2});
+ })
- vm.scrollTo = function(hash) {
- $location.hash(hash);
- $anchorScroll();
- }
+ $scope.$on('change-page2', function(e, page, limit) {
+ $state.go('person', {id: $stateParams.id, p1: p1, n1: n1, p2: page, n2: limit});
})
+ })
+
+ .controller('TagCtrl', function($state, $scope, tag) {
+ var vm = this;
+ vm.tag = tag;
- .directive('contributorList', function(Model) {
- return {
- restrict: 'E',
- scope: {
- listId: '@',
- listTitle: '@',
- listContributors: '='
- },
- templateUrl: '/directives/contributor-list.html'
- };
+ $scope.$on('change-page', function(e, page, limit) {
+ $state.go('tag', {id: vm.tag.tag, p: page, l: limit});
})
+ })
})();