Commit dde36a08b9f2f33b62e218a8977fb26d797e77ae

Authored by Leonardo Merlin
2 parents 41162f46 3816b368

Merge branch 'fix-search-proposals'

src/app/components/a11y-bar/a11y-bar.html
... ... @@ -16,24 +16,18 @@
16 16 </a>
17 17 </li>
18 18 <li>
19   - <a class="color-theme-common-fg" accesskey="3" href="#search" id="skip-to-search" ng-click="focusOn('#search', $event)">
  19 + <a class="color-theme-common-fg" accesskey="3" id="skip-to-search" ui-sref="inicio({scroll:'lista-de-programas'})" ui-sref-opts="{reload: true}">
20 20 Ir para a busca
21 21 <span class="color-theme-common-bg">3</span>
22 22 </a>
23 23 </li>
24   - <!-- <li>
25   - <a class="color-theme-common-fg" accesskey="4" href="#footer" id="skip-to-footer" ng-click="focusOn('#footer', $event)">
26   - Ir para o rodapé
27   - <span class="color-theme-common-bg">4</span>
28   - </a>
29   - </li> -->
30 24 </ul>
31 25 </div>
32 26  
33 27 <div class="col-sm-6">
34 28 <ul class="action-links list-inline list-unstyled pull-right">
35 29 <li>
36   - <a id="siteaction-accessibility" class="color-theme-common-fg" href="#" title="Acessibilidade" accesskey="5" ng-click="actionAccessibility()">Acessibilidade</a>
  30 + <a id="siteaction-accessibility" class="color-theme-common-fg" href="http://portalpadrao.gov.br/acessibilidade" target="_blank" title="Acessibilidade" accesskey="5">Acessibilidade</a>
