*/
(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});
})
+ })
})();
-<div class='container-fluid'>
+<div class='container'>
<div class='page-header'>
<h2>Welcome to NitWeb!</h2>
<p class='text-muted'>The Nit knowledge base.</p>
</div>
- <ul class='nav nav-tabs' role='tablist'>
- <li role='presentation' ui-sref-active='active'>
- <a ui-sref='catalog.highlighted'>
- <span class='glyphicon glyphicon-book'/> Highlighed
- </a>
- </li>
- <li role='presentation' ui-sref-active='active'>
- <a ui-sref='catalog.required'>
- <span class='glyphicon glyphicon-book'/> Most required
- </a>
- </li>
- <li role='presentation' ui-sref-active='active'>
- <a ui-sref='catalog.tags'>
- <span class='glyphicon glyphicon-book'/> By tags
- </a>
- </li>
- </ul>
- <table class='table'>
- <tr>
- <td ng-repeat='(key, value) in vm.stats'>
- <h5><strong>{{value}}</strong> <span>{{key}}</span></h5>
- </td>
- </tr>
- </table>
+ <div ng-if='vm.stats' class='container-fluid no-padding'>
+ <span ng-repeat='(key, value) in vm.stats' class='text-muted small'>
+ <strong>{{value}}</strong> <span>{{key}}</span>
+
+ </span>
+ </div>
+ <hr/>
- <div class='container-fluid'>
- <div class='col-xs-9'>
- <div class='tab-content'>
- <div role='tabpanel' class='tab-pane fade in active'>
- <ui-view />
- </div>
+ <div class='col-md-3 col-md-push-9 no-padding' ng-if='vm.tags'>
+ <h2>Tags</h2>
+ <div class='container-fluid no-padding'>
+ <div class='col-xs-3 col-md-12' ng-repeat='(tag, packages) in vm.tags'>
+ <span class='badge'>{{packages}}</span>
+ <a ui-sref='tag({id: tag})'>{{tag}}</a>
</div>
</div>
- <div class='col-xs-3'>
- <contributor-list list-title='Maintainers'
- list-contributors='vm.contributors.maintainers' />
- <contributor-list list-title='Contributors'
- list-contributors='vm.contributors.contributors' />
+ <hr/>
+ </div>
+
+ <div class='col-md-9 col-md-pull-3 no-padding'>
+ <h2>Packages</h2>
+ <div class='card-list'>
+ <entity-card mentity='package' ng-repeat='package in vm.packages.results' />
+ </div>
+ <div class='container text-center' ng-if='vm.packages'>
+ <ui-pagination pagination='vm.packages'/>
</div>
</div>
</div>