Commit 2bd5114e115418e4ca64920887afb6c58c35997c

Authored by Leonardo Merlin
2 parents d6d1119a 7d7a54f7

Merge branch 'merlin' into rafael

src/app/components/article-service/article.service.js
@@ -96,8 +96,8 @@ @@ -96,8 +96,8 @@
96 var url = service.apiArticles + API.articleId.home; 96 var url = service.apiArticles + API.articleId.home;
97 97
98 var paramsExtended = angular.extend({ 98 var paramsExtended = angular.extend({
99 - 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'],  
100 - 'content_type':'ProposalsDiscussionPlugin::Proposals' 99 + // 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children', 'children_count'],
  100 + 'content_type':'ProposalsDiscussionPlugin::Proposal'
101 }, params); 101 }, params);
102 102
103 UtilService.get(url, {params: paramsExtended}).then(function(data){ 103 UtilService.get(url, {params: paramsExtended}).then(function(data){
src/app/components/proposal-grid/proposal-grid.directive.js 0 → 100644
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +(function() {
  2 + 'use strict';
  3 +
  4 + angular
  5 + .module('dialoga')
  6 + .directive('proposalGrid', proposalGrid);
  7 +
  8 + /** @ngInject */
  9 + function proposalGrid() {
  10 +
  11 + /** @ngInject */
  12 + function ProposalGridController($scope, $rootScope, $element, $location, $filter, $log) {
  13 + $log.debug('ProposalGridController');
  14 +
  15 + // alias
  16 + var vm = this;
  17 +
  18 + // dependencies
  19 + vm.$scope = $scope;
  20 + vm.$rootScope = $rootScope;
  21 + vm.$element = $element;
  22 + vm.$location = $location;
  23 + vm.$filter = $filter;
  24 + vm.$log = $log;
  25 + vm.defaultLimit = 6;
  26 +
  27 + // initialization
  28 + vm.init();
  29 + vm.attachListeners();
  30 + }
  31 +
  32 + ProposalGridController.prototype.init = function() {
  33 + // var vm = this;
  34 + // vm.programs = null; // scope var
  35 + };
  36 +
  37 + ProposalGridController.prototype.attachListeners = function() {
  38 + // var vm = this;
  39 + };
  40 +
  41 + var directive = {
  42 + restrict: 'E',
  43 + templateUrl: 'app/components/proposal-grid/proposal-grid.html',
  44 + scope: {
  45 + proposals: '='
  46 + },
  47 + controller: ProposalGridController,
  48 + controllerAs: 'vm',
  49 + bindToController: true
  50 + };
  51 +
  52 + return directive;
  53 + }
  54 +})();
src/app/components/proposal-grid/proposal-grid.html 0 → 100644
@@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
  1 +<div class="proposal-grid row">
  2 + <div ng-repeat="proposal in vm.proposals as results">
  3 + <proposal-box proposal="proposal" category="proposal.categories[0]" class="col-xs-12 col-sm-6"></proposal-box>
  4 + <div ng-if="$odd" class="clearfix"></div>
  5 + </div>
  6 + <div class="animate-repeat" ng-if="results.length == 0">
  7 + Nenhum programa encontrado.
  8 + </div>
  9 +</div>
src/app/components/proposal-list/proposal-list.directive.js
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 // requeue to wait until DOM be created 46 // requeue to wait until DOM be created
47 vm.$timeout(function(){ 47 vm.$timeout(function(){
48 attachPopover.call(vm); 48 attachPopover.call(vm);
49 - }, 100); 49 + }, 1000);
50 }; 50 };
51 51
52 function attachPopover(){ 52 function attachPopover(){
src/app/components/proposal-list/proposal-list.html
@@ -9,8 +9,7 @@ @@ -9,8 +9,7 @@
9 <tr> 9 <tr>
10 <th> 10 <th>
11 Colocação 11 Colocação
12 - <!-- <button type="button" class="btn btn-link btn-question">?</button> -->  
13 - <a tabindex="0" class="btn btn-link btn-questionr" role="button" data-toggle="popover" data-trigger="focus">?</a> 12 + <a tabindex="0" class="btn btn-link btn-question" role="button" data-toggle="popover" data-trigger="focus">?</a>
14 </th> 13 </th>
15 <th>123 PROPOSTAS</th> 14 <th>123 PROPOSTAS</th>
16 </tr> 15 </tr>
src/app/index.route.js
@@ -130,6 +130,19 @@ @@ -130,6 +130,19 @@
130 'footer': { templateUrl: 'app/pages/footer/footer.html' } 130 'footer': { templateUrl: 'app/pages/footer/footer.html' }
131 } 131 }
132 }) 132 })
  133 + .state('ranking', {
  134 + url: '/ranking',
  135 + ncyBreadcrumb: {label: 'Propostas'},
  136 + views: {
  137 + 'header': { templateUrl: 'app/pages/header/header.html' },
  138 + 'main': {
  139 + templateUrl: 'app/pages/propostas/ranking.html',
  140 + controller: 'PropostasPageController',
  141 + controllerAs: 'pageRanking'
  142 + },
  143 + 'footer': { templateUrl: 'app/pages/footer/footer.html' }
  144 + }
  145 + })
