Commit cea98aed628fac6e8ac734b23018ef8c34e2518e

Authored by Leonardo Merlin
2 parents 40b44295 dde36a08

Merge branch 'master' into staging

src/app/components/a11y-bar/a11y-bar.html
@@ -16,24 +16,18 @@ @@ -16,24 +16,18 @@
16 </a> 16 </a>
17 </li> 17 </li>
18 <li> 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 Ir para a busca 20 Ir para a busca
21 <span class="color-theme-common-bg">3</span> 21 <span class="color-theme-common-bg">3</span>
22 </a> 22 </a>
23 </li> 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 </ul> 24 </ul>
31 </div> 25 </div>
32 26
33 <div class="col-sm-6"> 27 <div class="col-sm-6">
34 <ul class="action-links list-inline list-unstyled pull-right"> 28 <ul class="action-links list-inline list-unstyled pull-right">
35 <li> 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 </li> 31 </li>
38 <li> 32 <li>
39 <a id="siteaction-contrast" class="color-theme-common-fg" href="#" title="Alto Contraste" accesskey="6" ng-click="actionContrast()">Alto Contraste</a> 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,7 +137,7 @@
137 getProposalById(topicId + '/children', params, cbSuccess, cbError); 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 if(!$rootScope.currentUser){ 142 if(!$rootScope.currentUser){
143 cbError({message: 'Usuário não logado.'}); 143 cbError({message: 'Usuário não logado.'});
@@ -147,6 +147,7 @@ @@ -147,6 +147,7 @@
147 147
148 var encodedParams = []; 148 var encodedParams = [];
149 encodedParams.push('article%5Babstract%5D=' + proposal); 149 encodedParams.push('article%5Babstract%5D=' + proposal);
  150 + encodedParams.push('article%5Bcategory_ids%5D%5B%5D=' + categoryId);
150 encodedParams.push('article%5Btype%5D=ProposalsDiscussionPlugin%3A%3AProposal'); 151 encodedParams.push('article%5Btype%5D=ProposalsDiscussionPlugin%3A%3AProposal');
151 encodedParams.push('content_type=ProposalsDiscussionPlugin%3A%3AProposal'); 152 encodedParams.push('content_type=ProposalsDiscussionPlugin%3A%3AProposal');
152 encodedParams.push('private_token=' + $rootScope.currentUser.private_token); 153 encodedParams.push('private_token=' + $rootScope.currentUser.private_token);
src/app/components/auth/auth.service.js
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 .then(function(response) { 37 .then(function(response) {
38 $log.debug('AuthService.register [SUCCESS] response', response); 38 $log.debug('AuthService.register [SUCCESS] response', response);
39 39
40 - var currentUser = Session.create(response.data['user']); 40 + var currentUser = Session.create(response.data);
41 41
42 $rootScope.currentUser = currentUser; 42 $rootScope.currentUser = currentUser;
43 $rootScope.$broadcast(AUTH_EVENTS.registerSuccess, currentUser); 43 $rootScope.$broadcast(AUTH_EVENTS.registerSuccess, currentUser);
src/app/index.route.js
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 function routeConfig($stateProvider, $urlRouterProvider) { 9 function routeConfig($stateProvider, $urlRouterProvider) {
10 $stateProvider 10 $stateProvider
11 .state('inicio', { 11 .state('inicio', {
12 - url: '/?tema&filtro', 12 + url: '/?tema&filtro&scroll',
13 ncyBreadcrumb: {label: 'Home'}, 13 ncyBreadcrumb: {label: 'Home'},
14 reloadOnSearch: false, 14 reloadOnSearch: false,
15 views: { 15 views: {
src/app/pages/inicio/inicio.controller.js
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 .controller('InicioPageController', InicioPageController); 7 .controller('InicioPageController', InicioPageController);
8 8
9 /** @ngInject */ 9 /** @ngInject */
10 - function InicioPageController(DialogaService, $scope, $location, $filter, $sce, $log) { 10 + function InicioPageController(DialogaService, $scope, $location, $filter, $sce, $timeout, $log) {
11 var vm = this; 11 var vm = this;
12 12
13 // aliases 13 // aliases
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 vm.$location = $location; 16 vm.$location = $location;
17 vm.$filter = $filter; 17 vm.$filter = $filter;
18 vm.$sce = $sce; 18 vm.$sce = $sce;
  19 + vm.$timeout = $timeout;
19 vm.$log = $log; 20 vm.$log = $log;
20 21
21 vm.init(); 22 vm.init();
@@ -35,6 +36,7 @@ @@ -35,6 +36,7 @@
35 vm.programs = null; 36 vm.programs = null;
36 vm.filtredPrograms = null; 37 vm.filtredPrograms = null;
37 vm.query = null; 38 vm.query = null;
  39 + vm.scroll = null;
38 vm.search = vm.$location.search(); 40 vm.search = vm.$location.search();
39 41
40 if (vm.search.tema) { 42 if (vm.search.tema) {
@@ -49,6 +51,10 @@ @@ -49,6 +51,10 @@
49 vm.loadingFilter = true; 51 vm.loadingFilter = true;
50 } 52 }
51 53
  54 + if (vm.search.scroll) {
  55 + vm.scroll = vm.search.scroll;
  56 + }
  57 +
52 vm.loading = null; 58 vm.loading = null;
53 vm.error = null; 59 vm.error = null;
54 }; 60 };
@@ -113,12 +119,44 @@ @@ -113,12 +119,44 @@
113 vm.loadingPrograms = false; 119 vm.loadingPrograms = false;
114 120
115 vm.filter(); 121 vm.filter();
  122 +
  123 + _loadAfterPrograms();
116 }, function(error) { 124 }, function(error) {
117 vm.$log.error('Error on getPrograms.', error); 125 vm.$log.error('Error on getPrograms.', error);
118 vm.loadingPrograms = false; 126 vm.loadingPrograms = false;
119 vm.errorPrograms = error; 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 InicioPageController.prototype.attachListeners = function() { 162 InicioPageController.prototype.attachListeners = function() {
src/app/pages/programas/programa.controller.js
@@ -123,7 +123,8 @@ @@ -123,7 +123,8 @@
123 123
124 vm.proposalStatus = vm.PROPOSAL_STATUS.SENDING; 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 vm.$log.debug('response', response); 128 vm.$log.debug('response', response);
128 // vm.message = 129 // vm.message =
129 // vm.proposalStatus = vm.PROPOSAL_STATUS.SENT | vm.PROPOSAL_STATUS.SUCCESS; 130 // vm.proposalStatus = vm.PROPOSAL_STATUS.SENT | vm.PROPOSAL_STATUS.SUCCESS;
src/app/pages/propostas/propostas.controller.js
@@ -27,11 +27,11 @@ @@ -27,11 +27,11 @@
27 PropostasPageController.prototype.init = function() { 27 PropostasPageController.prototype.init = function() {
28 var vm = this; 28 var vm = this;
29 29
  30 + vm.page = 1;
  31 + vm.per_page = 20;
30 vm.themes = null; 32 vm.themes = null;
31 vm.selectedTheme = null; 33 vm.selectedTheme = null;
32 vm.filtredPrograms = null; 34 vm.filtredPrograms = null;
33 - vm.selectedProgram = null;  
34 - vm.proposals = null;  
35 vm.filtredProposals = null; 35 vm.filtredProposals = null;
36 vm.query = null; 36 vm.query = null;
37 vm.search = vm.$location.search(); 37 vm.search = vm.$location.search();
@@ -73,11 +73,14 @@ @@ -73,11 +73,14 @@
73 73
74 // load Proposals 74 // load Proposals
75 vm.loadingProposals = true; 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 vm.loadingProposals = false; 83 vm.loadingProposals = false;
80 - vm.loading = false;  
81 84
82 if (cb) { 85 if (cb) {
83 cb(); 86 cb();
@@ -86,7 +89,6 @@ @@ -86,7 +89,6 @@
86 vm.error = error; 89 vm.error = error;
87 vm.$log.error(error); 90 vm.$log.error(error);
88 vm.loadingProposals = false; 91 vm.loadingProposals = false;
89 - vm.loading = false;  
90 }); 92 });
91 }; 93 };
92 94
@@ -100,23 +102,13 @@ @@ -100,23 +102,13 @@
100 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) { 102 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) {
101 vm.search.tema = newValue ? newValue.slug : null; 103 vm.search.tema = newValue ? newValue.slug : null;
102 vm.$location.search('tema', vm.search.tema); 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 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) { 108 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) {
117 vm.search.filtro = newValue ? newValue : null; 109 vm.search.filtro = newValue ? newValue : null;
118 vm.$location.search('filtro', vm.search.filtro); 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,35 +119,45 @@
127 vm.selectedTheme = null; 119 vm.selectedTheme = null;
128 }; 120 };
129 121
130 - PropostasPageController.prototype.getFiltredProposals = function() { 122 + PropostasPageController.prototype.changePage = function(pageIndex) {
131 var vm = this; 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 PropostasPageController.prototype.submitSearch = function() { 163 PropostasPageController.prototype.submitSearch = function() {
@@ -167,7 +169,7 @@ @@ -167,7 +169,7 @@
167 var $searchResult = angular.element('#search-result'); 169 var $searchResult = angular.element('#search-result');
168 if ($searchResult && $searchResult.length > 0) { 170 if ($searchResult && $searchResult.length > 0) {
169 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast'); 171 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast');
170 - vm.filtredProposals = vm.getFiltredProposals(); 172 + vm.filterProposals();
171 }else { 173 }else {
172 vm.$log.warn('#search-result element not found.'); 174 vm.$log.warn('#search-result element not found.');
173 } 175 }
src/app/pages/propostas/propostas.html
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 </div> 25 </div>
26 </section> 26 </section>
27 27
28 - <section class="section--header" ng-if="pagePropostas.proposals || pagePropostas.themes"> 28 + <section class="section--header" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
29 <div class="container"> 29 <div class="container">
30 <div class="row"> 30 <div class="row">
31 <div class="col-sm-12"> 31 <div class="col-sm-12">
@@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
35 </div> 35 </div>
36 </section> 36 </section>
37 37
38 - <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.proposals || pagePropostas.themes"> 38 + <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
39 <div class="container"> 39 <div class="container">
40 <div id="lista-de-propostas" class="row"> 40 <div id="lista-de-propostas" class="row">
41 <div class="col-sm-4 col-md-3"> 41 <div class="col-sm-4 col-md-3">
@@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
71 </div> 71 </div>
72 </div> 72 </div>
73 <div class="col-sm-8 col-md-9"> 73 <div class="col-sm-8 col-md-9">
74 - <div class="row hidden-xs" ng-if="pagePropostas.proposals"> 74 + <div class="row hidden-xs" ng-if="pagePropostas.filtredProposals">
75 <div class="col-xs-12"> 75 <div class="col-xs-12">
76 <div class="input-group input-group-lg input-group-search"> 76 <div class="input-group input-group-lg input-group-search">
77 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label> 77 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
@@ -88,24 +88,30 @@ @@ -88,24 +88,30 @@
88 </div> 88 </div>
89 </div> 89 </div>
90 90
91 - <div id="search-result" class="row" ng-if="pagePropostas.proposals"> 91 + <div id="search-result" class="row" ng-if="pagePropostas.filtredProposals">
92 <div class="col-sm-12"> 92 <div class="col-sm-12">
93 <header class="header"> 93 <header class="header">
94 - <h2>Total de Propostas: "<b>{{pagePropostas.filtredProposals.length}} propostas</b>"</h2> 94 + <h2>Total de Propostas: "<b>{{pagePropostas.total_proposals}} propostas</b>"</h2>
95 </header> 95 </header>
96 </div> 96 </div>
97 </div> 97 </div>
98 98
99 <div class="row"> 99 <div class="row">
100 - <div class="col-sm-12" ng-if="pagePropostas.proposals"> 100 + <div class="col-sm-12" ng-if="!pagePropostas.loadingProposals && pagePropostas.filtredProposals && pagePropostas.total_proposals">
101 <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid> 101 <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>
  102 + <app-paginator
  103 + page="pagePropostas.page"
  104 + per-page="pagePropostas.per_page"
  105 + total="pagePropostas.total_proposals"
  106 + change-page="pagePropostas.changePage(pageIndex)"
  107 + ></app-paginator>
102 </div> 108 </div>
103 - <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals"> 109 + <div ng-if="pagePropostas.loadingProposals">
104 <div class="alert alert-info" role="alert"> 110 <div class="alert alert-info" role="alert">
105 Carregando propostas. 111 Carregando propostas.
106 </div> 112 </div>
107 </div> 113 </div>
108 - <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError"> 114 + <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">
109 <div class="alert alert-danger" role="alert"> 115 <div class="alert alert-danger" role="alert">
110 Não foi possível carregar a lista de propostas neste momento. 116 Não foi possível carregar a lista de propostas neste momento.
111 </div> 117 </div>
src/app/pages/ranking/ranking.controller.js
@@ -6,11 +6,12 @@ @@ -6,11 +6,12 @@
6 .controller('RankingPageController', RankingPageController); 6 .controller('RankingPageController', RankingPageController);
7 7
8 /** @ngInject */ 8 /** @ngInject */
9 - function RankingPageController(DialogaService, $scope, $location, $filter, $log) { 9 + function RankingPageController(DialogaService, $scope, $rootScope, $location, $filter, $log) {
10 var vm = this; 10 var vm = this;
11 11
12 vm.DialogaService = DialogaService; 12 vm.DialogaService = DialogaService;
13 vm.$scope = $scope; 13 vm.$scope = $scope;
  14 + vm.$rootScope = $rootScope;
14 vm.$location = $location; 15 vm.$location = $location;
15 vm.$filter = $filter; 16 vm.$filter = $filter;
16 vm.$log = $log; 17 vm.$log = $log;
@@ -18,6 +19,7 @@ @@ -18,6 +19,7 @@
18 vm.init(); 19 vm.init();
19 vm.loadData(); 20 vm.loadData();
20 // vm.attachListeners(); // attach listeners after load data (SYNC) 21 // vm.attachListeners(); // attach listeners after load data (SYNC)
  22 + vm.$rootScope.focusMainContent();
21 23
22 $log.debug('RankingPageController'); 24 $log.debug('RankingPageController');
23 } 25 }
@@ -31,7 +33,6 @@ @@ -31,7 +33,6 @@
31 vm.selectedTheme = null; 33 vm.selectedTheme = null;
32 vm.filtredPrograms = null; 34 vm.filtredPrograms = null;
33 vm.selectedProgram = null; 35 vm.selectedProgram = null;
34 - vm.proposals = null;  
35 vm.filtredProposals = null; 36 vm.filtredProposals = null;
36 vm.query = null; 37 vm.query = null;
37 vm.search = vm.$location.search(); 38 vm.search = vm.$location.search();
@@ -139,8 +140,7 @@ @@ -139,8 +140,7 @@
139 page: vm.page, 140 page: vm.page,
140 per_page: vm.per_page 141 per_page: vm.per_page
141 }, function(data){ 142 }, function(data){
142 - vm.proposals = data.articles;  
143 - vm.filtredProposals = vm.proposals; 143 + vm.filtredProposals = data.articles;
144 vm.loadingProposals = false; 144 vm.loadingProposals = false;
145 145
146 vm.attachListeners(); 146 vm.attachListeners();
@@ -212,28 +212,26 @@ @@ -212,28 +212,26 @@
212 var per_page = _per_page || vm.per_page; 212 var per_page = _per_page || vm.per_page;
213 var query = vm.query; 213 var query = vm.query;
214 var selectedProgram = vm.selectedProgram; 214 var selectedProgram = vm.selectedProgram;
  215 + var params = {
  216 + page: page,
  217 + per_page: per_page
  218 + };
215 219
216 if (selectedProgram) { 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,8 +6,27 @@
6 </div> 6 </div>
7 </div> 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 <div class="container"> 30 <div class="container">
12 <div class="row"> 31 <div class="row">
13 <div class="col-sm-12"> 32 <div class="col-sm-12">
@@ -16,7 +35,8 @@ @@ -16,7 +35,8 @@
16 </div> 35 </div>
17 </div> 36 </div>
18 </section> 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 <div class="container"> 40 <div class="container">
21 <div id="lista-de-propostas" class="row"> 41 <div id="lista-de-propostas" class="row">
22 <div class="col-sm-4 col-md-3"> 42 <div class="col-sm-4 col-md-3">