Commit 3cd6b93a32abcdf2ef6851b6d98831734f7049cb
Exists in
master
and in
8 other branches
Merge branch 'merlin' into rafael
Showing
29 changed files
with
368 additions
and
262 deletions
Show diff stats
.gitignore
gulp/server.js
... | ... | @@ -16,7 +16,7 @@ function browserSyncInit(baseDir, browser) { |
16 | 16 | browser = browser === undefined ? 'default' : browser; |
17 | 17 | |
18 | 18 | var routes = null; |
19 | - if(baseDir === conf.paths.src || (util.isArray(baseDir) && baseDir.indexOf(conf.paths.src) !== -1)) { | |
19 | + if (baseDir === conf.paths.src || (util.isArray(baseDir) && baseDir.indexOf(conf.paths.src) !== -1)) { | |
20 | 20 | routes = { |
21 | 21 | '/bower_components': 'bower_components' |
22 | 22 | }; |
... | ... | @@ -34,29 +34,48 @@ function browserSyncInit(baseDir, browser) { |
34 | 34 | * |
35 | 35 | * For more details and option, https://github.com/chimurai/http-proxy-middleware/blob/v0.0.5/README.md |
36 | 36 | */ |
37 | - if(gutil.env.target) { | |
38 | - server.middleware = proxyMiddleware(['/api/**', '/image_uploads/**'], { | |
39 | - target: gutil.env.target, | |
40 | - changeOrigin: true, | |
41 | - proxyTable: { | |
42 | - 'localhost:3000' : gutil.env.target | |
43 | - } | |
44 | - | |
45 | - }); | |
46 | - } else { | |
47 | - // no target! Point to localhost | |
37 | + if (gutil.env.local) { | |
38 | + // no target env. Point to localhost | |
48 | 39 | server.middleware = proxyMiddleware('/api', { |
49 | 40 | target: 'http://0.0.0.0:9000/', |
50 | 41 | pathRewrite: { |
51 | - // rewrite paths | |
52 | - '^/api/v1/articles' : '/articles' | |
42 | + // rewrite paths | |
43 | + '^/api/v1/articles': '/articles' | |
53 | 44 | }, |
54 | 45 | proxyTable: { |
55 | 46 | // when request.headers.host == 'dev.localhost:3000', |
56 | 47 | // override target 'http://www.example.org' to 'http://localhost:8000' |
57 | 48 | // 'dev.localhost:3000' : 'http://localhost:8000' |
58 | - 'hom.dialoga.gov.br' : 'http://localhost:9000', | |
59 | - 'login.dialoga.gov.br' : 'http://localhost:9000' | |
49 | + 'hom.dialoga.gov.br': 'http://localhost:9000', | |
50 | + 'login.dialoga.gov.br': 'http://localhost:9000' | |
51 | + } | |
52 | + }); | |
53 | + } | |
54 | + | |
55 | + if (gutil.env.production) { | |
56 | + var host_production = 'http://login.dialoga.gov.br/'; | |
57 | + server.middleware = proxyMiddleware([ | |
58 | + '/api/**', | |
59 | + '/image_uploads/**' | |
60 | + ], { | |
61 | + target: host_production, | |
62 | + changeOrigin: true, | |
63 | + proxyTable: { | |
64 | + 'localhost:3000': host_production | |
65 | + } | |
66 | + }); | |
67 | + } | |
68 | + | |
69 | + if (gutil.env.staging) { | |
70 | + var host_staging = 'http://hom.login.dialoga.gov.br/'; | |
71 | + server.middleware = proxyMiddleware([ | |
72 | + '/api/**', | |
73 | + '/image_uploads/**' | |
74 | + ], { | |
75 | + target: host_staging, | |
76 | + changeOrigin: true, | |
77 | + proxyTable: { | |
78 | + 'localhost:3000': host_staging | |
60 | 79 | } |
61 | 80 | }); |
62 | 81 | } |
... | ... | @@ -73,18 +92,18 @@ browserSync.use(browserSyncSpa({ |
73 | 92 | selector: '[ng-app]'// Only needed for angular apps |
74 | 93 | })); |
75 | 94 | |
76 | -gulp.task('serve', ['watch'], function () { | |
95 | +gulp.task('serve', ['watch'], function() { | |
77 | 96 | browserSyncInit([path.join(conf.paths.tmp, '/serve'), conf.paths.src]); |
78 | 97 | }); |
79 | 98 | |
80 | -gulp.task('serve:dist', ['build'], function () { | |
99 | +gulp.task('serve:dist', ['build'], function() { | |
81 | 100 | browserSyncInit(conf.paths.dist); |
82 | 101 | }); |
83 | 102 | |
84 | -gulp.task('serve:e2e', ['inject'], function () { | |
103 | +gulp.task('serve:e2e', ['inject'], function() { | |
85 | 104 | browserSyncInit([conf.paths.tmp + '/serve', conf.paths.src], []); |
86 | 105 | }); |
87 | 106 | |
88 | -gulp.task('serve:e2e-dist', ['build'], function () { | |
107 | +gulp.task('serve:e2e-dist', ['build'], function() { | |
89 | 108 | browserSyncInit(conf.paths.dist, []); |
90 | 109 | }); | ... | ... |
... | ... | @@ -0,0 +1,17 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('dialoga') | |
6 | + .directive('appFooter', appFooter); | |
7 | + | |
8 | + /** @ngInject */ | |
9 | + function appFooter() { | |
10 | + var directive = { | |
11 | + restrict: 'E', | |
12 | + templateUrl: 'app/components/app-footer/app-footer.html' | |
13 | + }; | |
14 | + | |
15 | + return directive; | |
16 | + } | |
17 | +})(); | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +<div id="footer"> | |
2 | + <div class="container"> | |
3 | + <div class="row"> | |
4 | + <div class="col-xs-12 text-center"> | |
5 | + <a id="termos-de-uso" ui-sref="termos-de-uso">Termos de uso</a> | |
6 | + <a href="#header" style="position:absolute;right:0;top:-10px;" ng-click="scrollTo('#header')">Voltar para o topo</a> | |
7 | + </div> | |
8 | + </div> | |
9 | + </div> | |
10 | +</div> | ... | ... |
... | ... | @@ -0,0 +1,21 @@ |
1 | +$barra-theme: ("green": #00420c, "yellow": #2c66ce, "blue": #0042b1); | |
2 | + | |
3 | +#footer-brasil { | |
4 | + background: none repeat scroll 0% 0% map-get($barra-theme, "blue"); | |
5 | + padding: 1em 0px; | |
6 | + max-width: 100%; | |
7 | +} | |
8 | + | |
9 | +#footer { | |
10 | + padding: 20px 0; | |
11 | + a { | |
12 | + margin: 10px auto; | |
13 | + } | |
14 | + | |
15 | + .contraste & { | |
16 | + background-color: #000; | |
17 | + a { | |
18 | + color: #fff; | |
19 | + } | |
20 | + } | |
21 | +} | ... | ... |
... | ... | @@ -0,0 +1,17 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('dialoga') | |
6 | + .directive('appHeader', appHeader); | |
7 | + | |
8 | + /** @ngInject */ | |
9 | + function appHeader() { | |
10 | + var directive = { | |
11 | + restrict: 'E', | |
12 | + templateUrl: 'app/components/app-header/app-header.html' | |
13 | + }; | |
14 | + | |
15 | + return directive; | |
16 | + } | |
17 | +})(); | ... | ... |
... | ... | @@ -0,0 +1,15 @@ |
1 | +<header id="header" class="container"> | |
2 | + | |
3 | + <div class="row hidden-xs"> | |
4 | + <div class="col-sm-12"> | |
5 | + <auth-user></auth-user> | |
6 | + </div> | |
7 | + </div> | |
8 | + | |
9 | + <div class="row"> | |
10 | + <div class="col-sm-12"> | |
11 | + <app-navbar></app-navbar> | |
12 | + </div> | |
13 | + </div> | |
14 | + | |
15 | +</header> | ... | ... |
src/app/components/auth/auth.service.js
... | ... | @@ -8,10 +8,10 @@ |
8 | 8 | .factory('AuthInterceptor', AuthInterceptor); |
9 | 9 | |
10 | 10 | /** @ngInject */ |
11 | - function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) { | |
11 | + function AuthService($q, $http, $rootScope, Session, AUTH_EVENTS, API, PATH, $log) { | |
12 | 12 | |
13 | 13 | function register (data){ |
14 | - var url = API.host + '/api/v1/register'; | |
14 | + var url = PATH.host + '/api/v1/register'; | |
15 | 15 | $log.debug('data', data); |
16 | 16 | // var encodedData = data; |
17 | 17 | var encodedData = ''; |
... | ... | @@ -22,6 +22,8 @@ |
22 | 22 | encodedData += '&password=' + data.password; |
23 | 23 | encodedData += '&password_confirmation=' + data.password_confirmation; |
24 | 24 | encodedData += '&user_terms_accepted=' + data.user_terms_accepted; |
25 | + encodedData += '&captcha_text=' + data.captcha_text; | |
26 | + encodedData += '&txtToken_captcha_serpro_gov_br=' + data.txtToken_captcha_serpro_gov_br; | |
25 | 27 | |
26 | 28 | // var encodedData = _encodeObj(data); |
27 | 29 | // var encodedData = angular.element.param(data); |
... | ... | @@ -44,8 +46,8 @@ |
44 | 46 | }, function(response) { |
45 | 47 | $log.debug('AuthService.register [FAIL] response', response); |
46 | 48 | |
47 | - $rootScope.$broadcast(AUTH_EVENTS.registerFailed); | |
48 | - return response; | |
49 | + $rootScope.$broadcast(AUTH_EVENTS.registerFailed, response); | |
50 | + return $q.reject(response); | |
49 | 51 | }); |
50 | 52 | } |
51 | 53 | ... | ... |
src/app/components/navbar/navbar.html
1 | 1 | <div class="app-navbar"> |
2 | + <div id="dialoga-nas-redes"> | |
3 | + <div class="text text-right"> | |
4 | + <p>Dialoga<br>Nas Redes</p> | |
5 | + </div> | |
6 | + <social-share></social-share> | |
7 | + </div> | |
2 | 8 | <nav id="navigation" class="header-navbar navbar navbar-static-top" role="navigation"> |
3 | 9 | <div class="navbar-header"> |
4 | 10 | <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false"> | ... | ... |
src/app/components/navbar/navbar.scss
... | ... | @@ -103,3 +103,17 @@ |
103 | 103 | } |
104 | 104 | } |
105 | 105 | } |
106 | + | |
107 | +#dialoga-nas-redes { | |
108 | + position: absolute; | |
109 | + right: 0; | |
110 | + top: 0; | |
111 | + z-index: 1000; | |
112 | + | |
113 | + .text { | |
114 | + position: absolute; | |
115 | + top: 5px; | |
116 | + right: 210px; | |
117 | + width: 100px; | |
118 | + } | |
119 | +} | |
106 | 120 | \ No newline at end of file | ... | ... |
src/app/components/proposal-carousel/proposal-carousel.html
... | ... | @@ -24,7 +24,7 @@ |
24 | 24 | </div> |
25 | 25 | </div> |
26 | 26 | <div class="proposal-carousel-bottom color-theme-common-bg" ng-click="vm.showProposalsList()"> |
27 | - <div>Veja as propostas mais vortadas</div> | |
27 | + <div>Veja as propostas mais votadas</div> | |
28 | 28 | <div class="proposal-carousel-bottom-icon"> |
29 | 29 | <span class="glyphicon glyphicon-chevron-down pull-right color-theme-common-fg"></span> |
30 | 30 | </div> | ... | ... |
src/app/components/proposal-list/proposal-list.directive.js
... | ... | @@ -33,8 +33,8 @@ |
33 | 33 | throw { name: 'NotDefined', message: 'The attribute "proposals" is undefined.'}; |
34 | 34 | } |
35 | 35 | |
36 | - if(!vm.per_page){ | |
37 | - vm.per_page = 5; | |
36 | + if(!vm.perPage){ | |
37 | + vm.perPage = 5; | |
38 | 38 | } |
39 | 39 | |
40 | 40 | vm.initPorposalList(); |
... | ... | @@ -50,10 +50,10 @@ |
50 | 50 | vm.proposalsLength = vm.proposals.length; |
51 | 51 | |
52 | 52 | |
53 | - if ((vm.proposalsLength % vm.per_page) === 0) { | |
54 | - vm.pages = vm.proposalsLength / vm.per_page; | |
53 | + if ((vm.proposalsLength % vm.perPage) === 0) { | |
54 | + vm.pages = vm.proposalsLength / vm.perPage; | |
55 | 55 | } else{ |
56 | - vm.pages = (vm.proposalsLength / vm.per_page) + 1; | |
56 | + vm.pages = (vm.proposalsLength / vm.perPage) + 1; | |
57 | 57 | } |
58 | 58 | |
59 | 59 | // vm.arraypages = new Array(Math.ceil(vm.pages)); |
... | ... | @@ -81,8 +81,8 @@ |
81 | 81 | ProposalListController.prototype.getProposalsPerPage = function (pageIndex) { |
82 | 82 | var vm = this; |
83 | 83 | |
84 | - var initialIndex = pageIndex * vm.per_page; | |
85 | - var finalIndex = initialIndex + vm.per_page; | |
84 | + var initialIndex = pageIndex * vm.perPage; | |
85 | + var finalIndex = initialIndex + vm.perPage; | |
86 | 86 | |
87 | 87 | return vm.proposals.slice(initialIndex, finalIndex); |
88 | 88 | }; |
... | ... | @@ -132,7 +132,7 @@ |
132 | 132 | templateUrl: 'app/components/proposal-list/proposal-list.html', |
133 | 133 | scope: { |
134 | 134 | proposals: '=', |
135 | - per_page: '=' | |
135 | + perPage: '=' | |
136 | 136 | }, |
137 | 137 | controller: ProposalListController, |
138 | 138 | controllerAs: 'vm', | ... | ... |
src/app/components/proposal-list/proposal-list.html
... | ... | @@ -27,8 +27,7 @@ |
27 | 27 | <div class="row row-actions"> |
28 | 28 | <div class="col-sm-8"> |
29 | 29 | <button type="button" class="btn btn-link btn-rate color-theme-common-fg" ng-click="vm.showContent(proposal)"> |
30 | - Avalie esta proposta | |
31 | - <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> | |
30 | + Participe | |
32 | 31 | </button> |
33 | 32 | </div> |
34 | 33 | <div class="col-sm-4"> | ... | ... |
src/app/components/social-share/social-share.scss
1 | 1 | .social-share { |
2 | + min-width: 200px; | |
3 | + padding: 5px; | |
4 | + height: 47px; | |
5 | + | |
6 | + &:after { | |
7 | + clear: both; | |
8 | + } | |
9 | + | |
2 | 10 | &.list-inline { |
3 | 11 | margin: 0; |
4 | 12 | } |
13 | + li { | |
14 | + float: left; | |
15 | + padding: 0; | |
16 | + margin: 0; | |
17 | + width: 45px; | |
18 | + text-align: center; | |
19 | + | |
20 | + & > a { | |
21 | + padding: 0; | |
22 | + } | |
23 | + | |
24 | + &:first-child { | |
25 | + // margin-left: 5px; | |
26 | + } | |
27 | + } | |
5 | 28 | } |
29 | + | ... | ... |
src/app/index.route.js
... | ... | @@ -13,65 +13,55 @@ |
13 | 13 | ncyBreadcrumb: {label: 'Home'}, |
14 | 14 | reloadOnSearch: false, |
15 | 15 | views: { |
16 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
17 | 16 | 'main': { |
18 | 17 | templateUrl: 'app/pages/inicio/inicio.html', |
19 | 18 | controller: 'InicioPageController', |
20 | 19 | controllerAs: 'pageInicio' |
21 | - }, | |
22 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
20 | + } | |
23 | 21 | } |
24 | 22 | }) |
25 | 23 | .state('entrar', { |
26 | 24 | url: '/entrar?redirect_uri&message', |
27 | 25 | ncyBreadcrumb: {label: 'Entrar'}, |
28 | 26 | views: { |
29 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
30 | 27 | 'main': { |
31 | 28 | templateUrl: 'app/pages/auth/signin.html', |
32 | 29 | controller: 'AuthPageController', |
33 | 30 | controllerAs: 'pageSignin' |
34 | - }, | |
35 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
31 | + } | |
36 | 32 | } |
37 | 33 | }) |
38 | 34 | .state('recuperar', { |
39 | 35 | url: '/recuperar', |
40 | 36 | ncyBreadcrumb: {label: 'Recuperar'}, |
41 | 37 | views: { |
42 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
43 | 38 | 'main': { |
44 | 39 | templateUrl: 'app/pages/auth/recover.html', |
45 | 40 | controller: 'AuthPageController', |
46 | 41 | controllerAs: 'pageSignin' |
47 | - }, | |
48 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
42 | + } | |
49 | 43 | } |
50 | 44 | }) |
51 | 45 | .state('alterar', { |
52 | 46 | url: '/alterar', |
53 | 47 | ncyBreadcrumb: {label: 'Alterar'}, |
54 | 48 | views: { |
55 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
56 | 49 | 'main': { |
57 | 50 | templateUrl: 'app/pages/auth/change.html', |
58 | 51 | controller: 'AuthPageController', |
59 | 52 | controllerAs: 'pageSignin' |
60 | - }, | |
61 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
53 | + } | |
62 | 54 | } |
63 | 55 | }) |
64 | 56 | .state('cadastrar', { |
65 | 57 | url: '/cadastrar', |
66 | 58 | ncyBreadcrumb: {label: 'Cadastrar'}, |
67 | 59 | views: { |
68 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
69 | 60 | 'main': { |
70 | 61 | templateUrl: 'app/pages/auth/signup.html', |
71 | 62 | controller: 'AuthPageController', |
72 | 63 | controllerAs: 'pageSignup' |
73 | - }, | |
74 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
64 | + } | |
75 | 65 | } |
76 | 66 | }) |
77 | 67 | .state('programas', { |
... | ... | @@ -79,13 +69,11 @@ |
79 | 69 | reloadOnSearch: false, |
80 | 70 | ncyBreadcrumb: {label: 'Programas'}, |
81 | 71 | views: { |
82 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
83 | 72 | 'main': { |
84 | 73 | templateUrl: 'app/pages/programas/programas.html', |
85 | 74 | controller: 'ProgramasPageController', |
86 | 75 | controllerAs: 'pageProgramas' |
87 | - }, | |
88 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
76 | + } | |
89 | 77 | } |
90 | 78 | }) |
91 | 79 | .state('programa', { |
... | ... | @@ -96,13 +84,11 @@ |
96 | 84 | parent: 'programas' |
97 | 85 | }, |
98 | 86 | views: { |
99 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
100 | 87 | 'main': { |
101 | 88 | templateUrl: 'app/pages/programas/programa.html', |
102 | 89 | controller: 'ProgramaPageController', |
103 | 90 | controllerAs: 'pagePrograma' |
104 | - }, | |
105 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
91 | + } | |
106 | 92 | } |
107 | 93 | }) |
108 | 94 | .state('propostas', { |
... | ... | @@ -110,13 +96,11 @@ |
110 | 96 | reloadOnSearch: false, |
111 | 97 | ncyBreadcrumb: {label: 'Propostas'}, |
112 | 98 | views: { |
113 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
114 | 99 | 'main': { |
115 | 100 | templateUrl: 'app/pages/propostas/propostas.html', |
116 | 101 | controller: 'PropostasPageController', |
117 | 102 | controllerAs: 'pagePropostas' |
118 | - }, | |
119 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
103 | + } | |
120 | 104 | } |
121 | 105 | }) |
122 | 106 | .state('ranking', { |
... | ... | @@ -124,13 +108,11 @@ |
124 | 108 | reloadOnSearch: false, |
125 | 109 | ncyBreadcrumb: {label: 'Propostas'}, |
126 | 110 | views: { |
127 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
128 | 111 | 'main': { |
129 | 112 | templateUrl: 'app/pages/propostas/ranking.html', |
130 | 113 | controller: 'PropostasPageController', |
131 | 114 | controllerAs: 'pagePropostas' |
132 | - }, | |
133 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
115 | + } | |
134 | 116 | } |
135 | 117 | }) |
136 | 118 | .state('propostas-conteudo', { |
... | ... | @@ -140,39 +122,33 @@ |
140 | 122 | parent: 'propostas' |
141 | 123 | }, |
142 | 124 | views: { |
143 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
144 | 125 | 'main': { |
145 | 126 | templateUrl: 'app/pages/propostas/proposta.html', |
146 | 127 | controller: 'PropostasPageController', |
147 | 128 | controllerAs: 'pagePropostas' |
148 | - }, | |
149 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
129 | + } | |
150 | 130 | } |
151 | 131 | }) |
152 | 132 | .state('duvidas', { |
153 | 133 | url: '/duvidas', |
154 | 134 | ncyBreadcrumb: {label: 'Dúvidas'}, |
155 | 135 | views: { |
156 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
157 | 136 | 'main': { |
158 | 137 | templateUrl: 'app/pages/duvidas/duvidas.html', |
159 | 138 | controller: 'DuvidasPageController', |
160 | 139 | controllerAs: 'pageDuvidas' |
161 | - }, | |
162 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
140 | + } | |
163 | 141 | } |
164 | 142 | }) |
165 | 143 | .state('sobre', { |
166 | 144 | url: '/sobre', |
167 | 145 | ncyBreadcrumb: {label: 'Sobre'}, |
168 | 146 | views: { |
169 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
170 | 147 | 'main': { |
171 | 148 | templateUrl: 'app/pages/article/article.html', |
172 | 149 | controller: 'ArticlePageController', |
173 | 150 | controllerAs: 'pageArticle' |
174 | - }, | |
175 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
151 | + } | |
176 | 152 | } |
177 | 153 | }) |
178 | 154 | .state('termos-de-uso', { |
... | ... | @@ -180,35 +156,29 @@ |
180 | 156 | ncyBreadcrumb: {label: 'Termos de Uso'}, |
181 | 157 | controller: 'ArticlePageController', |
182 | 158 | views: { |
183 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
184 | 159 | 'main': { |
185 | 160 | templateUrl: 'app/pages/article/article.html', |
186 | 161 | controller: 'ArticlePageController', |
187 | 162 | controllerAs: 'pageArticle' |
188 | - }, | |
189 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
163 | + } | |
190 | 164 | } |
191 | 165 | }) |
192 | 166 | .state('mapa-do-site', { |
193 | 167 | url: '/mapa-do-site', |
194 | 168 | ncyBreadcrumb: {label: 'Mapa do Site'}, |
195 | 169 | views: { |
196 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
197 | 170 | 'main': { |
198 | 171 | templateUrl: 'app/pages/mapa-do-site/mapa-do-site.html', |
199 | 172 | controller: 'SitemapPageController', |
200 | 173 | controllerAs: 'sitemap' |
201 | - }, | |
202 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
174 | + } | |
203 | 175 | } |
204 | 176 | }) |
205 | 177 | .state('erro', { |
206 | 178 | url: '/erro', |
207 | 179 | ncyBreadcrumb: {label: 'Erro'}, |
208 | 180 | views: { |
209 | - 'header': { templateUrl: 'app/pages/header/header.html' }, | |
210 | - 'main': { templateUrl: 'app/pages/erro/erro.html' }, | |
211 | - 'footer': { templateUrl: 'app/pages/footer/footer.html' } | |
181 | + 'main': { templateUrl: 'app/pages/erro/erro.html' } | |
212 | 182 | } |
213 | 183 | }) |
214 | 184 | ; | ... | ... |
src/app/index.run.js
... | ... | @@ -4,12 +4,13 @@ |
4 | 4 | |
5 | 5 | angular |
6 | 6 | .module('dialoga') |
7 | - .run(runAuth) | |
8 | - .run(runSocialAuth) | |
9 | 7 | .run(runAccessibility) |
8 | + .run(runAuth) | |
9 | + .run(runCaptcha) | |
10 | + .run(runColorUtils) | |
10 | 11 | .run(runHistory) |
11 | 12 | .run(runPath) |
12 | - .run(runColorUtils) | |
13 | + .run(runSocialAuth) | |
13 | 14 | .run(runUtils) |
14 | 15 | .run(runBlock); |
15 | 16 | |
... | ... | @@ -45,18 +46,53 @@ |
45 | 46 | } |
46 | 47 | |
47 | 48 | /** @ngInject */ |
49 | + function runCaptcha($window, $log, GUID) { | |
50 | + var serpro_captcha_clienteId = 'fdbcdc7a0b754ee7ae9d865fda740f17'; | |
51 | + | |
52 | + $window.initCaptcha = function(element) { | |
53 | + var $element = angular.element(element); | |
54 | + | |
55 | + // already have a started captcha | |
56 | + if ($element.data('captcha')) { | |
57 | + $log.info('Captcha already initialized. Abort.'); | |
58 | + return; | |
59 | + } | |
60 | + | |
61 | + // Create a new instance of Captcha | |
62 | + var oCaptcha_serpro_gov_br = new $window.captcha_serpro_gov_br(); | |
63 | + | |
64 | + // Set the initial data | |
65 | + $element.val(''); | |
66 | + $element.data('captcha', oCaptcha_serpro_gov_br); | |
67 | + oCaptcha_serpro_gov_br.clienteId = serpro_captcha_clienteId; | |
68 | + // oCaptcha_serpro_gov_br.url = "/serprocaptcha"; | |
69 | + oCaptcha_serpro_gov_br.criarUI(element, 'css', 'serpro_captcha_component_', GUID.generate()); | |
70 | + }; | |
71 | + | |
72 | + $window.reloadCaptcha = function(element) { | |
73 | + var $element = angular.element(element); | |
74 | + | |
75 | + if ($element.data('captcha')) { | |
76 | + $element.data('captcha').recarregar(); | |
77 | + } | |
78 | + }; | |
79 | + | |
80 | + $log.debug('runCaptcha'); | |
81 | + } | |
82 | + | |
83 | + /** @ngInject */ | |
48 | 84 | function runSocialAuth($window, $rootScope, $interval, $log) { |
49 | 85 | |
50 | - $window.oauthClientAction = function (url){ | |
86 | + $window.oauthClientAction = function(url) { | |
51 | 87 | var child = $window.open(url, '_blank'); |
52 | 88 | var interval = $interval(function() { |
53 | 89 | try { |
54 | - if(!child.closed) { | |
90 | + if (!child.closed) { | |
55 | 91 | child.postMessage({ |
56 | 92 | message: 'requestOauthClientPluginResult' |
57 | 93 | }, '*'); |
58 | 94 | } |
59 | - } catch(e) { | |
95 | + } catch (e) { | |
60 | 96 | // we're here when the child window has been navigated away or closed |
61 | 97 | if (child.closed) { |
62 | 98 | $interval.cancel(interval); |
... | ... | @@ -118,7 +154,7 @@ |
118 | 154 | // prevent skip link from redirecting |
119 | 155 | if ($event) { $event.preventDefault(); } |
120 | 156 | |
121 | - if(angular.isString(target)){ | |
157 | + if (angular.isString(target)) { | |
122 | 158 | target = angular.element(target); |
123 | 159 | } |
124 | 160 | |
... | ... | @@ -137,7 +173,7 @@ |
137 | 173 | $rootScope.$previousState.splice(-MAX_HISTORY, MAX_HISTORY); |
138 | 174 | }); |
139 | 175 | |
140 | - $rootScope.goBack = $rootScope.goBack || function () { | |
176 | + $rootScope.goBack = $rootScope.goBack || function() { | |
141 | 177 | return $rootScope.$previousState.pop(); |
142 | 178 | }; |
143 | 179 | } |
... | ... | @@ -178,7 +214,7 @@ |
178 | 214 | |
179 | 215 | /** @ngInject */ |
180 | 216 | function runUtils($rootScope) { |
181 | - $rootScope.stripHtml = function (text) { | |
217 | + $rootScope.stripHtml = function(text) { | |
182 | 218 | return String(text).replace(/<[^>]+>/gm, ''); |
183 | 219 | }; |
184 | 220 | } | ... | ... |
src/app/index.scss
... | ... | @@ -155,34 +155,6 @@ body { |
155 | 155 | } |
156 | 156 | } |
157 | 157 | |
158 | - | |
159 | -.social-share { | |
160 | - min-width: 200px; | |
161 | - background-color: #eee; | |
162 | - padding: 5px; | |
163 | - height: 47px; | |
164 | - | |
165 | - &:after { | |
166 | - clear: both; | |
167 | - } | |
168 | - | |
169 | - li { | |
170 | - float: left; | |
171 | - padding: 0; | |
172 | - margin: 0; | |
173 | - width: 45px; | |
174 | - text-align: center; | |
175 | - | |
176 | - & > a { | |
177 | - padding: 0; | |
178 | - } | |
179 | - | |
180 | - &:first-child { | |
181 | - // margin-left: 5px; | |
182 | - } | |
183 | - } | |
184 | -} | |
185 | - | |
186 | 158 | .icon { |
187 | 159 | display: inline-block; |
188 | 160 | vertical-align: middle; | ... | ... |
src/app/pages/auth/auth.controller.js
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | .controller('AuthPageController', AuthPageController); |
7 | 7 | |
8 | 8 | /** @ngInject */ |
9 | - function AuthPageController($scope, $rootScope, $window, $location, $state, $timeout, AUTH_EVENTS, AuthService, DialogaService, Session, $log) { | |
9 | + function AuthPageController($scope, $rootScope, $window, $location, $state, $timeout, $interval, AUTH_EVENTS, AuthService, DialogaService, Session, $log) { | |
10 | 10 | var vm = this; |
11 | 11 | |
12 | 12 | vm.$scope = $scope; |
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | vm.$location = $location; |
16 | 16 | vm.$state = $state; |
17 | 17 | vm.$timeout = $timeout; |
18 | + vm.$interval = $interval; | |
18 | 19 | vm.AUTH_EVENTS = AUTH_EVENTS; |
19 | 20 | vm.AuthService = AuthService; |
20 | 21 | vm.DialogaService = DialogaService; |
... | ... | @@ -78,14 +79,38 @@ |
78 | 79 | AuthPageController.prototype.attachListeners = function() { |
79 | 80 | var vm = this; |
80 | 81 | |
82 | + vm.$scope.$on(vm.AUTH_EVENTS.registerSuccess, function(event, response) { | |
83 | + vm.$log.debug('TODO: handle register success'); | |
84 | + vm.$log.debug('[register success] response', response); | |
85 | + }); | |
86 | + | |
87 | + vm.$scope.$on(vm.AUTH_EVENTS.registerFailed, function(event, response) { | |
88 | + vm.$log.debug('TODO: handle register error'); | |
89 | + vm.$log.debug('[register error] response', response); | |
90 | + | |
91 | + var reason = response.data.message; | |
92 | + vm.errorMessage = reason; | |
93 | + }); | |
94 | + | |
81 | 95 | vm.$scope.$on('oauthClientPluginResult', function(event, response) { |
82 | 96 | vm.$log.debug('response', response); |
83 | 97 | |
84 | 98 | // var logged_id = response.data.logged_id; |
85 | 99 | // var private_token = response.data.private_token; |
86 | 100 | // var user = response.data.user; |
87 | - | |
88 | 101 | }); |
102 | + | |
103 | + var stop = null; | |
104 | + stop = vm.$interval(function(){ | |
105 | + var $el = angular.element('#serpro_captcha'); | |
106 | + | |
107 | + if ($el && $el.length > 0 ){ | |
108 | + vm.$window.initCaptcha($el[0]); | |
109 | + vm.$interval.cancel(stop); | |
110 | + stop = undefined; | |
111 | + } | |
112 | + | |
113 | + }, 200); | |
89 | 114 | }; |
90 | 115 | |
91 | 116 | AuthPageController.prototype.onClickLogout = function() { |
... | ... | @@ -94,7 +119,7 @@ |
94 | 119 | vm.AuthService.logout(); |
95 | 120 | }; |
96 | 121 | |
97 | - AuthPageController.prototype.submitSigup = function(credentials) { | |
122 | + AuthPageController.prototype.submitSingup = function(credentials) { | |
98 | 123 | var vm = this; |
99 | 124 | |
100 | 125 | vm.AuthService.register(credentials).then(function(response) { |
... | ... | @@ -108,8 +133,19 @@ |
108 | 133 | }, function(response) { |
109 | 134 | vm.$log.debug('register error.response', response); |
110 | 135 | |
136 | + var message = response.data.message; | |
137 | + vm.errorMessage = message; | |
138 | + | |
139 | + if(response.data.code === 500){ | |
140 | + vm.internalError = true; | |
141 | + } | |
142 | + | |
143 | + | |
111 | 144 | // TODO: mensagens de erro |
112 | 145 | // TODO: tratar multiplos erros |
146 | + | |
147 | + // javascript_console_message: "Unable to reach Serpro's Captcha validation service" | |
148 | + // message: "Internal captcha validation error" | |
113 | 149 | }); |
114 | 150 | }; |
115 | 151 | |
... | ... | @@ -137,15 +173,14 @@ |
137 | 173 | |
138 | 174 | // start countdown |
139 | 175 | vm.countdown = vm.delay; |
140 | - (function countdown() { | |
141 | - vm.$timeout(function() { | |
142 | - vm.countdown--; | |
143 | - vm.$log.debug('vm.countdown', vm.countdown); | |
144 | - if (vm.countdown > 0) { | |
145 | - countdown(); | |
146 | - } | |
147 | - }, 1000); | |
148 | - })(); | |
176 | + var stop = null; | |
177 | + stop = vm.$interval(function() { | |
178 | + vm.countdown--; | |
179 | + if (vm.countdown <= 0) { | |
180 | + vm.$interval.cancel(stop); | |
181 | + stop = undefined; | |
182 | + } | |
183 | + }, 1000); | |
149 | 184 | |
150 | 185 | vm.$timeout(function() { |
151 | 186 | var state = vm.params.state; | ... | ... |
src/app/pages/auth/signin.html
... | ... | @@ -82,92 +82,87 @@ |
82 | 82 | </p> |
83 | 83 | </div> |
84 | 84 | </div> |
85 | - <div class="row"> | |
86 | - <div class="col-xs-6"> | |
87 | - <button type="button" ng-click="pageSignin.authWithFacebook()" class="btn btn-lg btn-block btn-social btn-facebook"> | |
88 | - <span aria-hidden="true" class="icon-circle icon-small icon-circle-social-facebook"> | |
89 | - <span class="icon icon-social-facebook"></span> | |
90 | - </span> | |
91 | - <span class="text">Entrar com Facebook</span> | |
92 | - </button> | |
93 | - </div> | |
94 | - <div class="col-xs-6"> | |
95 | - <button type="button" ng-click="pageSignin.authWithGooglePlus()" class="btn btn-lg btn-block btn-social btn-google-plus"> | |
96 | - <span aria-hidden="true" class="icon-circle icon-small icon-circle-social-googleplus"> | |
97 | - <span class="icon icon-social-googleplus"></span> | |
98 | - </span> | |
99 | - <span class="text">Entrar com Google+</span> | |
100 | - </button> | |
85 | + <div class="row" ng-if="pageSignin.errorMessage"> | |
86 | + <div class="col-sm-12"> | |
87 | + <div class="alert alert-danger"> | |
88 | + {{pageSignin.errorMessage}} | |
89 | + </div> | |
90 | + <div ng-if="vm.internalError"> | |
91 | + <p>Este erro parece ser um problema interno.<br/>Por favor, tente novamente mais tarde.</p> | |
92 | + <p>Caso o problema persista, entre em contato!</p> | |
93 | + <p><a ui-sref="duvidas">Ir para página de contato</a></p> | |
94 | + </div> | |
101 | 95 | </div> |
102 | 96 | </div> |
103 | 97 | <div class="row"> |
104 | 98 | <div class="col-sm-12"> |
105 | - <hr class="separator separator-cadastro"></hr> | |
106 | - </div> | |
107 | - <div class="row"> | |
108 | - <div class="col-sm-12"> | |
109 | - <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)"> | |
110 | - <div class="form-group"> | |
111 | - <label for="signup-form--name">Nome*:</label> | |
112 | - <span class="pull-right">*Dados obrigatórios</span> | |
113 | - <input type="text" id="signup-form--name" name="name" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.name.$invalid && signupForm.name.$touched }" ng-model="pageSignin.signup.name" ng-minlength="" ng-maxlength="" required> | |
114 | - <validation-messages field="signupForm.name"/> | |
115 | - </div> | |
116 | - <div class="form-group"> | |
117 | - <label for="signup-form--email">E-mail*:</label> | |
118 | - <input type="email" id="signup-form--email" name="email" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.email.$invalid && signupForm.email.$touched }" ng-model="pageSignin.signup.email" ng-minlength="" ng-maxlength="" required> | |
119 | - <validation-messages field="signupForm.email"/> | |
99 | + <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)"> | |
100 | + <div class="form-group"> | |
101 | + <label for="signup-form--name">Nome*:</label> | |
102 | + <span class="pull-right">*Dados obrigatórios</span> | |
103 | + <input type="text" id="signup-form--name" name="name" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.name.$invalid && signupForm.name.$touched }" ng-model="pageSignin.signup.name" ng-minlength="" ng-maxlength="" required> | |
104 | + <validation-messages field="signupForm.name"/> | |
105 | + </div> | |
106 | + <div class="form-group"> | |
107 | + <label for="signup-form--email">E-mail*:</label> | |
108 | + <input type="email" id="signup-form--email" name="email" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.email.$invalid && signupForm.email.$touched }" ng-model="pageSignin.signup.email" ng-minlength="" ng-maxlength="" required> | |
109 | + <validation-messages field="signupForm.email"/> | |
110 | + </div> | |
111 | + <div class="row"> | |
112 | + <div class="col-sm-6"> | |
113 | + <div class="form-group"> | |
114 | + <label for="signup-form--password">Senha*:</label> | |
115 | + <input type="password" id="signup-form--password" name="password" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password.$invalid && signupForm.password.$touched }" ng-model="pageSignin.signup.password" ng-minlength="" ng-maxlength="" required> | |
116 | + <validation-messages field="signupForm.password"/> | |
117 | + </div> | |
120 | 118 | </div> |
121 | - <div class="row"> | |
122 | - <div class="col-sm-6"> | |
123 | - <div class="form-group"> | |
124 | - <label for="signup-form--password">Senha*:</label> | |
125 | - <input type="password" id="signup-form--password" name="password" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password.$invalid && signupForm.password.$touched }" ng-model="pageSignin.signup.password" ng-minlength="" ng-maxlength="" required> | |
126 | - <validation-messages field="signupForm.password"/> | |
127 | - </div> | |
119 | + <div class="col-sm-6"> | |
120 | + <div class="form-group"> | |
121 | + <label for="signup-form--password-confirmation">Confirmar Senha*:</label> | |
122 | + <input type="password" id="signup-form--password-confirmation" name="password_confirmation" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password_confirmation.$invalid && signupForm.password_confirmation.$touched }" ng-model="pageSignin.signup.password_confirmation" ng-minlength="" ng-maxlength="" required> | |
123 | + <validation-messages field="signupForm.password_confirmation"/> | |
128 | 124 | </div> |
129 | - <div class="col-sm-6"> | |
130 | - <div class="form-group"> | |
131 | - <label for="signup-form--password-confirmation">Confirmar Senha*:</label> | |
132 | - <input type="password" id="signup-form--password-confirmation" name="password_confirmation" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password_confirmation.$invalid && signupForm.password_confirmation.$touched }" ng-model="pageSignin.signup.password_confirmation" ng-minlength="" ng-maxlength="" required> | |
133 | - <validation-messages field="signupForm.password_confirmation"/> | |
134 | - </div> | |
125 | + </div> | |
126 | + </div> | |
127 | + <div class="row"> | |
128 | + <div class="col-sm-12" ng-show="(signupForm.password.$viewValue.length > 0 && signupForm.password_confirmation.$viewValue.length > 0) && (signupForm.password.$viewValue !== signupForm.password_confirmation.$viewValue)"> | |
129 | + <div class="error-message"> | |
130 | + As senhas estão diferentes. | |
135 | 131 | </div> |
136 | 132 | </div> |
137 | - <div class="row"> | |
138 | - <div class="col-sm-12" ng-show="(signupForm.password.$viewValue.length > 0 && signupForm.password_confirmation.$viewValue.length > 0) && (signupForm.password.$viewValue !== signupForm.password_confirmation.$viewValue)"> | |
133 | + <div class="col-sm-12"> | |
134 | + <span class="text" ng-show="signupForm.password.$viewValue.length > 0 && signupForm.password.$viewValue.length < 6"> | |
139 | 135 | <div class="error-message"> |
140 | - As senhas estão diferentes. | |
136 | + A senha deve ter 6 ou mais caracteres e conter números e letras. | |
141 | 137 | </div> |
142 | - </div> | |
143 | - <div class="col-sm-12"> | |
144 | - <span class="text" ng-show="signupForm.password.$viewValue.length > 0 && signupForm.password.$viewValue.length < 6"> | |
145 | - <div class="error-message"> | |
146 | - A senha deve ter 6 ou mais caracteres e conter números e letras. | |
147 | - </div> | |
148 | - </span> | |
149 | - </div> | |
138 | + </span> | |
150 | 139 | </div> |
151 | - <div class="form-group"> | |
152 | - <div class="checkbox"> | |
153 | - <label for="user_terms_accepted"> | |
154 | - <input type="checkbox" id="user_terms_accepted" name="user_terms_accepted" value="aceito" ng-model="pageSignin.signup.user_terms_accepted" required> | |
155 | - Já li e concordo com os | |
156 | - <button type="button" class="btn btn-link" style="padding:0 0 4px 0;" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button> | |
157 | - </label> | |
158 | - </div> | |
159 | - </input> | |
160 | - <validation-messages field="signupForm.user_terms_accepted"/> | |
161 | 140 | </div> |
162 | 141 | <div class="form-group"> |
163 | - <span>Digite o texto da imagem</span> | |
164 | - <p>O Captcha vai aqui</p> | |
142 | + <div class="checkbox"> | |
143 | + <label for="user_terms_accepted"> | |
144 | + <input type="checkbox" id="user_terms_accepted" name="user_terms_accepted" value="aceito" ng-model="pageSignin.signup.user_terms_accepted" required> | |
145 | + Já li e concordo com os | |
146 | + <button type="button" class="btn btn-link" style="padding:0 0 4px 0;" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button> | |
147 | + </label> | |
148 | + </div> | |
149 | + </input> | |
150 | + <validation-messages field="signupForm.user_terms_accepted"/> | |
151 | + </div> | |
152 | + <div class="form-group"> | |
153 | + <div id="serpro_captcha" class="captcha"> | |
165 | 154 | </div> |
166 | - <div class="form-group"> | |
167 | - <button class="btn btn-lg btn-block btn-submit" ng-class=" {'disabled' : !pageSignin.signup.user_terms_accepted }" type="submit">Cadastrar</button> | |
155 | + <div class="captcha"> | |
156 | + Digite os caracteres acima: | |
168 | 157 | </div> |
169 | - </form> | |
170 | - </div> | |
158 | + <div class="captcha"> | |
159 | + <input type="text" name="captcha_text" id="captcha_text" aria-label="Escreva os caracteres do captcha aqui" ng-model="pageSignin.signup.captcha_text"> | |
160 | + </div> | |
161 | + </div> | |
162 | + <div class="form-group"> | |
163 | + <button class="btn btn-lg btn-block btn-submit" ng-class=" {'disabled' : !pageSignin.signup.user_terms_accepted }" type="submit">Cadastrar</button> | |
164 | + </div> | |
165 | + </form> | |
171 | 166 | </div> |
172 | 167 | </div> |
173 | 168 | </div> | ... | ... |
src/app/pages/footer/footer.html
... | ... | @@ -1,10 +0,0 @@ |
1 | -<div id="footer"> | |
2 | - <div class="container"> | |
3 | - <div class="row"> | |
4 | - <div class="col-xs-12 text-center"> | |
5 | - <a id="termos-de-uso" ui-sref="termos-de-uso">Termos de uso</a> | |
6 | - <a href="#header" style="position:absolute;right:0;top:-10px;" ng-click="scrollTo('#header')">Voltar para o topo</a> | |
7 | - </div> | |
8 | - </div> | |
9 | - </div> | |
10 | -</div> |
src/app/pages/footer/footer.scss
... | ... | @@ -1,21 +0,0 @@ |
1 | -$barra-theme: ("green": #00420c, "yellow": #2c66ce, "blue": #0042b1); | |
2 | - | |
3 | -#footer-brasil { | |
4 | - background: none repeat scroll 0% 0% map-get($barra-theme, "blue"); | |
5 | - padding: 1em 0px; | |
6 | - max-width: 100%; | |
7 | -} | |
8 | - | |
9 | -#footer { | |
10 | - padding: 20px 0; | |
11 | - a { | |
12 | - margin: 10px auto; | |
13 | - } | |
14 | - | |
15 | - .contraste & { | |
16 | - background-color: #000; | |
17 | - a { | |
18 | - color: #fff; | |
19 | - } | |
20 | - } | |
21 | -} |
src/app/pages/header/header.html
... | ... | @@ -1,20 +0,0 @@ |
1 | -<header id="header" class="container"> | |
2 | - | |
3 | - <div class="row hidden-xs"> | |
4 | - <div class="col-sm-12"> | |
5 | - <auth-user></auth-user> | |
6 | - </div> | |
7 | - </div> | |
8 | - | |
9 | - <div class="row"> | |
10 | - <div class="col-sm-12"> | |
11 | - <app-navbar></app-navbar> | |
12 | - </div> | |
13 | - </div> | |
14 | - | |
15 | - <!-- <div class="row"> | |
16 | - <div class="col-sm-12"> | |
17 | - <div ncy-breadcrumb></div> | |
18 | - </div> | |
19 | - </div> --> | |
20 | -</header> |
src/app/pages/header/header.scss
src/app/pages/programas/programa.controller.js
... | ... | @@ -76,6 +76,7 @@ |
76 | 76 | vm.loadingTopProposals = true; |
77 | 77 | vm.DialogaService.getProposalsByTopicId(vm.article.id, {}, function(data) { |
78 | 78 | vm.proposals = data.articles; |
79 | + vm.proposalsTopFive = vm.proposals.slice(0, 5); | |
79 | 80 | vm.proposalsTopRated = vm.proposals.slice(0, 3); |
80 | 81 | vm.loadingTopProposals = false; |
81 | 82 | }, function(error) { | ... | ... |
src/app/pages/programas/programa.html
... | ... | @@ -111,7 +111,7 @@ |
111 | 111 | </div> |
112 | 112 | </section> |
113 | 113 | |
114 | - <section id="section-proposal-list" class="proposal-extended-section" style="display:none;" ng-if="pagePrograma.proposals && pagePrograma.proposals.length > 0"> | |
114 | + <section id="section-proposal-list" class="proposal-extended-section" style="display:none;" ng-if="pagePrograma.proposalsTopFive && pagePrograma.proposalsTopFive.length > 0"> | |
115 | 115 | <div class="container"> |
116 | 116 | <div class="proposal-extended-section-header"> |
117 | 117 | <h3 class="color-theme-fg">Resultados de propostas mais votadas</h3> |
... | ... | @@ -120,7 +120,7 @@ |
120 | 120 | </button> |
121 | 121 | </div> |
122 | 122 | <div class="proposal-extended-section-content"> |
123 | - <proposal-list proposals="pagePrograma.proposals"></proposal-list> | |
123 | + <proposal-list proposals="pagePrograma.proposalsTopFive"></proposal-list> | |
124 | 124 | </div> |
125 | 125 | </div> |
126 | 126 | </section> | ... | ... |
src/app/pages/propostas/ranking.html
... | ... | @@ -78,7 +78,7 @@ |
78 | 78 | |
79 | 79 | <div class="row"> |
80 | 80 | <div class="col-sm-12" ng-if="pagePropostas.proposals"> |
81 | - <proposal-list proposals="pagePropostas.filtredProposals"></proposal-list> | |
81 | + <proposal-list proposals="pagePropostas.filtredProposals" per-page="10"></proposal-list> | |
82 | 82 | </div> |
83 | 83 | <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals"> |
84 | 84 | <div class="alert alert-info" role="alert"> | ... | ... |
src/assets/images/icons/sprite.png
107 KB
src/index.html
... | ... | @@ -37,7 +37,8 @@ |
37 | 37 | <p class="browsehappy">Você está usando um navegador <strong>antigo</strong>. Por favor, <a href="http://browsehappy.com/">atualize o navegador</a> para melhorar a experiência de uso.</p> |
38 | 38 | <![endif]--> |
39 | 39 | |
40 | - <div ui-view="header"></div> | |
40 | + <app-header></app-header> | |
41 | + | |
41 | 42 | <div id="content" ui-view="main"></div> |
42 | 43 | <div ui-view="footer"></div> |
43 | 44 | |
... | ... | @@ -59,5 +60,6 @@ |
59 | 60 | <!-- endinject --> |
60 | 61 | <!-- endbuild --> |
61 | 62 | <script defer="defer" src="http://barra.brasil.gov.br/barra.js" type="text/javascript"></script> |
63 | + <script defer="defer" src="http://captcha2.servicoscorporativos.serpro.gov.br/js/captcha.serpro.gov.br.js"></script> | |
62 | 64 | </body> |
63 | 65 | </html> | ... | ... |