133 // apenas para teste do cadastro das propostas 146 // apenas para teste do cadastro das propostas
134 .state('cadastro-propostas', { 147 .state('cadastro-propostas', {
135 url: '/cadastro-propostas', 148 url: '/cadastro-propostas',
src/app/index.scss
@@ -47,6 +47,29 @@ body { @@ -47,6 +47,29 @@ body {
47 } 47 }
48 } 48 }
49 49
  50 +// Form
  51 +.input-group-search {
  52 + .icon-circle {
  53 + color: #fff;
  54 + padding: 5px;
  55 + margin-top: -5px;
  56 + }
  57 + button {
  58 + border-left: none;
  59 + }
  60 +}
  61 +
  62 +// Header
  63 +.header {
  64 + position: relative;
  65 +
  66 + button {
  67 + position: absolute;
  68 + right: 0;
  69 + top: 2px;
  70 + }
  71 +}
  72 +
50 // Commons 73 // Commons
51 .button--themed { 74 .button--themed {
52 // padding: 20px; 75 // padding: 20px;
src/app/pages/programas/programa.controller.js
@@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
1 -(function() {  
2 - 'use strict';  
3 -  
4 - angular  
5 - .module('dialoga')  
6 - .controller('ProgramasPageController', ProgramasPageController);  
7 -  
8 - /** @ngInject */  
9 - function ProgramasPageController(DialogaService, $log) {  
10 - $log.debug('ProgramasPageController');  
11 -  
12 - var vm = this;  
13 -  
14 - vm.DialogaService = DialogaService;  
15 - vm.$log = $log;  
16 -  
17 - vm.init();  
18 - }  
19 -  
20 - ProgramasPageController.prototype.init = function () {  
21 - var vm = this;  
22 -  
23 - vm.article = null;  
24 - vm.categories = null;  
25 - vm.currentCategory = null;  
26 -  
27 - vm.loading = true;  
28 - vm.error = false;  
29 -  
30 - vm.loadData();  
31 - };  
32 -  
33 -  
34 - ProgramasPageController.prototype.loadData = function () {  
35 - var vm = this;  
36 -  
37 - vm.DialogaService.getTemas(function(temas){  
38 - vm.categories = temas;  
39 - }, function (error) {  
40 - vm.error = error;  
41 - vm.$log.error(error);  
42 - });  
43 - };  
44 -})();  
src/app/pages/programas/programa.controller.spec.js
@@ -1,52 +0,0 @@ @@ -1,52 +0,0 @@
1 -(function() {  
2 - 'use strict';  
3 -  
4 - describe('Controller: ProgramaPageController', function(){  
5 - var $rootScope, $scope, $location, $controller, httpBackend, programaPageController;  
6 - var ENDPOINT_ARTICLE_HOME = 'http://login.dialoga.gov.br/api/v1/articles/103358?fields=id,children,categories,abstract,title,image,url,setting,position&private_token=null';  
7 -  
8 - beforeEach(module('dialoga'));  
9 - beforeEach( inject(function(_$rootScope_, _$controller_, _$location_, $httpBackend) {  
10 - $rootScope = _$rootScope_;  
11 - $controller = _$controller_;  
12 - $location = _$location_;  
13 - $scope = $rootScope.$new();  
14 - httpBackend = $httpBackend;  
15 -  
16 - programaPageController = $controller('ProgramaPageController', {  
17 - '$rootScope': $rootScope,  
18 - '$scope': $scope  
19 - });  
20 -  
21 - httpBackend.whenGET(ENDPOINT_ARTICLE_HOME).respond({  
22 - 'article':{'id':103358,'abstract':'\u003Cp style=\"text-align: center;\"\u003E\u003Ciframe src=\"https://www.youtube.com/embed/kpAdrO-emV0?rel=0\u0026amp;showinfo=0\u0026amp;iv_load_policy=3\u0026amp;controls=1\" style=\"max-width: 1000px; left: 5%;\" width=\"275\" height=\"200\"\u003E\u003C/iframe\u003E\u003C/p\u003E','title':'Dialoga Brasil','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null},{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null},{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null},{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':null,'setting':{'custom_body_label':'Corpo','phase':'proposals','allow_topics':true,'moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Leandro Nunes dos Santos','moderate_proposals':true,'allow_members_to_edit':false},'position':null,'children':[{'id':103644,'abstract':'\u003Cp\u003EUm caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ci\u00eancia sem Fronteiras\u003C/p\u003E','title':'Ensino Superior','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0128/enem.jpg'},'setting':{'color':'#cfe2f3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':9},{'id':103673,'abstract':'\u003Cp\u003EA melhor escolha \u00e9 se informar.\u003C/p\u003E','title':'Incentivo ao Parto Normal','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0092/parto-normal.jpg'},'setting':{'color':'#ff0000','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':6},{'id':103397,'abstract':'\u003Cp\u003ERenda, inclus\u00e3o produtiva e acesso a servi\u00e7os.\u003C/p\u003E','title':'Brasil Sem Mis\u00e9ria','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0116/bsm_redim.jpg'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':18},{'id':103379,'abstract':'\u003Cp\u003EResgate e atendimento 24 horas, sete dias da semana.\u003C/p\u003E','title':'SAMU 192 e UPAs','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0060/SAMU.jpg'},'setting':{'color':'#45818e','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':4},{'id':103521,'abstract':'\u003Cp\u003EMais atendimento nos munic\u00edpios, mais sa\u00fade para quem mais precisa.\u003C/p\u003E','title':'Mais M\u00e9dicos','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0025/Mais_M_dicos.jpg'},'setting':{'color':'#ffe599','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':1},{'id':103390,'abstract':'\u003Cp\u003EPreven\u00e7\u00e3o, tratamento e enfrentamento ao tr\u00e1fico.\u003C/p\u003E','title':'Crack, \u00e9 poss\u00edvel vencer!','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0104/crack.jpg'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':14},{'id':103592,'abstract':'\u003Cp\u003EGarantir acesso \u00e0 prote\u00e7\u00e3o social.\u003C/p\u003E','title':'Assist\u00eancia Social','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0122/assistencia_social.jpg'},'setting':{'color':'#a61c00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':19},{'id':103426,'abstract':'\u003Cp\u003EDa sa\u00fade se cuida todos os dias.\u003C/p\u003E','title':'Vida saud\u00e1vel','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0046/vida_saudavel.jpg'},'setting':{'color':'#d9d2e9','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':7},{'id':103695,'abstract':'\u003Cp\u003ENovo modelo de atua\u00e7\u00e3o em Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'Seguran\u00e7a P\u00fablica Integrada','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0152/policiaintegrada.jpg'},'setting':{'color':'#ff00ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':13},{'id':103663,'abstract':'\u003Cp\u003EMais educa\u00e7\u00e3o profissional e tecnol\u00f3gica, mais desenvolvimento\u003C/p\u003E','title':'Ensino T\u00e9cnico','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0134/Ensino_tecnico.jpg'},'setting':{'color':'#d0e0e3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':10},{'id':103472,'abstract':'\u003Cp\u003EPol\u00edcia Federal, Pol\u00edcia Rodovi\u00e1ria Federal e For\u00e7a Nacional de Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'For\u00e7as Federais de Seguran\u00e7a','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0031/federais2.png'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':16},{'id':103612,'abstract':'\u003Cp\u003EGarantir \u00e1gua para beber e produzir.\u003C/p\u003E','title':'Cisternas','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0039/cisterna_redim.jpg'},'setting':{'color':'#0000ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':20},{'id':103442,'abstract':'\u003Cp\u003EComplemento \u00e0 renda e acompanhamento em educa\u00e7\u00e3o e sa\u00fade.\u003C/p\u003E','title':'Bolsa Fam\u00edlia','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0013/bolsa_familia_redim.jpg'},'setting':{'color':'#ff9900','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':17},{'id':103507,'abstract':'\u003Cp\u003ETecnologia a servi\u00e7o da seguran\u00e7a do cidad\u00e3o.\u003C/p\u003E','title':'Sinesp','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0098/sinesp.png'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':12},{'id':103683,'abstract':'\u003Cp\u003ESa\u00fade n\u00e3o tem pre\u00e7o.\u003C/p\u003E','title':'Aqui tem Farm\u00e1cia Popular','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0019/saude_nao_tem_preco.jpg'},'setting':{'color':'#e69138','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':5},{'id':103457,'abstract':'\u003Cp\u003EA\u00e7\u00e3o conjunta e coopera\u00e7\u00e3o transfronteiri\u00e7a.\u003C/p\u003E','title':'Prote\u00e7\u00e3o das Fronteiras','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0110/fronteira_redim.jpg'},'setting':{'color':'#a64d79','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':15},{'id':103494,'abstract':'\u003Cp\u003EDa Educa\u00e7\u00e3o Infantil ao Ensino M\u00e9dio.\u003C/p\u003E','title':'Educa\u00e7\u00e3o B\u00e1sica','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0076/Educa__o_B_sica.jpg'},'setting':{'color':'#fce5cd','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':8},{'id':103359,'abstract':'\u003Cp\u003EAcesso a exames e consultas com especialistas.\u003C/p\u003E','title':'Mais Especialidades','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0083/mais_especialidades1.png'},'setting':{'color':'#ea9999','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':2},{'id':103485,'abstract':'\u003Cp\u003ECaminho para uma educa\u00e7\u00e3o de qualidade.\u003C/p\u003E','title':'Valoriza\u00e7\u00e3o dos Professores','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0140/valorizacao_professor.jpg'},'setting':{'color':'#ffff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':11},{'id':103416,'abstract':'\u003Cp\u003EEstrutura adequada para atender melhor a popula\u00e7\u00e3o na aten\u00e7\u00e3o b\u00e1sica.\u003C/p\u003E','title':'Melhorar os Postos de Sa\u00fade','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0053/requalif_redim.jpg'},'setting':{'color':'#cc4125','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':3}]}  
23 - });  
24 - }));  
25 -  
26 - it('should have a ProgramaPageController controller', function () {  
27 - // console.log('programaPageController', programaPageController);  
28 -  
29 - // expect current path to equal '/programa/:slug'  
30 - $location.path('/programa/bolsa-familia');  
31 - $rootScope.$apply();  
32 - expect($location.path()).toBe('/programa/bolsa-familia');  
33 -  
34 - // expect current scope has a friendly-url to a program  
35 - expect(programaPageController.$state).toBeDefined();  
36 - expect(programaPageController.$state.params).toBeDefined();  
37 - expect(programaPageController.$state.params.slug).toBe('bolsa-familia');  
38 -  
39 - // what to check when user is not logged in here?  
40 - // what to check when user is logged in here?  
41 - });  
42 - it('should be able to go back to "inicio"', function () {});  
43 - it('ensure valid proposal to be sended', function () {});  
44 - it('should be able to send a proposal', function () {});  
45 - it('should be able to vote on proposal', function () {});  
46 - it('should be able to vote on same proposal only once', function () {});  
47 - it('should be able to view a unique proposal by URL', function () {});  
48 - it('should be able to view a table with ranking of all proposals by category', function () {});  
49 - it('should be able to share a proposal on social medias', function () {});  
50 -  
51 - });  
52 -})();  
src/app/pages/programas/programas.controller.js 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +(function() {
  2 + 'use strict';
  3 +
  4 + angular
  5 + .module('dialoga')
  6 + .controller('ProgramasPageController', ProgramasPageController);
  7 +
  8 + /** @ngInject */
  9 + function ProgramasPageController(DialogaService, $log) {
  10 + var vm = this;
  11 +
  12 + vm.DialogaService = DialogaService;
  13 + vm.$log = $log;
  14 +
  15 + vm.init();
  16 + $log.debug('ProgramasPageController');
  17 + }
  18 +
  19 + ProgramasPageController.prototype.init = function () {
  20 + var vm = this;
  21 +
  22 + vm.article = null;
  23 + vm.themes = null;
  24 + vm.selectedTheme = null;
  25 + vm.programs = null;
  26 + vm.filtredPrograms = null;
  27 + vm.query = null;
  28 +
  29 + vm.loading = null;
  30 + vm.error = null;
  31 +
  32 + vm.loadData();
  33 + };
  34 +
  35 +
  36 + ProgramasPageController.prototype.loadData = function () {
  37 + var vm = this;
  38 +
  39 + vm.loading = true;
  40 +
  41 + // load Programs
  42 + vm.loadingPrograms = true;
  43 + vm.DialogaService.getPrograms(function(programs){
  44 + vm.programs = programs;
  45 + vm.filtredPrograms = vm.programs;
  46 + vm.loadingPrograms = false;
  47 + }, function (error) {
  48 + vm.error = error;
  49 + vm.$log.error(error);
  50 + vm.loadingPrograms = false;
  51 + });
  52 +
  53 + // load themes
  54 + vm.loadingThemes = true;
  55 + vm.DialogaService.getThemes(function(themes){
  56 + vm.themes = themes;
  57 + vm.loadingThemes = false;
  58 + }, function (error) {
  59 + vm.error = error;
  60 + vm.$log.error(error);
  61 + vm.loadingThemes = false;
  62 + });
  63 + };
  64 +})();
src/app/pages/programas/programas.controller.spec.js 0 → 100644
@@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
  1 +(function() {
  2 + 'use strict';
  3 +
  4 + describe('Controller: ProgramaPageController', function(){
  5 + var $rootScope, $scope, $location, $controller, httpBackend, programaPageController;
  6 + var ENDPOINT_ARTICLE_HOME = 'http://login.dialoga.gov.br/api/v1/articles/103358?fields=id,children,categories,abstract,title,image,url,setting,position&private_token=null';
  7 +
  8 + beforeEach(module('dialoga'));
  9 + beforeEach( inject(function(_$rootScope_, _$controller_, _$location_, $httpBackend) {
  10 + $rootScope = _$rootScope_;
  11 + $controller = _$controller_;
  12 + $location = _$location_;
  13 + $scope = $rootScope.$new();
  14 + httpBackend = $httpBackend;
  15 +
  16 + programaPageController = $controller('ProgramaPageController', {
  17 + '$rootScope': $rootScope,
  18 + '$scope': $scope
  19 + });
  20 +
  21 + httpBackend.whenGET(ENDPOINT_ARTICLE_HOME).respond({
  22 + 'article':{'id':103358,'abstract':'\u003Cp style=\"text-align: center;\"\u003E\u003Ciframe src=\"https://www.youtube.com/embed/kpAdrO-emV0?rel=0\u0026amp;showinfo=0\u0026amp;iv_load_policy=3\u0026amp;controls=1\" style=\"max-width: 1000px; left: 5%;\" width=\"275\" height=\"200\"\u003E\u003C/iframe\u003E\u003C/p\u003E','title':'Dialoga Brasil','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null},{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null},{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null},{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':null,'setting':{'custom_body_label':'Corpo','phase':'proposals','allow_topics':true,'moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Leandro Nunes dos Santos','moderate_proposals':true,'allow_members_to_edit':false},'position':null,'children':[{'id':103644,'abstract':'\u003Cp\u003EUm caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ci\u00eancia sem Fronteiras\u003C/p\u003E','title':'Ensino Superior','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0128/enem.jpg'},'setting':{'color':'#cfe2f3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':9},{'id':103673,'abstract':'\u003Cp\u003EA melhor escolha \u00e9 se informar.\u003C/p\u003E','title':'Incentivo ao Parto Normal','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0092/parto-normal.jpg'},'setting':{'color':'#ff0000','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':6},{'id':103397,'abstract':'\u003Cp\u003ERenda, inclus\u00e3o produtiva e acesso a servi\u00e7os.\u003C/p\u003E','title':'Brasil Sem Mis\u00e9ria','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0116/bsm_redim.jpg'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':18},{'id':103379,'abstract':'\u003Cp\u003EResgate e atendimento 24 horas, sete dias da semana.\u003C/p\u003E','title':'SAMU 192 e UPAs','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0060/SAMU.jpg'},'setting':{'color':'#45818e','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':4},{'id':103521,'abstract':'\u003Cp\u003EMais atendimento nos munic\u00edpios, mais sa\u00fade para quem mais precisa.\u003C/p\u003E','title':'Mais M\u00e9dicos','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0025/Mais_M_dicos.jpg'},'setting':{'color':'#ffe599','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':1},{'id':103390,'abstract':'\u003Cp\u003EPreven\u00e7\u00e3o, tratamento e enfrentamento ao tr\u00e1fico.\u003C/p\u003E','title':'Crack, \u00e9 poss\u00edvel vencer!','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0104/crack.jpg'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':14},{'id':103592,'abstract':'\u003Cp\u003EGarantir acesso \u00e0 prote\u00e7\u00e3o social.\u003C/p\u003E','title':'Assist\u00eancia Social','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0122/assistencia_social.jpg'},'setting':{'color':'#a61c00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':19},{'id':103426,'abstract':'\u003Cp\u003EDa sa\u00fade se cuida todos os dias.\u003C/p\u003E','title':'Vida saud\u00e1vel','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0046/vida_saudavel.jpg'},'setting':{'color':'#d9d2e9','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':7},{'id':103695,'abstract':'\u003Cp\u003ENovo modelo de atua\u00e7\u00e3o em Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'Seguran\u00e7a P\u00fablica Integrada','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0152/policiaintegrada.jpg'},'setting':{'color':'#ff00ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':13},{'id':103663,'abstract':'\u003Cp\u003EMais educa\u00e7\u00e3o profissional e tecnol\u00f3gica, mais desenvolvimento\u003C/p\u003E','title':'Ensino T\u00e9cnico','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0134/Ensino_tecnico.jpg'},'setting':{'color':'#d0e0e3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':10},{'id':103472,'abstract':'\u003Cp\u003EPol\u00edcia Federal, Pol\u00edcia Rodovi\u00e1ria Federal e For\u00e7a Nacional de Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'For\u00e7as Federais de Seguran\u00e7a','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0031/federais2.png'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':16},{'id':103612,'abstract':'\u003Cp\u003EGarantir \u00e1gua para beber e produzir.\u003C/p\u003E','title':'Cisternas','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0039/cisterna_redim.jpg'},'setting':{'color':'#0000ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':20},{'id':103442,'abstract':'\u003Cp\u003EComplemento \u00e0 renda e acompanhamento em educa\u00e7\u00e3o e sa\u00fade.\u003C/p\u003E','title':'Bolsa Fam\u00edlia','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0013/bolsa_familia_redim.jpg'},'setting':{'color':'#ff9900','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':17},{'id':103507,'abstract':'\u003Cp\u003ETecnologia a servi\u00e7o da seguran\u00e7a do cidad\u00e3o.\u003C/p\u003E','title':'Sinesp','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0098/sinesp.png'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':12},{'id':103683,'abstract':'\u003Cp\u003ESa\u00fade n\u00e3o tem pre\u00e7o.\u003C/p\u003E','title':'Aqui tem Farm\u00e1cia Popular','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0019/saude_nao_tem_preco.jpg'},'setting':{'color':'#e69138','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':5},{'id':103457,'abstract':'\u003Cp\u003EA\u00e7\u00e3o conjunta e coopera\u00e7\u00e3o transfronteiri\u00e7a.\u003C/p\u003E','title':'Prote\u00e7\u00e3o das Fronteiras','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0110/fronteira_redim.jpg'},'setting':{'color':'#a64d79','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':15},{'id':103494,'abstract':'\u003Cp\u003EDa Educa\u00e7\u00e3o Infantil ao Ensino M\u00e9dio.\u003C/p\u003E','title':'Educa\u00e7\u00e3o B\u00e1sica','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0076/Educa__o_B_sica.jpg'},'setting':{'color':'#fce5cd','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':8},{'id':103359,'abstract':'\u003Cp\u003EAcesso a exames e consultas com especialistas.\u003C/p\u003E','title':'Mais Especialidades','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0083/mais_especialidades1.png'},'setting':{'color':'#ea9999','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':2},{'id':103485,'abstract':'\u003Cp\u003ECaminho para uma educa\u00e7\u00e3o de qualidade.\u003C/p\u003E','title':'Valoriza\u00e7\u00e3o dos Professores','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0140/valorizacao_professor.jpg'},'setting':{'color':'#ffff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':11},{'id':103416,'abstract':'\u003Cp\u003EEstrutura adequada para atender melhor a popula\u00e7\u00e3o na aten\u00e7\u00e3o b\u00e1sica.\u003C/p\u003E','title':'Melhorar os Postos de Sa\u00fade','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0053/requalif_redim.jpg'},'setting':{'color':'#cc4125','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':3}]}
  23 + });
  24 + }));
  25 +
  26 + it('should have a ProgramaPageController controller', function () {
  27 + // console.log('programaPageController', programaPageController);
  28 +
  29 + // expect current path to equal '/programa/:slug'
  30 + $location.path('/programa/bolsa-familia');
  31 + $rootScope.$apply();
  32 + expect($location.path()).toBe('/programa/bolsa-familia');
  33 +
  34 + // expect current scope has a friendly-url to a program
  35 + expect(programaPageController.$state).toBeDefined();
  36 + expect(programaPageController.$state.params).toBeDefined();
  37 + expect(programaPageController.$state.params.slug).toBe('bolsa-familia');
  38 +
  39 + // what to check when user is not logged in here?
  40 + // what to check when user is logged in here?
  41 + });
  42 + it('should be able to go back to "inicio"', function () {});
  43 + it('ensure valid proposal to be sended', function () {});
  44 + it('should be able to send a proposal', function () {});
  45 + it('should be able to vote on proposal', function () {});
  46 + it('should be able to vote on same proposal only once', function () {});
  47 + it('should be able to view a unique proposal by URL', function () {});
  48 + it('should be able to view a table with ranking of all proposals by category', function () {});
  49 + it('should be able to share a proposal on social medias', function () {});
  50 +
  51 + });
  52 +})();
src/app/pages/programas/programas.html
@@ -7,14 +7,93 @@ @@ -7,14 +7,93 @@
7 </div> 7 </div>
8 8
9 <div class="page--programas"> 9 <div class="page--programas">
10 - <section class="section-gray section-space-up"> 10 + <section class="section--info">
  11 + <div class="container">
  12 + <div class="row">
  13 + <div class="col-sm-12">
  14 + <h1>Programas de governo</h1>
  15 + </div>
  16 + </div>
  17 + </div>
  18 + </section>
  19 + <section class="section--articles section-gray section-space-up" ng-if="pageProgramas.programs">
11 <div class="container"> 20 <div class="container">
12 <div id="lista-de-programas" class="row"> 21 <div id="lista-de-programas" class="row">
13 <div class="col-sm-4 col-md-3"> 22 <div class="col-sm-4 col-md-3">
14 - <category-list ng-if="pageProgramas.categories"></category-list> 23 + <div class="row visible-xs">
  24 + <div class="col-xs-12">
  25 + <div class="input-group input-group-lg input-group-search">
  26 + <label for="articleQueryFilter" class="control-label sr-only">Buscar programas:</label>
  27 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageProgramas.query" placeholder="Buscar programas" aria-label="Buscar programas" >
  28 + <span class="input-group-btn">
  29 + <button type="button" class="btn btn-default" ng-click="pageProgramas.search()">
  30 + <span class="icon-circle icon-small color-theme-common-bg">
  31 + <span class="glyphicon glyphicon-search"></span>
  32 + </span>
  33 + <span class="sr-only">Buscar</span>
  34 + </button>
  35 + </span>
  36 + </div>
  37 + <br/>
  38 + </div>
  39 + </div>
  40 + <div ng-if="pageProgramas.themes">
  41 + <category-list categories="pageProgramas.themes" selected-category="pageProgramas.selectedTheme"></category-list>
  42 + </div>
  43 + <div ng-if="!pageProgramas.themes && pageProgramas.loadingThemes">
  44 + <div class="alert alert-info" role="alert">
  45 + Carregando temas.
  46 + </div>
  47 + </div>
  48 + <div ng-if="!pageProgramas.themes && pageProgramas.themesError">
  49 + <div class="alert alert-danger" role="alert">
  50 + Não foi possível carregar a lista de temas neste momento.
  51 + </div>
  52 + </div>
15 </div> 53 </div>
16 <div class="col-sm-8 col-md-9"> 54 <div class="col-sm-8 col-md-9">
17 - <article-grid></article-grid> 55 + <div class="row hidden-xs">
  56 + <div class="col-xs-12">
  57 + <div class="input-group input-group-lg input-group-search">
  58 + <label for="articleQueryFilter" class="control-label sr-only">Buscar programas:</label>
  59 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageProgramas.query" placeholder="Buscar programas" aria-label="Buscar programas" >
  60 + <span class="input-group-btn">
  61 + <button type="button" class="btn btn-default" ng-click="pageProgramas.search()">
  62 + <span class="icon-circle icon-small color-theme-common-bg">
  63 + <span class="glyphicon glyphicon-search"></span>
  64 + </span>
  65 + <span class="sr-only">Buscar</span>
  66 + </button>
  67 + </span>
  68 + </div>
  69 + </div>
  70 + </div>
  71 + <div class="row">
  72 + <div class="col-sm-12">
  73 + <header class="header">
  74 + <h2>Conheça os programas</h2>
  75 + <button type="button" class="btn btn-link" ng-click="pageProgramas.showAll($event)">
  76 + <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> Ver todos os {{::pageProgramas.programs.length}} programas
  77 + </button>
  78 + </header>
  79 + </div>
  80 + </div>
  81 +
  82 + <div class="row">
  83 + <div class="col-sm-12" ng-if="pageProgramas.programs">
  84 + <article-grid articles="pageProgramas.filtredPrograms"></article-grid>
  85 + </div>
  86 + <div ng-if="!pageProgramas.programs && pageProgramas.loadingPrograms">
  87 + <div class="alert alert-info" role="alert">
  88 + Carregando programas.
  89 + </div>
  90 + </div>
  91 + <div ng-if="!pageProgramas.programs && pageProgramas.programsError">
  92 + <div class="alert alert-danger" role="alert">
  93 + Não foi possível carregar a lista de programas neste momento.
  94 + </div>
  95 + </div>
  96 + </div>
18 </div> 97 </div>
19 </div> 98 </div>
20 </div> 99 </div>
src/app/pages/propostas/proposta.html
@@ -1,11 +0,0 @@ @@ -1,11 +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="container page--propostas">  
10 - <h1>TODO: Home > Proposta</h1>  
11 -</div>  
src/app/pages/propostas/propostas.controller.js
  1 +/**
  2 + * Controlador das páginas:
  3 + * - Propostas
  4 + * - Ranking
  5 + */
1 (function() { 6 (function() {
2 'use strict'; 7 'use strict';
3 8
@@ -7,38 +12,58 @@ @@ -7,38 +12,58 @@
7 12
8 /** @ngInject */ 13 /** @ngInject */
9 function PropostasPageController(DialogaService, $log) { 14 function PropostasPageController(DialogaService, $log) {
10 - $log.debug('PropostasPageController');  
11 -  
12 var vm = this; 15 var vm = this;
13 16
14 vm.DialogaService = DialogaService; 17 vm.DialogaService = DialogaService;
15 vm.$log = $log; 18 vm.$log = $log;
16 19
17 vm.init(); 20 vm.init();
  21 + $log.debug('PropostasPageController');
18 } 22 }
19 23
20 PropostasPageController.prototype.init = function () { 24 PropostasPageController.prototype.init = function () {
21 var vm = this; 25 var vm = this;
22 26
23 vm.article = null; 27 vm.article = null;
24 - vm.categories = null;  
25 - vm.currentCategory = null;  
26 - vm.loading = true;  
27 - vm.error = false; 28 + vm.themes = null;
  29 + vm.selectedTheme = null;
  30 + vm.proposals = null;
  31 + vm.filtredProposals = null;
  32 + vm.query = null;
  33 +
  34 + vm.loading = null;
  35 + vm.error = null;
28 36
29 - // vm.loadData(); 37 + vm.loadData();
30 }; 38 };
31 39
32 40
33 PropostasPageController.prototype.loadData = function () { 41 PropostasPageController.prototype.loadData = function () {
34 var vm = this; 42 var vm = this;
35 43
36 - vm.DialogaService.getCategories(function(categories){  
37 - vm.categories = categories; 44 + vm.loading = true;
  45 +
  46 + // load Proposals
  47 + vm.loadingProposals = true;
  48 + vm.DialogaService.getProposalsByTopicId(103644, {}, function(data){
  49 + vm.proposals = data.articles;
  50 + vm.filtredProposals = vm.proposals;
  51 + vm.loadingProposals = false;
38 }, function (error) { 52 }, function (error) {
39 vm.error = error; 53 vm.error = error;
40 vm.$log.error(error); 54 vm.$log.error(error);
  55 + vm.loadingProposals = false;
41 }); 56 });
42 57
  58 + // load themes
  59 + vm.loadingThemes = true;
  60 + vm.DialogaService.getThemes(function(themes){
  61 + vm.themes = themes;
  62 + vm.loadingThemes = false;
  63 + }, function (error) {
  64 + vm.error = error;
  65 + vm.$log.error(error);
  66 + vm.loadingThemes = false;
  67 + });
43 }; 68 };
44 })(); 69 })();
src/app/pages/propostas/propostas.html
@@ -6,6 +6,93 @@ @@ -6,6 +6,93 @@
6 </div> 6 </div>
7 </div> 7 </div>
8 8
9 -<div class="container page--propostas">  
10 - <h1>TODO: Home > Propostas</h1> 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>Propostas</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 class="row visible-xs">
  24 + <div class="col-xs-12">
  25 + <div class="input-group input-group-lg input-group-search">
  26 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  27 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas" >
  28 + <span class="input-group-btn">
  29 + <button type="button" class="btn btn-default" ng-click="pagePropostas.search()">
  30 + <span class="icon-circle icon-small color-theme-common-bg">
  31 + <span class="glyphicon glyphicon-search"></span>
  32 + </span>
  33 + <span class="sr-only">Buscar</span>
  34 + </button>
  35 + </span>
  36 + </div>
  37 + <br/>
  38 + </div>
  39 + </div>
  40 + <div ng-if="pagePropostas.themes">
  41 + <category-list categories="pagePropostas.themes" selected-category="pagePropostas.selectedTheme"></category-list>
  42 + </div>
  43 + <div ng-if="!pagePropostas.themes && pagePropostas.loadingThemes">
  44 + <div class="alert alert-info" role="alert">
  45 + Carregando temas.
  46 + </div>
  47 + </div>
  48 + <div ng-if="!pagePropostas.themes && pagePropostas.themesError">
  49 + <div class="alert alert-danger" role="alert">
  50 + Não foi possível carregar a lista de temas neste momento.
  51 + </div>
  52 + </div>
  53 + </div>
  54 + <div class="col-sm-8 col-md-9">
  55 + <div class="row hidden-xs">
  56 + <div class="col-xs-12">
  57 + <div class="input-group input-group-lg input-group-search">
  58 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  59 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas" >
  60 + <span class="input-group-btn">
  61 + <button type="button" class="btn btn-default" ng-click="pagePropostas.search()">
  62 + <span class="icon-circle icon-small color-theme-common-bg">
  63 + <span class="glyphicon glyphicon-search"></span>
  64 + </span>
  65 + <span class="sr-only">Buscar</span>
  66 + </button>
  67 + </span>
  68 + </div>
  69 + </div>
  70 + </div>
  71 + <div class="row">
  72 + <div class="col-sm-12">
  73 + <header class="header">
  74 + <h2>Total de Propostas as propostas: "<span>{{::pagePropostas.proposals.length}} propostas</span>"</h2>
  75 + </header>
  76 + </div>
  77 + </div>
  78 +
  79 + <div class="row">
  80 + <div class="col-sm-12" ng-if="pagePropostas.proposals">
  81 + <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>
  82 + </div>
  83 + <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals">
  84 + <div class="alert alert-info" role="alert">
  85 + Carregando propostas.
  86 + </div>
  87 + </div>
  88 + <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError">
  89 + <div class="alert alert-danger" role="alert">
  90 + Não foi possível carregar a lista de propostas neste momento.
  91 + </div>
  92 + </div>
  93 + </div>
  94 + </div>
  95 + </div>
  96 + </div>
  97 + </section>
11 </div> 98 </div>
src/app/pages/propostas/ranking.html 0 → 100644
@@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
  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 class="row visible-xs">
  24 + <div class="col-xs-12">
  25 + <div class="input-group input-group-lg input-group-search">
  26 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  27 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageRanking.query" placeholder="Buscar propostas" aria-label="Buscar propostas" >
  28 + <span class="input-group-btn">
  29 + <button type="button" class="btn btn-default" ng-click="pageRanking.search()">
  30 + <span class="icon-circle icon-small color-theme-common-bg">
  31 + <span class="glyphicon glyphicon-search"></span>
  32 + </span>
  33 + <span class="sr-only">Buscar</span>
  34 + </button>
  35 + </span>
  36 + </div>
  37 + <br/>
  38 + </div>
  39 + </div>
  40 + <div ng-if="pageRanking.themes">
  41 + <category-list categories="pageRanking.themes" selected-category="pageRanking.selectedTheme"></category-list>
  42 + </div>
  43 + <div ng-if="!pageRanking.themes && pageRanking.loadingThemes">
  44 + <div class="alert alert-info" role="alert">
  45 + Carregando temas.
  46 + </div>
  47 + </div>
  48 + <div ng-if="!pageRanking.themes && pageRanking.themesError">
  49 + <div class="alert alert-danger" role="alert">
  50 + Não foi possível carregar a lista de temas neste momento.
  51 + </div>
  52 + </div>
  53 + </div>
  54 + <div class="col-sm-8 col-md-9">
  55 + <div class="row hidden-xs">
  56 + <div class="col-xs-12">
  57 + <div class="input-group input-group-lg input-group-search">
  58 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  59 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageRanking.query" placeholder="Buscar propostas" aria-label="Buscar propostas" >
  60 + <span class="input-group-btn">
  61 + <button type="button" class="btn btn-default" ng-click="pageRanking.search()">
  62 + <span class="icon-circle icon-small color-theme-common-bg">
  63 + <span class="glyphicon glyphicon-search"></span>
  64 + </span>
  65 + <span class="sr-only">Buscar</span>
  66 + </button>
  67 + </span>
  68 + </div>
  69 + </div>
  70 + </div>
  71 + <div class="row">
  72 + <div class="col-sm-12">
  73 + <header class="header">
  74 + <h2>Total de Propostas as propostas: "<span>{{::pageRanking.proposals.length}} propostas</span>"</h2>
  75 + </header>
  76 + </div>
  77 + </div>
  78 +
  79 + <div class="row">
  80 + <div class="col-sm-12" ng-if="pageRanking.proposals">
  81 + <proposal-list proposals="pageRanking.filtredProposals"></proposal-list>
  82 + </div>
  83 + <div ng-if="!pageRanking.proposals && pageRanking.loadingProposals">
  84 + <div class="alert alert-info" role="alert">
  85 + Carregando propostas.
  86 + </div>
  87 + </div>
  88 + <div ng-if="!pageRanking.proposals && pageRanking.proposalsError">
  89 + <div class="alert alert-danger" role="alert">
  90 + Não foi possível carregar a lista de propostas neste momento.
  91 + </div>
  92 + </div>
  93 + </div>
  94 + </div>
  95 + </div>
  96 + </div>
  97 + </section>
  98 +</div>