37 31 </li>
38 32 <li>
39 33 <a id="siteaction-contrast" class="color-theme-common-fg" href="#" title="Alto Contraste" accesskey="6" ng-click="actionContrast()">Alto Contraste</a>
... ...
src/app/components/article-service/article.service.js
... ... @@ -137,7 +137,7 @@
137 137 getProposalById(topicId + '/children', params, cbSuccess, cbError);
138 138 }
139 139  
140   - function createProposal (proposal, targetId, cbSuccess, cbError){
  140 + function createProposal (proposal, targetId, categoryId, cbSuccess, cbError){
141 141  
142 142 if(!$rootScope.currentUser){
143 143 cbError({message: 'Usuário não logado.'});
... ... @@ -147,6 +147,7 @@
147 147  
148 148 var encodedParams = [];
149 149 encodedParams.push('article%5Babstract%5D=' + proposal);
  150 + encodedParams.push('article%5Bcategory_ids%5D%5B%5D=' + categoryId);
150 151 encodedParams.push('article%5Btype%5D=ProposalsDiscussionPlugin%3A%3AProposal');
151 152 encodedParams.push('content_type=ProposalsDiscussionPlugin%3A%3AProposal');
152 153 encodedParams.push('private_token=' + $rootScope.currentUser.private_token);
... ...
src/app/index.route.js
... ... @@ -9,7 +9,7 @@
9 9 function routeConfig($stateProvider, $urlRouterProvider) {
10 10 $stateProvider
11 11 .state('inicio', {
12   - url: '/?tema&filtro',
  12 + url: '/?tema&filtro&scroll',
13 13 ncyBreadcrumb: {label: 'Home'},
14 14 reloadOnSearch: false,
15 15 views: {
... ...
src/app/pages/inicio/inicio.controller.js
... ... @@ -7,7 +7,7 @@
7 7 .controller('InicioPageController', InicioPageController);
8 8  
9 9 /** @ngInject */
10   - function InicioPageController(DialogaService, $scope, $location, $filter, $sce, $log) {
  10 + function InicioPageController(DialogaService, $scope, $location, $filter, $sce, $timeout, $log) {
11 11 var vm = this;
12 12  
13 13 // aliases
... ... @@ -16,6 +16,7 @@
16 16 vm.$location = $location;
17 17 vm.$filter = $filter;
18 18 vm.$sce = $sce;
  19 + vm.$timeout = $timeout;
19 20 vm.$log = $log;
20 21  
21 22 vm.init();
... ... @@ -35,6 +36,7 @@
35 36 vm.programs = null;
36 37 vm.filtredPrograms = null;
37 38 vm.query = null;
  39 + vm.scroll = null;
38 40 vm.search = vm.$location.search();
39 41  
40 42 if (vm.search.tema) {
... ... @@ -49,6 +51,10 @@
49 51 vm.loadingFilter = true;
50 52 }
51 53  
  54 + if (vm.search.scroll) {
  55 + vm.scroll = vm.search.scroll;
  56 + }
  57 +
52 58 vm.loading = null;
53 59 vm.error = null;
54 60 };
... ... @@ -113,12 +119,44 @@
113 119 vm.loadingPrograms = false;
114 120  
115 121 vm.filter();
  122 +
  123 + _loadAfterPrograms();
116 124 }, function(error) {
117 125 vm.$log.error('Error on getPrograms.', error);
118 126 vm.loadingPrograms = false;
119 127 vm.errorPrograms = error;
120 128 });
121 129 }
  130 +
  131 + function _loadAfterPrograms () {
  132 + vm._scrollHandler();
  133 + }
  134 + };
  135 +
  136 + InicioPageController.prototype._scrollHandler = function() {
  137 + var vm = this;
  138 +
  139 + // scroll handler
  140 + if (vm.search.scroll) {
  141 + var scroll = vm.search.scroll;
  142 + var scrollTop = 0;
  143 +
  144 + if(angular.isNumber(scroll)){
  145 + scrollTop = parseInt(scroll);
  146 + }else{
  147 + // find by ID
  148 + var $target = angular.element('#' + vm.search.scroll);
  149 + if ($target && $target.length > 0) {
  150 + scrollTop = $target.offset().top;
  151 + }else {
  152 + vm.$log.warn('element not found:', vm.search.scroll);
  153 + }
  154 + }
  155 +
  156 + vm.$timeout(function() {
  157 + angular.element('body').animate({scrollTop: scrollTop}, 'fast');
  158 + }, 0); // force queue
  159 + }
122 160 };
123 161  
124 162 InicioPageController.prototype.attachListeners = function() {
... ...
src/app/pages/programas/programa.controller.js
... ... @@ -123,7 +123,8 @@
123 123  
124 124 vm.proposalStatus = vm.PROPOSAL_STATUS.SENDING;
125 125  
126   - vm.DialogaService.createProposal(proposal, vm.article.id, function(response) {
  126 + var category_id = vm.article.categories[0].id;
  127 + vm.DialogaService.createProposal(proposal, vm.article.id, category_id, function(response) {
127 128 vm.$log.debug('response', response);
128 129 // vm.message =
129 130 // vm.proposalStatus = vm.PROPOSAL_STATUS.SENT | vm.PROPOSAL_STATUS.SUCCESS;
... ...
src/app/pages/propostas/propostas.controller.js
... ... @@ -27,11 +27,11 @@
27 27 PropostasPageController.prototype.init = function() {
28 28 var vm = this;
29 29  
  30 + vm.page = 1;
  31 + vm.per_page = 20;
30 32 vm.themes = null;
31 33 vm.selectedTheme = null;
32 34 vm.filtredPrograms = null;
33   - vm.selectedProgram = null;
34   - vm.proposals = null;
35 35 vm.filtredProposals = null;
36 36 vm.query = null;
37 37 vm.search = vm.$location.search();
... ... @@ -73,11 +73,14 @@
73 73  
74 74 // load Proposals
75 75 vm.loadingProposals = true;
76   - vm.DialogaService.getProposals({}, function(data) {
77   - vm.proposals = data.articles;
78   - vm.filtredProposals = vm.proposals;
  76 + vm.DialogaService.searchProposals({
  77 + page: vm.page,
  78 + per_page: vm.per_page
  79 + }, function(data) {
  80 + vm.filtredProposals = data.articles;
  81 + vm.total_proposals = parseInt(data._obj.headers('total'));
  82 +
79 83 vm.loadingProposals = false;
80   - vm.loading = false;
81 84  
82 85 if (cb) {
83 86 cb();
... ... @@ -86,7 +89,6 @@
86 89 vm.error = error;
87 90 vm.$log.error(error);
88 91 vm.loadingProposals = false;
89   - vm.loading = false;
90 92 });
91 93 };
92 94  
... ... @@ -100,23 +102,13 @@
100 102 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) {
101 103 vm.search.tema = newValue ? newValue.slug : null;
102 104 vm.$location.search('tema', vm.search.tema);
103   - vm.filtredProposals = vm.getFiltredProposals();
104   - });
105   -
106   - vm.$scope.$on('change-selectedTopic', function(event, selectedTopic) {
107   - vm.selectedProgram = selectedTopic;
108   - });
109   -
110   - vm.$scope.$watch('pagePropostas.selectedProgram', function(newValue/*, oldValue*/) {
111   - vm.search.programa = newValue ? newValue.slug : null;
112   - vm.$location.search('programa', vm.search.programa);
113   - vm.filtredProposals = vm.getFiltredProposals();
  105 + vm.filterProposals();
114 106 });
115 107  
116 108 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) {
117 109 vm.search.filtro = newValue ? newValue : null;
118 110 vm.$location.search('filtro', vm.search.filtro);
119   - vm.filtredProposals = vm.getFiltredProposals();
  111 + vm.filterProposals();
120 112 });
121 113 };
122 114  
... ... @@ -127,35 +119,45 @@
127 119 vm.selectedTheme = null;
128 120 };
129 121  
130   - PropostasPageController.prototype.getFiltredProposals = function() {
  122 + PropostasPageController.prototype.changePage = function(pageIndex) {
131 123 var vm = this;
132 124  
133   - if (!vm.proposals) {
134   - vm.$log.info('No proposals loaded yet. Abort.');
135   - return null;
136   - }
137   -
138   - var input = vm.proposals;
139   - var output = input;
140   - var query = vm.query;
141   - var selectedTheme = vm.selectedTheme;
142   - var selectedProgram = vm.selectedProgram;
  125 + vm.page = pageIndex;
  126 + vm.filterProposals(pageIndex);
  127 + };
143 128  
144   - var filter = vm.$filter('filter');
  129 + PropostasPageController.prototype.filterProposals = function(_page, _per_page) {
  130 + var vm = this;
145 131  
146   - if (selectedTheme) {
147   - output = vm.DialogaService.filterProposalsByCategorySlug(output, selectedTheme.slug);
  132 + if (vm.loadingProposals){
  133 + vm.$log.debug('Content is not loaded yet.');
  134 + return;
148 135 }
149 136  
150   - if (selectedProgram) {
151   - output = vm.DialogaService.filterProposalsByProgramId(output, selectedProgram.id);
152   - }
  137 + var page = _page || vm.page;
  138 + var per_page = _per_page || vm.per_page;
  139 + var query = vm.query;
  140 + var params = {
  141 + page: page,
  142 + per_page: per_page,
  143 + };
153 144  
154   - if (query) {
155   - output = filter(output, query, false);
  145 + if (vm.selectedTheme) {
  146 + params.categories_ids = vm.selectedTheme.id;
156 147 }
157 148  
158   - return output;
  149 + if (query) {params.query = query; }
  150 +
  151 + vm.loadingProposals = true;
  152 + vm.DialogaService.searchProposals(params, function(data){
  153 + vm.total_proposals = parseInt(data._obj.headers('total'));
  154 + vm.filtredProposals = data.articles;
  155 + vm.loadingProposals = false;
  156 + }, function (error) {
  157 + vm.error = error;
  158 + vm.$log.error(error);
  159 + vm.loadingProposals = false;
  160 + });
159 161 };
160 162  
161 163 PropostasPageController.prototype.submitSearch = function() {
... ... @@ -167,7 +169,7 @@
167 169 var $searchResult = angular.element('#search-result');
168 170 if ($searchResult && $searchResult.length > 0) {
169 171 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast');
170   - vm.filtredProposals = vm.getFiltredProposals();
  172 + vm.filterProposals();
171 173 }else {
172 174 vm.$log.warn('#search-result element not found.');
173 175 }
... ...
src/app/pages/propostas/propostas.html
... ... @@ -26,7 +26,7 @@
26 26 </div>
27 27 </section>
28 28  
29   - <section class="section--header" ng-if="pagePropostas.proposals || pagePropostas.themes">
  29 + <section class="section--header" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
30 30 <div class="container">
31 31 <div class="row">
32 32 <div class="col-sm-12">
... ... @@ -36,7 +36,7 @@
36 36 </div>
37 37 </section>
38 38  
39   - <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.proposals || pagePropostas.themes">
  39 + <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
40 40 <div class="container">
41 41 <div id="lista-de-propostas" class="row">
42 42 <div class="col-sm-4 col-md-3">
... ... @@ -72,7 +72,7 @@
72 72 </div>
73 73 </div>
74 74 <div class="col-sm-8 col-md-9">
75   - <div class="row hidden-xs" ng-if="pagePropostas.proposals">
  75 + <div class="row hidden-xs" ng-if="pagePropostas.filtredProposals">
76 76 <div class="col-xs-12">
77 77 <div class="input-group input-group-lg input-group-search">
78 78 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
... ... @@ -89,24 +89,30 @@
89 89 </div>
90 90 </div>
91 91  
92   - <div id="search-result" class="row" ng-if="pagePropostas.proposals">
  92 + <div id="search-result" class="row" ng-if="pagePropostas.filtredProposals">
93 93 <div class="col-sm-12">
94 94 <header class="header">
95   - <h2>Total de Propostas: "<b>{{pagePropostas.filtredProposals.length}} propostas</b>"</h2>
  95 + <h2>Total de Propostas: "<b>{{pagePropostas.total_proposals}} propostas</b>"</h2>
96 96 </header>
97 97 </div>
98 98 </div>
99 99  
100 100 <div class="row">
101   - <div class="col-sm-12" ng-if="pagePropostas.proposals">
  101 + <div class="col-sm-12" ng-if="!pagePropostas.loadingProposals && pagePropostas.filtredProposals && pagePropostas.total_proposals">
102 102 <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>
  103 + <app-paginator
  104 + page="pagePropostas.page"
  105 + per-page="pagePropostas.per_page"
  106 + total="pagePropostas.total_proposals"
  107 + change-page="pagePropostas.changePage(pageIndex)"
  108 + ></app-paginator>
103 109 </div>
104   - <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals">
  110 + <div ng-if="pagePropostas.loadingProposals">
105 111 <div class="alert alert-info" role="alert">
106 112 Carregando propostas.
107 113 </div>
108 114 </div>
109   - <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError">
  115 + <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">
110 116 <div class="alert alert-danger" role="alert">
111 117 Não foi possível carregar a lista de propostas neste momento.
112 118 </div>
... ...
src/app/pages/ranking/ranking.controller.js
... ... @@ -6,11 +6,12 @@
6 6 .controller('RankingPageController', RankingPageController);
7 7  
8 8 /** @ngInject */
9   - function RankingPageController(DialogaService, $scope, $location, $filter, $log) {
  9 + function RankingPageController(DialogaService, $scope, $rootScope, $location, $filter, $log) {
10 10 var vm = this;
11 11  
12 12 vm.DialogaService = DialogaService;
13 13 vm.$scope = $scope;
  14 + vm.$rootScope = $rootScope;
14 15 vm.$location = $location;
15 16 vm.$filter = $filter;
16 17 vm.$log = $log;
... ... @@ -18,6 +19,7 @@
18 19 vm.init();
19 20 vm.loadData();
20 21 // vm.attachListeners(); // attach listeners after load data (SYNC)
  22 + vm.$rootScope.focusMainContent();
21 23  
22 24 $log.debug('RankingPageController');
23 25 }
... ... @@ -31,7 +33,6 @@
31 33 vm.selectedTheme = null;
32 34 vm.filtredPrograms = null;
33 35 vm.selectedProgram = null;
34   - vm.proposals = null;
35 36 vm.filtredProposals = null;
36 37 vm.query = null;
37 38 vm.search = vm.$location.search();
... ... @@ -139,8 +140,7 @@
139 140 page: vm.page,
140 141 per_page: vm.per_page
141 142 }, function(data){
142   - vm.proposals = data.articles;
143   - vm.filtredProposals = vm.proposals;
  143 + vm.filtredProposals = data.articles;
144 144 vm.loadingProposals = false;
145 145  
146 146 vm.attachListeners();
... ... @@ -212,28 +212,26 @@
212 212 var per_page = _per_page || vm.per_page;
213 213 var query = vm.query;
214 214 var selectedProgram = vm.selectedProgram;
  215 + var params = {
  216 + page: page,
  217 + per_page: per_page
  218 + };
215 219  
216 220 if (selectedProgram) {
217   - var params = {
218   - page: page,
219   - per_page: per_page,
220   - parent_id: selectedProgram.id
221   - };
222   -
223   - if (query) {params.query = query; }
224   -
225   - vm.loadingProposals = true;
226   - vm.DialogaService.searchProposals(params, function(data){
227   - vm.total_proposals = parseInt(data._obj.headers('total'));
228   - vm.filtredProposals = data.articles;
229   - vm.loadingProposals = false;
230   - }, function (error) {
231   - vm.error = error;
232   - vm.$log.error(error);
233   - vm.loadingProposals = false;
234   - });
235   - } else {
236   - vm.filtredProposals = [];
  221 + params.parent_id = selectedProgram.id;
237 222 }
  223 +
  224 + if (query) {params.query = query; }
  225 +
  226 + vm.loadingProposals = true;
  227 + vm.DialogaService.searchProposals(params, function(data){
  228 + vm.total_proposals = parseInt(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 + });
238 236 };
239 237 })();
... ...
src/app/pages/ranking/ranking.html
... ... @@ -6,8 +6,27 @@
6 6 </div>
7 7 </div>
8 8  
9   -<div class="page--propostas">
10   - <section class="section--info">
  9 +<div class="page--ranking" role="main">
  10 +
  11 + <section class="section-info" ng-if="pageRanking.loading || pageRanking.error">
  12 + <div class="container">
  13 + <div class="row">
  14 + <div class="col-md-12">
  15 + <div ng-if="pageRanking.loading && !pageRanking.error">
  16 + <div class="alert alert-info" role="alert">Carregando conteúdo...</div>
  17 + </div>
  18 +
  19 + <div ng-if="pageRanking.error">
  20 + <div class="alert alert-danger" role="alert">
  21 + Erro ao carregar o conteúdo principal.
  22 + </div>
  23 + </div>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + </section>
  28 +
  29 + <section class="section--info" ng-if="pageRanking.filtredProposals || pageRanking.themes">
11 30 <div class="container">
12 31 <div class="row">
13 32 <div class="col-sm-12">
... ... @@ -16,7 +35,8 @@
16 35 </div>
17 36 </div>
18 37 </section>
19   - <section class="section--articles section-gray section-space-up" ng-if="pageRanking.proposals">
  38 +
  39 + <section class="section--articles section-gray section-space-up" ng-if="pageRanking.filtredProposals || pageRanking.themes">
20 40 <div class="container">
21 41 <div id="lista-de-propostas" class="row">
22 42 <div class="col-sm-4 col-md-3">
... ...