nitweb: rewrite catalog frontend
[nit.git] / share / nitweb / javascripts / catalog.js
1 /*
2 * Copyright 2016 Alexandre Terrasa <alexandre@moz-code.org>.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 (function() {
18 angular.module('catalog', [])
19
20 /* Router */
21
22 .config(function($stateProvider, $locationProvider) {
23 $stateProvider
24 .state('catalog', {
25 url: '/?p&n',
26 controller: 'CatalogCtrl',
27 controllerAs: 'vm',
28 templateUrl: 'views/catalog/index.html',
29 resolve: {
30 packages: function(Catalog, $q, $stateParams, $state) {
31 var d = $q.defer();
32 var page = $stateParams.p ? $stateParams.p : 1;
33 var limit = $stateParams.n ? $stateParams.n : 10;
34 Catalog.packages(page, limit, d.resolve,
35 function(err) {
36 $state.go('404', null, { location: false })
37 });
38 return d.promise;
39 },
40 tags: function(Catalog, $q, $state) {
41 var d = $q.defer();
42 Catalog.tags(d.resolve,
43 function(err) {
44 $state.go('404', null, { location: false })
45 });
46 return d.promise;
47 },
48 stats: function(Catalog, $q, $state) {
49 var d = $q.defer();
50 Catalog.stats(d.resolve,
51 function(err) {
52 $state.go('404', null, { location: false })
53 });
54 return d.promise;
55
56 }
57 }
58 })
59 .state('person', {
60 url: '/person/:id?p1&n1&p2&n2',
61 controller: 'PersonCtrl',
62 controllerAs: 'vm',
63 templateUrl: 'views/catalog/person.html',
64 resolve: {
65 person: function(Catalog, $q, $stateParams, $state) {
66 var d = $q.defer();
67 Catalog.person($stateParams.id, d.resolve,
68 function(err) {
69 $state.go('404', null, { location: false })
70 });
71 return d.promise;
72 },
73 maintaining: function(Catalog, $q, $stateParams, $state) {
74 var d = $q.defer();
75 var p1 = $stateParams.p2 ? $stateParams.p1 : 1;
76 var n1 = $stateParams.n2 ? $stateParams.n1 : 10;
77 Catalog.personMaintaining($stateParams.id, p1, n1, d.resolve,
78 function(err) {
79 $state.go('404', null, { location: false })
80 });
81 return d.promise;
82 },
83 contributing: function(Catalog, $q, $stateParams, $state) {
84 var d = $q.defer();
85 var p2 = $stateParams.p2 ? $stateParams.p2 : 1;
86 var n2 = $stateParams.n2 ? $stateParams.n2 : 10;
87 Catalog.personContributing($stateParams.id, p2, n2, d.resolve,
88 function(err) {
89 $state.go('404', null, { location: false })
90 });
91 return d.promise;
92
93 }
94 }
95 })
96 .state('tag', {
97 url: '/tag/:id?p&n',
98 controller: 'TagCtrl',
99 controllerAs: 'vm',
100 templateUrl: 'views/catalog/tag.html',
101 resolve: {
102 tag: function(Catalog, $q, $stateParams, $state) {
103 var d = $q.defer();
104 var page = $stateParams.p ? $stateParams.p : 1;
105 var limit = $stateParams.l ? $stateParams.l : 10;
106 Catalog.tag($stateParams.id, page, limit, d.resolve,
107 function() {
108 $state.go('404', null, { location: false })
109 });
110 return d.promise;
111 }
112 }
113 })
114 })
115
116 /* Factories */
117
118 .factory('Catalog', [ '$http', function($http) {
119 return {
120 stats: function(cb, cbErr) {
121 $http.get('/api/catalog/stats')
122 .success(cb)
123 .error(cbErr);
124 },
125 packages: function(p, n, cb, cbErr) {
126 $http.get('/api/catalog/packages?p=' + p + '&n=' + n)
127 .success(cb)
128 .error(cbErr);
129 },
130 tags: function(cb, cbErr) {
131 $http.get('/api/catalog/tags')
132 .success(cb)
133 .error(cbErr);
134 },
135 person: function(id, cb, cbErr) {
136 $http.get('/api/catalog/person/' + id)
137 .success(cb)
138 .error(cbErr);
139 },
140 personMaintaining: function(id, p, n, cb, cbErr) {
141 $http.get('/api/catalog/person/' + id + '/maintaining?p=' + p + '&n=' + n)
142 .success(cb)
143 .error(cbErr);
144 },
145 personContributing: function(id, p, n, cb, cbErr) {
146 $http.get('/api/catalog/person/' + id + '/contributing?p=' + p + '&n=' + n)
147 .success(cb)
148 .error(cbErr);
149 },
150 tag: function(id, p, n, cb, cbErr) {
151 $http.get('/api/catalog/tag/' + id + '?p=' + p + '&n=' + n)
152 .success(cb)
153 .error(cbErr);
154 }
155 };
156 }])
157
158 /* Controllers */
159
160 .controller('CatalogCtrl', function($scope, $state, packages, tags, stats) {
161 var vm = this;
162 vm.packages = packages;
163 vm.tags = tags;
164 vm.stats = stats;
165
166 $scope.$on('change-page', function(e, page, limit) {
167 $state.go('catalog', {p: page, l: limit});
168 })
169 })
170
171 .controller('PersonCtrl', function($scope, $state, $stateParams, person, maintaining, contributing) {
172 var vm = this;
173 vm.person = person;
174 vm.maintaining = maintaining;
175 vm.contributing = contributing;
176
177 var p1 = $stateParams.p1 ? $stateParams.p1 : 1;
178 var n1 = $stateParams.n1 ? $stateParams.n1 : 10;
179 var p2 = $stateParams.p2 ? $stateParams.p2 : 1;
180 var n2 = $stateParams.n2 ? $stateParams.n2 : 10;
181
182 $scope.$on('change-page1', function(e, page, limit) {
183 $state.go('person', {id: $stateParams.id, p1: page, n1: limit, p2: p2, n2: n2});
184 })
185
186 $scope.$on('change-page2', function(e, page, limit) {
187 $state.go('person', {id: $stateParams.id, p1: p1, n1: n1, p2: page, n2: limit});
188 })
189 })
190
191 .controller('TagCtrl', function($state, $scope, tag) {
192 var vm = this;
193 vm.tag = tag;
194
195 $scope.$on('change-page', function(e, page, limit) {
196 $state.go('tag', {id: vm.tag.tag, p: page, l: limit});
197 })
198 })
199 })();