Commit b3f250f454a9a1238e5ca425af88441aaa3963d6
1 parent
9d6d9600
Exists in
master
and in
8 other branches
Update: program page - sync (3)
Showing
12 changed files
with
160 additions
and
120 deletions
Show diff stats
src/app/components/auth/auth.service.js
| @@ -110,26 +110,26 @@ | @@ -110,26 +110,26 @@ | ||
| 110 | }; | 110 | }; |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | - /** @ngInject */ | ||
| 114 | - function AuthResolver($q, $rootScope, $state){ | ||
| 115 | - return { | ||
| 116 | - resolve: function () { | ||
| 117 | - var deferred = $q.defer(); | ||
| 118 | - var unwatch = $rootScope.$watch('currentUser', function (currentUser) { | ||
| 119 | - if (angular.isDefined(currentUser)) { | ||
| 120 | - if (currentUser) { | ||
| 121 | - deferred.resolve(currentUser); | ||
| 122 | - } else { | ||
| 123 | - deferred.reject(); | ||
| 124 | - // TODO: too many responsibilities? | ||
| 125 | - $state.go('login'); | ||
| 126 | - } | ||
| 127 | - unwatch(); | ||
| 128 | - } | ||
| 129 | - }); | ||
| 130 | - return deferred.promise; | ||
| 131 | - } | ||
| 132 | - }; | ||
| 133 | - } | 113 | + // /** @ngInject */ |
| 114 | + // function AuthResolver($q, $rootScope, $state){ | ||
| 115 | + // return { | ||
| 116 | + // resolve: function () { | ||
| 117 | + // var deferred = $q.defer(); | ||
| 118 | + // var unwatch = $rootScope.$watch('currentUser', function (currentUser) { | ||
| 119 | + // if (angular.isDefined(currentUser)) { | ||
| 120 | + // if (currentUser) { | ||
| 121 | + // deferred.resolve(currentUser); | ||
| 122 | + // } else { | ||
| 123 | + // deferred.reject(); | ||
| 124 | + // // TODO: too many responsibilities? | ||
| 125 | + // $state.go('login'); | ||
| 126 | + // } | ||
| 127 | + // unwatch(); | ||
| 128 | + // } | ||
| 129 | + // }); | ||
| 130 | + // return deferred.promise; | ||
| 131 | + // } | ||
| 132 | + // }; | ||
| 133 | + // } | ||
| 134 | 134 | ||
| 135 | })(); | 135 | })(); |
src/app/components/breadcrumb/breadcrumb.scss
src/app/components/navbar/navbar.scss
src/app/components/proposal-ranking/proposal-ranking-list.scss
| @@ -61,6 +61,22 @@ | @@ -61,6 +61,22 @@ | ||
| 61 | } | 61 | } |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | + .abstract { | ||
| 65 | + color: #393939; | ||
| 66 | + font-size: 18px; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + .row-actions { | ||
| 70 | + padding-top: 20px; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + .btn-rate { | ||
| 74 | + padding: 0; | ||
| 75 | + font-size: 20px; | ||
| 76 | + font-weight: bold; | ||
| 77 | + text-decoration: blink; | ||
| 78 | + } | ||
| 79 | + | ||
| 64 | // override bootstrap | 80 | // override bootstrap |
| 65 | .table-striped > tbody > tr:nth-of-type(odd) { | 81 | .table-striped > tbody > tr:nth-of-type(odd) { |
| 66 | // impar | 82 | // impar |
src/app/components/proposal-ranking/proposal-ranking.directive.js
| @@ -27,11 +27,12 @@ | @@ -27,11 +27,12 @@ | ||
| 27 | var vm = this; | 27 | var vm = this; |
| 28 | 28 | ||
| 29 | vm.activeIndex = 1; | 29 | vm.activeIndex = 1; |
| 30 | - vm.attachedPopover = false; | ||
| 31 | vm.loading = false; | 30 | vm.loading = false; |
| 32 | 31 | ||
| 33 | - if(!angular.isNumber(vm.limit)){ | 32 | + if(angular.isDefined(vm.limit) && angular.isString(vm.limit)){ |
| 34 | vm.limit = parseInt(vm.limit); | 33 | vm.limit = parseInt(vm.limit); |
| 34 | + }else{ | ||
| 35 | + vm.limit = 3; | ||
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | vm.loadData(); | 38 | vm.loadData(); |
| @@ -46,13 +47,45 @@ | @@ -46,13 +47,45 @@ | ||
| 46 | // simulate delay | 47 | // simulate delay |
| 47 | vm.$timeout(function(){ | 48 | vm.$timeout(function(){ |
| 48 | vm.loading = false; | 49 | vm.loading = false; |
| 50 | + | ||
| 51 | + // Fake Data | ||
| 52 | + // vm.proposals = vm.ArticleService.getProposals(); | ||
| 53 | + vm.proposals = [{ | ||
| 54 | + id: 4159, | ||
| 55 | + abstract: 'Ut odio unde porro in. Aut fuga magni adipisci. Recusandae ipsum distinctio omnis ut illum.', | ||
| 56 | + effective_support: 0.1572052401746725, | ||
| 57 | + hits: 4159, | ||
| 58 | + votes_against: 3779, | ||
| 59 | + votes_for: 1780 | ||
| 60 | + },{ | ||
| 61 | + id: 935, | ||
| 62 | + abstract: 'Magni sunt ut molestiae. A porro et quod saepe placeat amet nihil. Aut ut id voluptatem doloribus quia.', | ||
| 63 | + effective_support: 0.1572052401746725, | ||
| 64 | + hits: 8602, | ||
| 65 | + votes_against: 7005, | ||
| 66 | + votes_for: 8728 | ||
| 67 | + },{ | ||
| 68 | + id: 1008, | ||
| 69 | + abstract: 'Cum quas assumenda nihil delectus eos. Minus fugit velit voluptatem nisi nam esse ut id.', | ||
| 70 | + effective_support: 0.1572052401746725, | ||
| 71 | + hits: 9181, | ||
| 72 | + votes_against: 612, | ||
| 73 | + votes_for: 1786 | ||
| 74 | + }]; | ||
| 75 | + | ||
| 76 | + if(vm.display === 'list'){ | ||
| 77 | + // wait until DOM be created | ||
| 78 | + vm.$timeout(function(){ | ||
| 79 | + attachPopover.call(vm); | ||
| 80 | + }, 20); | ||
| 81 | + } | ||
| 49 | }, 2000); | 82 | }, 2000); |
| 50 | }; | 83 | }; |
| 51 | 84 | ||
| 52 | ProposalRankingController.prototype.switchProposal = function (index) { | 85 | ProposalRankingController.prototype.switchProposal = function (index) { |
| 53 | var vm = this; | 86 | var vm = this; |
| 54 | 87 | ||
| 55 | - if(index > 0 && index <= limit) { | 88 | + if(index > 0 && index <= vm.limit) { |
| 56 | vm.activeIndex = index; | 89 | vm.activeIndex = index; |
| 57 | }else{ | 90 | }else{ |
| 58 | vm.$log.warn('[switchProposal] "index" not handled:', index); | 91 | vm.$log.warn('[switchProposal] "index" not handled:', index); |
| @@ -66,28 +99,18 @@ | @@ -66,28 +99,18 @@ | ||
| 66 | vm.$scope.$emit('see-proposals'); | 99 | vm.$scope.$emit('see-proposals'); |
| 67 | }; | 100 | }; |
| 68 | 101 | ||
| 69 | - ProposalRankingController.prototype.showPopover = function ($event) { | 102 | + function attachPopover(){ |
| 70 | var vm = this; | 103 | var vm = this; |
| 71 | 104 | ||
| 72 | - $event.stopPropagation(); | ||
| 73 | - | ||
| 74 | - var target = $event.target; | ||
| 75 | - var elPopover = angular.element(target); | ||
| 76 | - | ||
| 77 | - if(!vm.attachedPopover){ | ||
| 78 | - elPopover.popover({ | ||
| 79 | - html: true, | ||
| 80 | - placement: 'top', | ||
| 81 | - animation: true, | ||
| 82 | - title: 'Regra de posição das propostas', | ||
| 83 | - content: '<p>É calculada pelo saldo de interações das propostas (curtidas - não curtidas) dividido pela diferença de exibições entre elas.</p><p>O objetivo dessa correção é compensar o saldo de interações e a diferença de exibições das propostas que não tiveram muitas oportunidades de visualização ou das propostas que tiveram mais oportunidades de visualização que a média.</p><p>Com essa correção, é possível comparar propostas que entraram em diferentes momentos, durante todo o período da consulta.</p>' | ||
| 84 | - }); | ||
| 85 | - vm.attachedPopover = true; | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - | ||
| 89 | - elPopover.popover('toggle'); | ||
| 90 | - }; | 105 | + vm.popover = angular.element(vm.$element.find('.btn-question')); |
| 106 | + vm.popover.popover({ | ||
| 107 | + html: true, | ||
| 108 | + placement: 'top', | ||
| 109 | + animation: true, | ||
| 110 | + title: 'Regra de posição das propostas', | ||
| 111 | + content: '<p>É calculada pelo saldo de interações das propostas (curtidas - não curtidas) dividido pela diferença de exibições entre elas.</p><p>O objetivo dessa correção é compensar o saldo de interações e a diferença de exibições das propostas que não tiveram muitas oportunidades de visualização ou das propostas que tiveram mais oportunidades de visualização que a média.</p><p>Com essa correção, é possível comparar propostas que entraram em diferentes momentos, durante todo o período da consulta.</p>' | ||
| 112 | + }); | ||
| 113 | + } | ||
| 91 | 114 | ||
| 92 | var directive = { | 115 | var directive = { |
| 93 | restrict: 'E', | 116 | restrict: 'E', |
src/app/components/proposal-ranking/proposal-ranking.html
| 1 | -<div class="proposal-ranking"> | ||
| 2 | - | 1 | +<div class="proposal-ranking contraste-box"> |
| 3 | <div class="proposal-ranking--carousel" ng-if="vm.display==='carousel'"> | 2 | <div class="proposal-ranking--carousel" ng-if="vm.display==='carousel'"> |
| 4 | <div class="proposal-ranking--carousel-top color-theme-bg"> | 3 | <div class="proposal-ranking--carousel-top color-theme-bg"> |
| 5 | <div class="proposal-ranking--carousel-position"> | 4 | <div class="proposal-ranking--carousel-position"> |
| @@ -33,50 +32,42 @@ | @@ -33,50 +32,42 @@ | ||
| 33 | <div class="table-responsive" ng-if="vm.loading"> | 32 | <div class="table-responsive" ng-if="vm.loading"> |
| 34 | <div class="table-responsive">Carregando...</div> | 33 | <div class="table-responsive">Carregando...</div> |
| 35 | </div> | 34 | </div> |
| 36 | - <div class="table-responsive" ng-if="!vm.loading"> | 35 | + <div class="table-responsive" ng-if="!vm.loading && vm.proposals"> |
| 37 | <table class="table table-striped"> | 36 | <table class="table table-striped"> |
| 38 | <thead> | 37 | <thead> |
| 39 | <tr> | 38 | <tr> |
| 40 | <th> | 39 | <th> |
| 41 | Colocação | 40 | Colocação |
| 42 | - <button type="button" class="btn btn-link btn-question" ng-click="vm.showPopover($event)">?</button> | 41 | + <button type="button" class="btn btn-link btn-question">?</button> |
| 43 | </th> | 42 | </th> |
| 44 | <th>123 PROPOSTAS</th> | 43 | <th>123 PROPOSTAS</th> |
| 45 | </tr> | 44 | </tr> |
| 46 | </thead> | 45 | </thead> |
| 47 | <tbody> | 46 | <tbody> |
| 48 | - <tr> | 47 | + <tr ng-repeat="proposal in vm.proposals"> |
| 48 | + | ||
| 49 | <td class="color-theme-fg"> | 49 | <td class="color-theme-fg"> |
| 50 | - <span class="position">1º</span> | 50 | + <span class="position">{{::($index+1)}}º</span> |
| 51 | </td> | 51 | </td> |
| 52 | <td> | 52 | <td> |
| 53 | <div class="row"> | 53 | <div class="row"> |
| 54 | - <div class="col-xs-12">Conteúdo</div> | ||
| 55 | - <div class="col-md-6"> | ||
| 56 | - <button type="button" class="btn btn-link"> | 54 | + <div class="col-xs-12"> |
| 55 | + <span class="abstract">{{proposal.abstract}}</span> | ||
| 56 | + </div> | ||
| 57 | + </div> | ||
| 58 | + <div class="row row-actions"> | ||
| 59 | + <div class="col-md-9"> | ||
| 60 | + <button type="button" class="btn btn-link btn-rate color-theme-common-fg"> | ||
| 57 | Avalie esta proposta | 61 | Avalie esta proposta |
| 58 | <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> | 62 | <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> |
| 59 | - <!-- <span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span> --> | ||
| 60 | </button> | 63 | </button> |
| 61 | </div> | 64 | </div> |
| 62 | - <div class="col-md-6"> | ||
| 63 | - <proposal-ranking views="'1'"></proposal-ranking> | 65 | + <div class="col-md-3"> |
| 66 | + <proposal-stats views="{{::proposal.hits}}" up="{{::proposal.votes_for}}" down="{{::proposal.votes_against}}"></proposal-stats> | ||
| 64 | </div> | 67 | </div> |
| 65 | </div> | 68 | </div> |
| 66 | </td> | 69 | </td> |
| 67 | </tr> | 70 | </tr> |
| 68 | - <tr> | ||
| 69 | - <td class="color-theme-fg"> | ||
| 70 | - <span class="position">2º</span> | ||
| 71 | - </td> | ||
| 72 | - <td> | ||
| 73 | - <div class="row"> | ||
| 74 | - <div class="col-xs-12">Conteúdo</div> | ||
| 75 | - <div class="col-md-6">Avalie esta proposta</div> | ||
| 76 | - <div class="col-md-6">[STATS]</div> | ||
| 77 | - </div> | ||
| 78 | - </td> | ||
| 79 | - </tr> | ||
| 80 | </tbody> | 71 | </tbody> |
| 81 | </table> | 72 | </table> |
| 82 | </div> | 73 | </div> |
src/app/components/proposal-stats/proposal-stats.directive.js
| @@ -8,46 +8,12 @@ | @@ -8,46 +8,12 @@ | ||
| 8 | /** @ngInject */ | 8 | /** @ngInject */ |
| 9 | function proposalStats() { | 9 | function proposalStats() { |
| 10 | 10 | ||
| 11 | - /** @ngInject */ | ||
| 12 | - function ProposalStatsController($log) { | ||
| 13 | - $log.debug('ProposalStatsController'); | ||
| 14 | - | ||
| 15 | - var vm = this; | ||
| 16 | - vm.$log = $log; | ||
| 17 | - | ||
| 18 | - vm.init(); | ||
| 19 | - } | ||
| 20 | - | ||
| 21 | - ProposalStatsController.prototype.init = function () { | ||
| 22 | - // initial values | ||
| 23 | - var vm = this; | ||
| 24 | - | ||
| 25 | - vm.views = vm.views ? parseInt(vm.views) : 0; | ||
| 26 | - vm.up = vm.up ? parseInt(vm.up) : 0; | ||
| 27 | - vm.down = vm.down ? parseInt(vm.down) : 0; | ||
| 28 | - | ||
| 29 | - vm.loadData(); | ||
| 30 | - }; | ||
| 31 | - | ||
| 32 | - ProposalStatsController.prototype.loadData = function () { | ||
| 33 | - // async values | ||
| 34 | - // var vm = this; | ||
| 35 | - }; | ||
| 36 | - | ||
| 37 | var directive = { | 11 | var directive = { |
| 38 | restrict: 'E', | 12 | restrict: 'E', |
| 39 | - templateUrl: 'app/components/proposal-stats/proposal-stats.html', | ||
| 40 | - scope: { | ||
| 41 | - views: '&', | ||
| 42 | - up: '&', | ||
| 43 | - down: '&' | ||
| 44 | - }, | ||
| 45 | - controller: ProposalStatsController, | ||
| 46 | - controllerAs: 'vm', | ||
| 47 | - bindToController: true | 13 | + templateUrl: 'app/components/proposal-stats/proposal-stats.html' |
| 14 | + // no scope. Use the parent scope. | ||
| 48 | }; | 15 | }; |
| 49 | 16 | ||
| 50 | - | ||
| 51 | return directive; | 17 | return directive; |
| 52 | } | 18 | } |
| 53 | 19 |
src/app/components/proposal-stats/proposal-stats.html
| 1 | -<ul class="list-inline"> | ||
| 2 | - <li> | ||
| 3 | - <span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> | ||
| 4 | - <span>{{vm.views}}</span> | ||
| 5 | - </li> | ||
| 6 | - <li> | ||
| 7 | - <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | ||
| 8 | - <span>{{vm.up}}</span> | ||
| 9 | - </li> | ||
| 10 | - <li> | ||
| 11 | - <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | ||
| 12 | - <span>{{vm.down}}</span> | ||
| 13 | - </li> | ||
| 14 | -</ul> | 1 | +<div class="proposal-stats"> |
| 2 | + <ul class="list-inline"> | ||
| 3 | + <li class="proposal-stats-views"> | ||
| 4 | + <span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> | ||
| 5 | + <span>{{proposal.hits}}</span> | ||
| 6 | + </li> | ||
| 7 | + <li class="proposal-stats-up"> | ||
| 8 | + <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | ||
| 9 | + <span>{{proposal.votes_for}}</span> | ||
| 10 | + </li> | ||
| 11 | + <li class="proposal-stats-down"> | ||
| 12 | + <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | ||
| 13 | + <span>{{proposal.votes_against}}</span> | ||
| 14 | + </li> | ||
| 15 | + </ul> | ||
| 16 | +</div> |
src/app/index.scss
| @@ -142,6 +142,9 @@ body { | @@ -142,6 +142,9 @@ body { | ||
| 142 | .#{$category} { | 142 | .#{$category} { |
| 143 | .color-theme-fg { color: $color; } | 143 | .color-theme-fg { color: $color; } |
| 144 | .color-theme-bg { background-color: $color;} | 144 | .color-theme-bg { background-color: $color;} |
| 145 | + | ||
| 146 | + .contraste & .color-theme-fg { color: #fff; } | ||
| 147 | + .contraste & .color-theme-bg { background-color: #000;} | ||
| 145 | } | 148 | } |
| 146 | } | 149 | } |
| 147 | 150 | ||
| @@ -149,6 +152,13 @@ $common-color: #5E739E; | @@ -149,6 +152,13 @@ $common-color: #5E739E; | ||
| 149 | .color-theme-common-fg {color: $common-color; } | 152 | .color-theme-common-fg {color: $common-color; } |
| 150 | .color-theme-common-bg {background-color: $common-color; } | 153 | .color-theme-common-bg {background-color: $common-color; } |
| 151 | 154 | ||
| 155 | +// Contraste | ||
| 156 | +.contraste { | ||
| 157 | + .color-theme-common-fg {color: #fff; } | ||
| 158 | + .color-theme-common-bg {background-color: #000; } | ||
| 159 | + .contraste-box {background-color: #000; border: 1px solid #fff;} | ||
| 160 | +} | ||
| 161 | + | ||
| 152 | 162 | ||
| 153 | // Hack to fix "Barra do Brasil" | 163 | // Hack to fix "Barra do Brasil" |
| 154 | #barra-brasil .brasil-flag { | 164 | #barra-brasil .brasil-flag { |
src/app/pages/programas/programa.html
| @@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
| 25 | <h1 class="program-preview--title color-theme-fg">{{::pageProgramaContent.article.title}}</h1> | 25 | <h1 class="program-preview--title color-theme-fg">{{::pageProgramaContent.article.title}}</h1> |
| 26 | </div> | 26 | </div> |
| 27 | <div class="col-md-8"> | 27 | <div class="col-md-8"> |
| 28 | - <div class="program-preview--box"> | 28 | + <div class="program-preview--box contraste-box"> |
| 29 | <div class="program-preview--banner" ng-style="{'background-image':'url( {{::pageProgramaContent.banner.src}} )'}"></div> | 29 | <div class="program-preview--banner" ng-style="{'background-image':'url( {{::pageProgramaContent.banner.src}} )'}"></div> |
| 30 | <div class="program-preview--box--content-wrapper"> | 30 | <div class="program-preview--box--content-wrapper"> |
| 31 | <div class="program-preview--icon icon-wrapper-rounded color-theme-bg" ng-class="pageProgramaContent.category.slug"> | 31 | <div class="program-preview--icon icon-wrapper-rounded color-theme-bg" ng-class="pageProgramaContent.category.slug"> |
src/app/pages/programas/programas.scss
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | 11 | ||
| 12 | .program-preview--box { | 12 | .program-preview--box { |
| 13 | position: relative; | 13 | position: relative; |
| 14 | - background: #f1f1f1; | 14 | + background-color: #f1f1f1; |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | .program-preview--banner { | 17 | .program-preview--banner { |
| @@ -40,6 +40,10 @@ | @@ -40,6 +40,10 @@ | ||
| 40 | left: -6px; | 40 | left: -6px; |
| 41 | transform: scale($icon-scale); | 41 | transform: scale($icon-scale); |
| 42 | } | 42 | } |
| 43 | + | ||
| 44 | + .contraste & { | ||
| 45 | + border: 1px solid #fff; | ||
| 46 | + } | ||
| 43 | } | 47 | } |
| 44 | 48 | ||
| 45 | .program-preview--box--content-wrapper { | 49 | .program-preview--box--content-wrapper { |