From: Alexandre Terrasa Date: Tue, 15 Aug 2017 20:55:32 +0000 (-0400) Subject: nitweb: rewrite catalog frontend X-Git-Url: http://nitlanguage.org nitweb: rewrite catalog frontend Signed-off-by: Alexandre Terrasa --- diff --git a/share/nitweb/directives/contributor-list.html b/share/nitweb/directives/contributor-list.html deleted file mode 100644 index a46cce9..0000000 --- a/share/nitweb/directives/contributor-list.html +++ /dev/null @@ -1,11 +0,0 @@ -
-

- {{listTitle}} -

-
    -
  • - - {{contributor.name}} -
  • -
-
diff --git a/share/nitweb/directives/entity/card.html b/share/nitweb/directives/entity/card.html index 9f85113..18675a0 100644 --- a/share/nitweb/directives/entity/card.html +++ b/share/nitweb/directives/entity/card.html @@ -2,10 +2,34 @@
-
+
+ + + {{tag}} + , + +
+
+
+ +
+ +
+
diff --git a/share/nitweb/javascripts/catalog.js b/share/nitweb/javascripts/catalog.js index 922ae1e..2667db3 100644 --- a/share/nitweb/javascripts/catalog.js +++ b/share/nitweb/javascripts/catalog.js @@ -15,138 +15,185 @@ */ (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}); }) + }) })(); diff --git a/share/nitweb/javascripts/nitweb.js b/share/nitweb/javascripts/nitweb.js index 10e17fa..1de3f69 100644 --- a/share/nitweb/javascripts/nitweb.js +++ b/share/nitweb/javascripts/nitweb.js @@ -21,9 +21,12 @@ cfpLoadingBarProvider.includeSpinner = false; }]) - .run(['$anchorScroll', function($anchorScroll) { + .run(function($rootScope, $anchorScroll) { $anchorScroll.yOffset = 80; - }]) + $rootScope.$on('$stateChangeSuccess', function() { + $anchorScroll(); + }); + }) .config(function($stateProvider, $locationProvider) { $stateProvider diff --git a/share/nitweb/views/catalog/by_tags.html b/share/nitweb/views/catalog/by_tags.html deleted file mode 100644 index 31ca905..0000000 --- a/share/nitweb/views/catalog/by_tags.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

Tags

-
-
- {{packages.length}} - {{tag}} -
-
-
- -
-
diff --git a/share/nitweb/views/catalog/highlighted.html b/share/nitweb/views/catalog/highlighted.html deleted file mode 100644 index 5607bd5..0000000 --- a/share/nitweb/views/catalog/highlighted.html +++ /dev/null @@ -1,5 +0,0 @@ -
- -
diff --git a/share/nitweb/views/catalog/index.html b/share/nitweb/views/catalog/index.html index 877db4a..2333a0a 100644 --- a/share/nitweb/views/catalog/index.html +++ b/share/nitweb/views/catalog/index.html @@ -1,47 +1,35 @@ -
+
- - - - - -
-
{{value}} {{key}}
-
+
+ + {{value}} {{key}} +   + +
+
-
-
-
-
- -
+
+

Tags

+
+
+ {{packages}} + {{tag}}
-
- - +
+
+ +
+

Packages

+
+ +
+
+
diff --git a/share/nitweb/views/catalog/most_required.html b/share/nitweb/views/catalog/most_required.html deleted file mode 100644 index 93bf2e1..0000000 --- a/share/nitweb/views/catalog/most_required.html +++ /dev/null @@ -1,5 +0,0 @@ -
- -
diff --git a/share/nitweb/views/catalog/person.html b/share/nitweb/views/catalog/person.html new file mode 100644 index 0000000..433b73d --- /dev/null +++ b/share/nitweb/views/catalog/person.html @@ -0,0 +1,33 @@ +
+
+ +
+
+

+ {{vm.person.name}}
+ {{vm.person.email}} +

+
+
+
+

+
+
+

{{vm.maintaining.total}} maintained projects

+
+ +
+
+ +
+
+
+

{{vm.contributing.total}} contributed projects

+
+ +
+
+ +
+
+
diff --git a/share/nitweb/views/catalog/tag.html b/share/nitweb/views/catalog/tag.html new file mode 100644 index 0000000..6c0a37e --- /dev/null +++ b/share/nitweb/views/catalog/tag.html @@ -0,0 +1,16 @@ +
+

+ {{vm.tag.tag}} + {{vm.tag.packages.total}} packages +

+
+ +
+
+ +
+
+ +
+
+