Commit ef3b9ec3b257ed53bca8ab9d142144893a45da25
1 parent
2e71444d
Exists in
master
and in
8 other branches
Sync - merlin
Showing
12 changed files
with
420 additions
and
172 deletions
Show diff stats
src/app/components/app-paginator/app-paginator.directive.js
0 → 100644
... | ... | @@ -0,0 +1,67 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('dialoga') | |
6 | + .directive('appPaginator', appPaginator); | |
7 | + | |
8 | + /** @ngInject */ | |
9 | + function appPaginator() { | |
10 | + | |
11 | + /** @ngInject */ | |
12 | + function AppPaginatorController($log) { | |
13 | + var vm = this; | |
14 | + | |
15 | + vm.$log = $log; | |
16 | + | |
17 | + vm.init(); | |
18 | + | |
19 | + $log.debug('AppPaginatorController'); | |
20 | + } | |
21 | + | |
22 | + AppPaginatorController.prototype.init = function () { | |
23 | + var vm = this; | |
24 | + | |
25 | + vm.page = vm.page || 1; | |
26 | + vm.perPage = vm.perPage || 20; | |
27 | + vm.total = vm.total || 0; | |
28 | + }; | |
29 | + | |
30 | + AppPaginatorController.prototype.showPage = function (pageIndex) { | |
31 | + var vm = this; | |
32 | + | |
33 | + if (pageIndex < 0) { | |
34 | + pageIndex = 0; | |
35 | + } | |
36 | + | |
37 | + if (pageIndex > (vm.arraypages.length-1)) { | |
38 | + pageIndex = vm.arraypages.length-1; | |
39 | + } | |
40 | + | |
41 | + if(vm.changePage){ | |
42 | + vm.changePage({pageIndex: (pageIndex + 1 )}); | |
43 | + }else{ | |
44 | + vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); | |
45 | + } | |
46 | + vm.currentPageIndex = pageIndex; | |
47 | + }; | |
48 | + | |
49 | + var directive = { | |
50 | + restrict: 'E', | |
51 | + templateUrl: 'app/components/app-paginator/app-paginator.html', | |
52 | + scope: { | |
53 | + page: '=', | |
54 | + perPage: '=', | |
55 | + total: '=', | |
56 | + changePage: '&' | |
57 | + }, | |
58 | + controller: AppPaginatorController, | |
59 | + controllerAs: 'vm', | |
60 | + bindToController: true | |
61 | + }; | |
62 | + | |
63 | + | |
64 | + return directive; | |
65 | + } | |
66 | + | |
67 | +})(); | ... | ... |
... | ... | @@ -0,0 +1,17 @@ |
1 | +<nav ng-if="vm.arraypages.length > 1"> | |
2 | + <ul class="pagination"> | |
3 | + <li ng-style="{'visibility': (vm.currentPageIndex === 0) ? 'hidden' : 'visible'}"> | |
4 | + <a class="btn-pagination" href="#" aria-label="Previous" ng-click="vm.showPage(vm.currentPageIndex-1)"> | |
5 | + <span aria-hidden="true" class="glyphicon glyphicon-chevron-left pagination-icon"></span> | |
6 | + </a> | |
7 | + </li> | |
8 | + <li ng-repeat="paginas in vm.arraypages track by $index" ng-class="{ 'active' : ($index) == vm.currentPageIndex }" > | |
9 | + <a class="btn-pagination" href="#" ng-click="vm.showPage($index)">{{::($index)+1}}</a> | |
10 | + </li> | |
11 | + <li ng-style="{'visibility': (vm.currentPageIndex === (vm.arraypages.length -1)) ? 'hidden' : 'visible'}"> | |
12 | + <a class="btn-pagination" href="#" aria-label="Next" ng-click="vm.showPage(vm.currentPageIndex+1)"> | |
13 | + <span aria-hidden="true" class="glyphicon glyphicon-chevron-right pagination-icon"></span> | |
14 | + </a> | |
15 | + </li> | |
16 | + </ul> | |
17 | +</nav> | ... | ... |
src/app/components/dialoga-service/dialoga.service.js
... | ... | @@ -160,7 +160,7 @@ |
160 | 160 | var result = CACHE.programs.filter(function filterProgramBySlug (program) { |
161 | 161 | var category = program.categories[0]; |
162 | 162 | |
163 | - if(angular.equals(category.id, themeId)) { | |
163 | + if(category && angular.equals(category.id, themeId)) { | |
164 | 164 | return true; |
165 | 165 | } |
166 | 166 | return false; |
... | ... | @@ -226,8 +226,8 @@ |
226 | 226 | ArticleService.searchTopics({query: query}, cbSuccess, cbError); |
227 | 227 | } |
228 | 228 | |
229 | - function searchProposals (query, cbSuccess, cbError) { | |
230 | - ArticleService.searchProposals({query: query}, cbSuccess, cbError); | |
229 | + function searchProposals (params, cbSuccess, cbError) { | |
230 | + ArticleService.searchProposals(params, cbSuccess, cbError); | |
231 | 231 | } |
232 | 232 | |
233 | 233 | function _pipeHandleYoutube (data) { | ... | ... |
src/app/components/proposal-list/proposal-list.directive.js
... | ... | @@ -44,16 +44,13 @@ |
44 | 44 | var vm = this; |
45 | 45 | |
46 | 46 | vm.currentPageIndex = 0; |
47 | - | |
48 | 47 | vm.proposalsPerPage = vm.getProposalsPerPage(0); |
49 | - | |
50 | - vm.proposalsLength = vm.proposals.length; | |
51 | - | |
48 | + vm.proposalsLength = vm.total || vm.proposals.length; | |
52 | 49 | |
53 | 50 | if ((vm.proposalsLength % vm.perPage) === 0) { |
54 | - vm.pages = vm.proposalsLength / vm.perPage; | |
51 | + vm.pages = vm.proposalsLength / vm.perPage; | |
55 | 52 | } else{ |
56 | - vm.pages = (vm.proposalsLength / vm.perPage) + 1; | |
53 | + vm.pages = (vm.proposalsLength / vm.perPage) + 1; | |
57 | 54 | } |
58 | 55 | |
59 | 56 | // vm.arraypages = new Array(Math.ceil(vm.pages)); |
... | ... | @@ -98,7 +95,11 @@ |
98 | 95 | pageIndex = vm.arraypages.length-1; |
99 | 96 | } |
100 | 97 | |
101 | - vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); | |
98 | + if(vm.changePage){ | |
99 | + vm.changePage({pageIndex: (pageIndex + 1 )}); | |
100 | + }else{ | |
101 | + vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); | |
102 | + } | |
102 | 103 | vm.currentPageIndex = pageIndex; |
103 | 104 | }; |
104 | 105 | |
... | ... | @@ -132,7 +133,10 @@ |
132 | 133 | templateUrl: 'app/components/proposal-list/proposal-list.html', |
133 | 134 | scope: { |
134 | 135 | proposals: '=', |
135 | - perPage: '=' | |
136 | + page: '=', | |
137 | + perPage: '=', | |
138 | + total: '=', | |
139 | + changePage: '&' | |
136 | 140 | }, |
137 | 141 | controller: ProposalListController, |
138 | 142 | controllerAs: 'vm', | ... | ... |
src/app/components/util-service/utils.service.js
src/app/index.route.js
... | ... | @@ -106,12 +106,12 @@ |
106 | 106 | .state('ranking', { |
107 | 107 | url: '/ranking?tema&programa&filtro', |
108 | 108 | reloadOnSearch: false, |
109 | - ncyBreadcrumb: {label: 'Propostas'}, | |
109 | + ncyBreadcrumb: {label: 'Ranking'}, | |
110 | 110 | views: { |
111 | 111 | 'main': { |
112 | - templateUrl: 'app/pages/propostas/ranking.html', | |
113 | - controller: 'PropostasPageController', | |
114 | - controllerAs: 'pagePropostas' | |
112 | + templateUrl: 'app/pages/ranking/ranking.html', | |
113 | + controller: 'RankingPageController', | |
114 | + controllerAs: 'pageRanking' | |
115 | 115 | } |
116 | 116 | } |
117 | 117 | }) | ... | ... |
src/app/pages/propostas/propostas.controller.js
1 | -/** | |
2 | - * Controlador das páginas: | |
3 | - * - Propostas | |
4 | - * - Ranking | |
5 | - */ | |
6 | 1 | (function() { |
7 | 2 | 'use strict'; |
8 | 3 | |
... | ... | @@ -50,10 +45,7 @@ |
50 | 45 | |
51 | 46 | // Behaviour: |
52 | 47 | // 1. Load themes |
53 | - // 2. Select a Random Theme (T) | |
54 | - // 3. Load programs of T | |
55 | - // 4. Select a random program of T | |
56 | - // 5. Filter the list of proposals | |
48 | + // 1. Load Proposals per_page | |
57 | 49 | // END. |
58 | 50 | |
59 | 51 | // 1. Load themes |
... | ... | @@ -63,30 +55,8 @@ |
63 | 55 | vm.loadingThemes = false; |
64 | 56 | vm.loading = false; |
65 | 57 | |
66 | - // 2. Select a Random Theme (T) | |
67 | - var selectedTheme = null; | |
68 | - if(vm.search.tema){ | |
69 | - | |
70 | - // vanilla filter | |
71 | - var results = vm.themes.filter(function(t){ | |
72 | - return t.slug === vm.search.tema; | |
73 | - }); | |
74 | - | |
75 | - if(results && results.length > 0){ | |
76 | - selectedTheme = results[0]; | |
77 | - vm.selectedTheme = selectedTheme; | |
78 | - } | |
79 | - } | |
80 | - | |
81 | - if(!selectedTheme){ | |
82 | - vm.selectedTheme = vm.themes[Math.floor(Math.random() * vm.themes.length)]; | |
83 | - } | |
84 | - | |
85 | - // 3. Load programs of T | |
86 | - // (AND 4) | |
87 | - var themeId = vm.selectedTheme.id; | |
88 | - vm.loadPrograms(themeId, function(){ | |
89 | - vm.loadProposals(); | |
58 | + vm.loadProposals(function (){ | |
59 | + vm.attachListeners(); | |
90 | 60 | }); |
91 | 61 | }, function (error) { |
92 | 62 | vm.error = error; |
... | ... | @@ -96,44 +66,7 @@ |
96 | 66 | }); |
97 | 67 | }; |
98 | 68 | |
99 | - PropostasPageController.prototype.loadPrograms = function (themeId, cb) { | |
100 | - var vm = this; | |
101 | - | |
102 | - vm.DialogaService.getProgramsByThemeId(themeId, function (programs){ | |
103 | - | |
104 | - vm.filtredPrograms = programs; | |
105 | - | |
106 | - // 4. Select a random program of T | |
107 | - var selectedProgram = null; | |
108 | - if(vm.search.programa){ | |
109 | - | |
110 | - // vanilla filter | |
111 | - var results = vm.filtredPrograms.filter(function(p){ | |
112 | - return p.slug === vm.search.programa; | |
113 | - }); | |
114 | - | |
115 | - if(results && results.length > 0){ | |
116 | - selectedProgram = results[0]; | |
117 | - vm.selectedProgram = selectedProgram; | |
118 | - } | |
119 | - } | |
120 | - | |
121 | - if(!selectedProgram){ | |
122 | - vm.selectedProgram = vm.filtredPrograms[Math.floor(Math.random() * vm.filtredPrograms.length)]; | |
123 | - } | |
124 | - | |
125 | - if(cb){ | |
126 | - cb(); | |
127 | - } | |
128 | - }, function(error){ | |
129 | - vm.$log.error(error); | |
130 | - if(cb){ | |
131 | - cb(); | |
132 | - } | |
133 | - }); | |
134 | - }; | |
135 | - | |
136 | - PropostasPageController.prototype.loadProposals = function () { | |
69 | + PropostasPageController.prototype.loadProposals = function (cb) { | |
137 | 70 | var vm = this; |
138 | 71 | |
139 | 72 | // load Proposals |
... | ... | @@ -144,7 +77,9 @@ |
144 | 77 | vm.loadingProposals = false; |
145 | 78 | vm.loading = false; |
146 | 79 | |
147 | - vm.attachListeners(); | |
80 | + if(cb){ | |
81 | + cb(); | |
82 | + } | |
148 | 83 | }, function (error) { |
149 | 84 | vm.error = error; |
150 | 85 | vm.$log.error(error); |
... | ... | @@ -163,12 +98,7 @@ |
163 | 98 | vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue, oldValue) { |
164 | 99 | vm.search.tema = newValue ? newValue.slug : null; |
165 | 100 | vm.$location.search('tema', vm.search.tema); |
166 | - | |
167 | - if(vm.selectedTheme && vm.selectedTheme.id){ | |
168 | - vm.loadPrograms(vm.selectedTheme.id, function(){ | |
169 | - vm.filtredProposals = vm.getFiltredProposals(); | |
170 | - }); | |
171 | - } | |
101 | + vm.filtredProposals = vm.getFiltredProposals(); | |
172 | 102 | }); |
173 | 103 | |
174 | 104 | vm.$scope.$on('change-selectedTopic', function (event, selectedTopic) { |
... | ... | @@ -188,17 +118,6 @@ |
188 | 118 | }); |
189 | 119 | }; |
190 | 120 | |
191 | - PropostasPageController.prototype.showAllPrograms = function($event) { | |
192 | - var vm = this; | |
193 | - $event.stopPropagation(); | |
194 | - | |
195 | - vm.resetFilterValues(); | |
196 | - | |
197 | - vm._showAllFlag = true; | |
198 | - | |
199 | - vm.filtredPrograms = vm.getFiltredPrograms(); | |
200 | - }; | |
201 | - | |
202 | 121 | PropostasPageController.prototype.resetFilterValues = function() { |
203 | 122 | var vm = this; |
204 | 123 | ... | ... |
src/app/pages/propostas/ranking.html
... | ... | @@ -1,68 +0,0 @@ |
1 | -<div class="container"> | |
2 | - <div class="row"> | |
3 | - <div class="col-sm-12"> | |
4 | - <div ncy-breadcrumb></div> | |
5 | - </div> | |
6 | - </div> | |
7 | -</div> | |
8 | - | |
9 | -<div class="page--propostas"> | |
10 | - <section class="section--info"> | |
11 | - <div class="container"> | |
12 | - <div class="row"> | |
13 | - <div class="col-sm-12"> | |
14 | - <h1>Ranking</h1> | |
15 | - </div> | |
16 | - </div> | |
17 | - </div> | |
18 | - </section> | |
19 | - <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.proposals"> | |
20 | - <div class="container"> | |
21 | - <div id="lista-de-propostas" class="row"> | |
22 | - <div class="col-sm-4 col-md-3"> | |
23 | - <div ng-if="pagePropostas.themes"> | |
24 | - <category-list categories="pagePropostas.themes" selected-category="pagePropostas.selectedTheme" disable-unselect="true"></category-list> | |
25 | - </div> | |
26 | - <div ng-if="pagePropostas.filtredPrograms && pagePropostas.selectedProgram" class="topics-select--wrapper"> | |
27 | - <topics-select topics="pagePropostas.filtredPrograms" selected-topic="pagePropostas.selectedProgram"></topics-select> | |
28 | - </div> | |
29 | - <div ng-if="!pagePropostas.themes && pagePropostas.loadingThemes"> | |
30 | - <div class="alert alert-info" role="alert"> | |
31 | - Carregando temas. | |
32 | - </div> | |
33 | - </div> | |
34 | - <div ng-if="!pagePropostas.themes && pagePropostas.themesError"> | |
35 | - <div class="alert alert-danger" role="alert"> | |
36 | - Não foi possível carregar a lista de temas neste momento. | |
37 | - </div> | |
38 | - </div> | |
39 | - </div> | |
40 | - <div class="col-sm-8 col-md-9"> | |
41 | - <div class="row"> | |
42 | - <div class="col-sm-12"> | |
43 | - <header class="header"> | |
44 | - <h2 style="margin-top:0;">Total de Propostas: "<span>{{pagePropostas.filtredProposals.length}} propostas</span>"</h2> | |
45 | - </header> | |
46 | - </div> | |
47 | - </div> | |
48 | - | |
49 | - <div class="row"> | |
50 | - <div class="col-sm-12" ng-if="pagePropostas.proposals"> | |
51 | - <proposal-list proposals="pagePropostas.filtredProposals" per-page="10"></proposal-list> | |
52 | - </div> | |
53 | - <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals"> | |
54 | - <div class="alert alert-info" role="alert"> | |
55 | - Carregando propostas. | |
56 | - </div> | |
57 | - </div> | |
58 | - <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError"> | |
59 | - <div class="alert alert-danger" role="alert"> | |
60 | - Não foi possível carregar a lista de propostas neste momento. | |
61 | - </div> | |
62 | - </div> | |
63 | - </div> | |
64 | - </div> | |
65 | - </div> | |
66 | - </div> | |
67 | - </section> | |
68 | -</div> |
... | ... | @@ -0,0 +1,240 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('dialoga') | |
6 | + .controller('RankingPageController', RankingPageController); | |
7 | + | |
8 | + /** @ngInject */ | |
9 | + function RankingPageController(DialogaService, $scope, $location, $filter, $log) { | |
10 | + var vm = this; | |
11 | + | |
12 | + vm.DialogaService = DialogaService; | |
13 | + vm.$scope = $scope; | |
14 | + vm.$location = $location; | |
15 | + vm.$filter = $filter; | |
16 | + vm.$log = $log; | |
17 | + | |
18 | + vm.init(); | |
19 | + vm.loadData(); | |
20 | + // vm.attachListeners(); // attach listeners after load data (SYNC) | |
21 | + | |
22 | + $log.debug('RankingPageController'); | |
23 | + } | |
24 | + | |
25 | + RankingPageController.prototype.init = function () { | |
26 | + var vm = this; | |
27 | + | |
28 | + vm.page = 1; | |
29 | + vm.per_page = 3; | |
30 | + vm.themes = null; | |
31 | + vm.selectedTheme = null; | |
32 | + vm.filtredPrograms = null; | |
33 | + vm.selectedProgram = null; | |
34 | + vm.proposals = null; | |
35 | + vm.filtredProposals = null; | |
36 | + vm.query = null; | |
37 | + vm.search = vm.$location.search(); | |
38 | + | |
39 | + vm.loading = null; | |
40 | + vm.error = null; | |
41 | + }; | |
42 | + | |
43 | + RankingPageController.prototype.loadData = function () { | |
44 | + var vm = this; | |
45 | + | |
46 | + vm.loading = true; | |
47 | + | |
48 | + // Behaviour: | |
49 | + // 1. Load themes | |
50 | + // 2. Select a Random Theme (T) | |
51 | + // 3. Load programs of T | |
52 | + // 4. Select a random program of T | |
53 | + // 5. Filter the list of proposals | |
54 | + // END. | |
55 | + | |
56 | + // 1. Load themes | |
57 | + vm.loadingThemes = true; | |
58 | + vm.DialogaService.getThemes(function(themes){ | |
59 | + vm.themes = themes; | |
60 | + vm.loadingThemes = false; | |
61 | + | |
62 | + // 2. Select a Random Theme (T) | |
63 | + var selectedTheme = null; | |
64 | + if(vm.search.tema){ | |
65 | + | |
66 | + // vanilla filter | |
67 | + var results = vm.themes.filter(function(t){ | |
68 | + return t.slug === vm.search.tema; | |
69 | + }); | |
70 | + | |
71 | + if(results && results.length > 0){ | |
72 | + selectedTheme = results[0]; | |
73 | + vm.selectedTheme = selectedTheme; | |
74 | + } | |
75 | + } | |
76 | + | |
77 | + if(!selectedTheme){ | |
78 | + vm.selectedTheme = vm.themes[Math.floor(Math.random() * vm.themes.length)]; | |
79 | + } | |
80 | + | |
81 | + // 3. Load programs of T | |
82 | + // (AND 4) | |
83 | + var themeId = vm.selectedTheme.id; | |
84 | + vm.loadPrograms(themeId, function(){ | |
85 | + vm.loadProposals(); | |
86 | + vm.loading = false; | |
87 | + }); | |
88 | + }, function (error) { | |
89 | + vm.error = error; | |
90 | + vm.$log.error(error); | |
91 | + vm.loadingThemes = false; | |
92 | + vm.loading = false; | |
93 | + }); | |
94 | + }; | |
95 | + | |
96 | + RankingPageController.prototype.loadPrograms = function (themeId, cb) { | |
97 | + var vm = this; | |
98 | + | |
99 | + vm.DialogaService.getProgramsByThemeId(themeId, function (programs){ | |
100 | + | |
101 | + vm.filtredPrograms = programs; | |
102 | + | |
103 | + // 4. Select a random program of T | |
104 | + var selectedProgram = null; | |
105 | + if(vm.search.programa){ | |
106 | + | |
107 | + // vanilla filter | |
108 | + var results = vm.filtredPrograms.filter(function(p){ | |
109 | + return p.slug === vm.search.programa; | |
110 | + }); | |
111 | + | |
112 | + if(results && results.length > 0){ | |
113 | + selectedProgram = results[0]; | |
114 | + vm.selectedProgram = selectedProgram; | |
115 | + } | |
116 | + } | |
117 | + | |
118 | + if(!selectedProgram){ | |
119 | + vm.selectedProgram = vm.filtredPrograms[Math.floor(Math.random() * vm.filtredPrograms.length)]; | |
120 | + } | |
121 | + | |
122 | + if(cb){ | |
123 | + cb(); | |
124 | + } | |
125 | + }, function(error){ | |
126 | + vm.$log.error(error); | |
127 | + if(cb){ | |
128 | + cb(); | |
129 | + } | |
130 | + }); | |
131 | + }; | |
132 | + | |
133 | + RankingPageController.prototype.loadProposals = function () { | |
134 | + var vm = this; | |
135 | + | |
136 | + // load Proposals | |
137 | + vm.loadingProposals = true; | |
138 | + vm.DialogaService.getProposals({}, function(data){ | |
139 | + vm.proposals = data.articles; | |
140 | + vm.filtredProposals = vm.proposals; | |
141 | + vm.loadingProposals = false; | |
142 | + | |
143 | + vm.attachListeners(); | |
144 | + }, function (error) { | |
145 | + vm.error = error; | |
146 | + vm.$log.error(error); | |
147 | + vm.loadingProposals = false; | |
148 | + }); | |
149 | + }; | |
150 | + | |
151 | + RankingPageController.prototype.attachListeners = function() { | |
152 | + var vm = this; | |
153 | + | |
154 | + vm.$scope.$on('change-selectedCategory', function (event, selectedCategory) { | |
155 | + vm.selectedTheme = selectedCategory; | |
156 | + }); | |
157 | + | |
158 | + vm.$scope.$watch('pageRanking.selectedTheme', function(newValue, oldValue) { | |
159 | + vm.search.tema = newValue ? newValue.slug : null; | |
160 | + vm.$location.search('tema', vm.search.tema); | |
161 | + | |
162 | + if(vm.selectedTheme && vm.selectedTheme.id){ | |
163 | + vm.loadPrograms(vm.selectedTheme.id, function(){ | |
164 | + vm.filterProposals(); | |
165 | + }); | |
166 | + } | |
167 | + }); | |
168 | + | |
169 | + vm.$scope.$on('change-selectedTopic', function (event, selectedTopic) { | |
170 | + vm.selectedProgram = selectedTopic; | |
171 | + }); | |
172 | + | |
173 | + vm.$scope.$watch('pageRanking.selectedProgram', function(newValue, oldValue) { | |
174 | + vm.search.programa = newValue ? newValue.slug : null; | |
175 | + vm.$location.search('programa', vm.search.programa); | |
176 | + vm.filterProposals(); | |
177 | + }); | |
178 | + | |
179 | + vm.$scope.$watch('pageRanking.query', function(newValue/*, oldValue*/) { | |
180 | + vm.search.filtro = newValue ? newValue : null; | |
181 | + vm.$location.search('filtro', vm.search.filtro); | |
182 | + vm.filterProposals(); | |
183 | + }); | |
184 | + }; | |
185 | + | |
186 | + RankingPageController.prototype.resetFilterValues = function() { | |
187 | + var vm = this; | |
188 | + | |
189 | + vm.query = null; | |
190 | + vm.selectedTheme = null; | |
191 | + }; | |
192 | + | |
193 | + RankingPageController.prototype.changePage = function(pageIndex) { | |
194 | + var vm = this; | |
195 | + | |
196 | + vm.filterProposals(pageIndex); | |
197 | + }; | |
198 | + | |
199 | + RankingPageController.prototype.filterProposals = function(_page, _per_page) { | |
200 | + var vm = this; | |
201 | + | |
202 | + if (vm.loadingProposals){ | |
203 | + vm.$log.debug('Content is not loaded yet.'); | |
204 | + return; | |
205 | + } | |
206 | + | |
207 | + var page = _page || vm.page; | |
208 | + var per_page = _per_page || vm.per_page; | |
209 | + var input = vm.proposals; | |
210 | + var output = input; | |
211 | + var query = vm.query; | |
212 | + var selectedTheme = vm.selectedTheme; | |
213 | + var selectedProgram = vm.selectedProgram; | |
214 | + | |
215 | + var filter = vm.$filter('filter'); | |
216 | + | |
217 | + if (selectedProgram) { | |
218 | + var params = { | |
219 | + page: page, | |
220 | + per_page: per_page, | |
221 | + parent_id: selectedProgram.id | |
222 | + }; | |
223 | + | |
224 | + if (query) {params.query = query; } | |
225 | + | |
226 | + vm.loadingProposals = true; | |
227 | + vm.DialogaService.searchProposals(params, function(data){ | |
228 | + vm.total_proposals = data._obj.headers('total'); | |
229 | + vm.filtredProposals = data.articles; | |
230 | + vm.loadingProposals = false; | |
231 | + }, function (error) { | |
232 | + vm.error = error; | |
233 | + vm.$log.error(error); | |
234 | + vm.loadingProposals = false; | |
235 | + }); | |
236 | + } else { | |
237 | + vm.filtredProposals = []; | |
238 | + } | |
239 | + }; | |
240 | +})(); | ... | ... |
... | ... | @@ -0,0 +1,68 @@ |
1 | +<div class="container"> | |
2 | + <div class="row"> | |
3 | + <div class="col-sm-12"> | |
4 | + <div ncy-breadcrumb></div> | |
5 | + </div> | |
6 | + </div> | |
7 | +</div> | |
8 | + | |
9 | +<div class="page--propostas"> | |
10 | + <section class="section--info"> | |
11 | + <div class="container"> | |
12 | + <div class="row"> | |
13 | + <div class="col-sm-12"> | |
14 | + <h1>Ranking</h1> | |
15 | + </div> | |
16 | + </div> | |
17 | + </div> | |
18 | + </section> | |
19 | + <section class="section--articles section-gray section-space-up" ng-if="pageRanking.proposals"> | |
20 | + <div class="container"> | |
21 | + <div id="lista-de-propostas" class="row"> | |
22 | + <div class="col-sm-4 col-md-3"> | |
23 | + <div ng-if="pageRanking.themes"> | |
24 | + <category-list categories="pageRanking.themes" selected-category="pageRanking.selectedTheme" disable-unselect="true"></category-list> | |
25 | + </div> | |
26 | + <div ng-if="pageRanking.filtredPrograms && pageRanking.selectedProgram" class="topics-select--wrapper"> | |
27 | + <topics-select topics="pageRanking.filtredPrograms" selected-topic="pageRanking.selectedProgram"></topics-select> | |
28 | + </div> | |
29 | + <div ng-if="!pageRanking.themes && pageRanking.loadingThemes"> | |
30 | + <div class="alert alert-info" role="alert"> | |
31 | + Carregando temas. | |
32 | + </div> | |
33 | + </div> | |
34 | + <div ng-if="!pageRanking.themes && pageRanking.themesError"> | |
35 | + <div class="alert alert-danger" role="alert"> | |
36 | + Não foi possível carregar a lista de temas neste momento. | |
37 | + </div> | |
38 | + </div> | |
39 | + </div> | |
40 | + <div class="col-sm-8 col-md-9"> | |
41 | + <div class="row"> | |
42 | + <div class="col-sm-12"> | |
43 | + <header class="header"> | |
44 | + <h2 style="margin-top:0;">Total de Propostas: "<span>{{pageRanking.total_proposals}} propostas</span>"</h2> | |
45 | + </header> | |
46 | + </div> | |
47 | + </div> | |
48 | + | |
49 | + <div class="row"> | |
50 | + <div class="col-sm-12" ng-if="pageRanking.proposals"> | |
51 | + <proposal-list proposals="pageRanking.filtredProposals" per-page="pageRanking.per_page" total="pageRanking.total_proposals" change-page="pageRanking.changePage(pageIndex)"></proposal-list> | |
52 | + </div> | |
53 | + <div class="col-sm-12" ng-if="pageRanking.loadingProposals"> | |
54 | + <div class="alert alert-info" role="alert"> | |
55 | + Carregando propostas. | |
56 | + </div> | |
57 | + </div> | |
58 | + <div class="col-sm-12" ng-if="pageRanking.proposalsError"> | |
59 | + <div class="alert alert-danger" role="alert"> | |
60 | + Não foi possível carregar a lista de propostas neste momento. | |
61 | + </div> | |
62 | + </div> | |
63 | + </div> | |
64 | + </div> | |
65 | + </div> | |
66 | + </div> | |
67 | + </section> | |
68 | +</div> | ... | ... |
src/assets/images/icons/tema-reducao-da-pobreza-small.png
src/assets/images/icons/tema-reducao-da-pobreza.png