nitweb: migrate frontend to new json/commands
[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, l, cb, cbErr) {
126 $http.get('/api/catalog/packages?p=' + p + '&l=' + l)
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, l, cb, cbErr) {
141 $http.get('/api/catalog/person/' + id + '/maintaining?p=' + p + '&l=' + l)
142 .success(cb)
143 .error(cbErr);
144 },
145 personContributing: function(id, p, l, cb, cbErr) {
146 $http.get('/api/catalog/person/' + id + '/contributing?p=' + p + '&l=' + l)
147 .success(cb)
148 .error(cbErr);
149 },
150 tag: function(id, p, l, cb, cbErr) {
151 $http.get('/api/catalog/tag/' + id + '?p=' + p + '&l=' + l)
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 $scope.$on('change-page', function(e, page, limit) {
166 $state.go('catalog', {p: page, l: limit});
167 })
168 })
169
170 .controller('PersonCtrl', function($scope, $state, $stateParams, person, maintaining, contributing) {
171 var vm = this;
172 vm.person = person;
173 vm.maintaining = maintaining;
174 vm.contributing = contributing;
175
176 var p1 = $stateParams.p1 ? $stateParams.p1 : 1;
177 var l1 = $stateParams.l1 ? $stateParams.l1 : 10;
178 var p2 = $stateParams.p2 ? $stateParams.p2 : 1;
179 var l2 = $stateParams.l2 ? $stateParams.l2 : 10;
180
181 $scope.$on('change-page1', function(e, page, limit) {
182 $state.go('person', {id: $stateParams.id, p1: page, l1: limit, p2: p2, l2: l2});
183 })
184
185 $scope.$on('change-page2', function(e, page, limit) {
186 $state.go('person', {id: $stateParams.id, p1: p1, l1: l1, p2: page, l2: limit});
187 })
188 })
189
190 .controller('TagCtrl', function($state, $scope, tag) {
191 var vm = this;
192 vm.tag = tag;
193 $scope.$on('change-page', function(e, page, limit) {
194 $state.go('tag', {id: vm.tag.tag, p: page, l: limit});
195 })
196 })
197 })();