Commit 460eb69d56796e134f016ab86c3b39af2b233932
1 parent
b91f2ae9
Exists in
master
and in
8 other branches
sync
Showing
12 changed files
with
109 additions
and
115 deletions
Show diff stats
src/app/components/article-service/article.service.js
... | ... | @@ -121,7 +121,7 @@ |
121 | 121 | var url = service.apiArticles + topicId + '/children'; |
122 | 122 | |
123 | 123 | var paramsExtended = angular.extend({ |
124 | - 'fields[]': ['id', 'title', 'abstract', 'children', 'children_count'], | |
124 | + 'fields[]': ['id', 'title', 'abstract', 'children', 'children_count', 'ranking_position', 'hits', 'votes_for', 'votes_against'], | |
125 | 125 | 'limit':'20', |
126 | 126 | 'page':'1', |
127 | 127 | 'content_type':'ProposalsDiscussionPlugin::Proposal' | ... | ... |
src/app/components/category-list/category-list.directive.js
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | function categoryList() { |
10 | 10 | |
11 | 11 | /** @ngInject */ |
12 | - function CategoryListController($rootScope, $location, $log) { | |
12 | + function CategoryListController($rootScope, $element, $log) { | |
13 | 13 | $log.debug('CategoryListController'); |
14 | 14 | |
15 | 15 | // alias |
... | ... | @@ -17,7 +17,7 @@ |
17 | 17 | |
18 | 18 | // dependencies |
19 | 19 | vm.$rootScope = $rootScope; |
20 | - vm.$location = $location; | |
20 | + vm.$element = $element; | |
21 | 21 | vm.$log = $log; |
22 | 22 | |
23 | 23 | // initialization |
... | ... | @@ -25,7 +25,11 @@ |
25 | 25 | } |
26 | 26 | |
27 | 27 | CategoryListController.prototype.init = function() { |
28 | - // var vm = this; | |
28 | + var vm = this; | |
29 | + | |
30 | + if(!vm.isCollapsed){ | |
31 | + vm.isCollapsed = false; | |
32 | + } | |
29 | 33 | }; |
30 | 34 | |
31 | 35 | CategoryListController.prototype.selectCategory = function(category, $event) { |
... | ... | @@ -45,6 +49,17 @@ |
45 | 49 | vm.$rootScope.$broadcast('change-selectedCategory', vm.selectedCategory); |
46 | 50 | }; |
47 | 51 | |
52 | + | |
53 | + CategoryListController.prototype.toogleList = function() { | |
54 | + var vm = this; | |
55 | + | |
56 | + if(!vm._listGroup){ | |
57 | + vm._listGroup = vm.$element.find('.list-group'); | |
58 | + } | |
59 | + | |
60 | + vm._listGroup.slideToggle(); | |
61 | + }; | |
62 | + | |
48 | 63 | var directive = { |
49 | 64 | restrict: 'E', |
50 | 65 | templateUrl: 'app/components/category-list/category-list.html', |
... | ... | @@ -53,7 +68,7 @@ |
53 | 68 | selectedCategory: '@' |
54 | 69 | }, |
55 | 70 | controller: CategoryListController, |
56 | - controllerAs: 'categoryListCtrl', | |
71 | + controllerAs: 'vm', | |
57 | 72 | bindToController: true |
58 | 73 | }; |
59 | 74 | ... | ... |
src/app/components/category-list/category-list.html
1 | 1 | <div class="category-list"> |
2 | 2 | <nav class="navigation"> |
3 | - <h3 class="category-list--title"><b>Programas</b> por Tema</h3> | |
4 | - <div class="list-group category-list" ng-class="categoryListCtrl.selectedCategory.slug"> | |
3 | + <h3 class="category-list--title" ng-click="vm.toogleList()"> | |
4 | + <span class="hidden-xs"><b>Programas</b> por Tema</span> | |
5 | + <span class="visible-xs"><b>Filtrar</b> por Tema <span class="glyphicon glyphicon-filter pull-right"></span></span> | |
6 | + </h3> | |
7 | + | |
8 | + <!-- <div class="list-group ng-hide" ng-show="!vm.isCollapsed" ng-class="vm.selectedCategory.slug"> --> | |
9 | + <div class="list-group" ng-class="vm.selectedCategory.slug"> | |
5 | 10 | <button type="button" class="list-group-item category-list--item" |
6 | - ng-repeat="category in categoryListCtrl.categories" | |
7 | - ng-class="{active: categoryListCtrl.selectedCategory.slug === category.slug}" | |
8 | - ng-click="categoryListCtrl.selectCategory(category, $event)"> | |
11 | + ng-repeat="category in vm.categories" | |
12 | + ng-class="{active: vm.selectedCategory.slug === category.slug}" | |
13 | + ng-click="vm.selectCategory(category, $event)"> | |
9 | 14 | |
10 | 15 | <span class="category-list--icon-circle" aria-hidden="true" ng-class="category.slug"></span> |
11 | 16 | <span class="category-list--icon icon" aria-hidden="true" ng-class="'icon-tema-' + category.slug"></span> |
12 | 17 | <span class="category-list--label">{{::category.name}}</span> |
13 | - <span class="category-list--icon--right glyphicon glyphicon-chevron-right"></span> | |
18 | + <span class="category-list--icon--right glyphicon glyphicon-chevron-right hidden-xs"></span> | |
14 | 19 | </button> |
15 | 20 | </div> |
16 | 21 | </nav> | ... | ... |
src/app/components/category-list/category-list.scss
1 | 1 | .category-list { |
2 | - .category-list--title { | |
2 | + &--title { | |
3 | 3 | color: #ffffff; |
4 | 4 | font-size: 16px; |
5 | 5 | margin: 0; |
... | ... | @@ -8,10 +8,7 @@ |
8 | 8 | border-top-left-radius: 5px; |
9 | 9 | border-top-right-radius: 5px; |
10 | 10 | overflow: hidden; |
11 | - } | |
12 | - | |
13 | - | |
14 | - .category-list--group { | |
11 | + cursor: pointer; | |
15 | 12 | } |
16 | 13 | |
17 | 14 | .category-list--item { |
... | ... | @@ -23,6 +20,8 @@ |
23 | 20 | overflow: hidden; |
24 | 21 | } |
25 | 22 | |
23 | + | |
24 | + | |
26 | 25 | .category-list--label { |
27 | 26 | margin-left: 70px; |
28 | 27 | margin-right: 30px; |
... | ... | @@ -93,19 +92,25 @@ |
93 | 92 | transform: scale(1.4); |
94 | 93 | } |
95 | 94 | |
95 | + .list-group { | |
96 | + | |
97 | + -webkit-transition: -webkit-transform .3s ease-in-out; | |
98 | + -moz-transition: -moz-transform .3s ease-in-out; | |
99 | + -o-transition: -o-transform .3s ease-in-out; | |
100 | + transition: transform .3s ease-in-out; | |
101 | + | |
102 | + opacity: 1; | |
103 | + | |
104 | + &.ng-hide { | |
105 | + opacity: 0; | |
106 | + // height: 0; | |
107 | + // line-height: 0; | |
108 | + } | |
109 | + } | |
110 | + | |
96 | 111 | .list-group-item.active, |
97 | 112 | .list-group-item.active:hover, |
98 | 113 | .list-group-item.active:focus { |
99 | 114 | background-color: #f5f5f5; |
100 | 115 | } |
101 | - | |
102 | - // @each $category, $color in $categories { | |
103 | - // &.#{$category} { | |
104 | - // .list-group-item.active, | |
105 | - // .list-group-item.active:hover, | |
106 | - // .list-group-item.active:focus { | |
107 | - // background-color: $color; | |
108 | - // } | |
109 | - // } | |
110 | - // } | |
111 | 116 | } | ... | ... |
src/app/components/event-list/event-list.scss
... | ... | @@ -55,7 +55,12 @@ |
55 | 55 | text-align: center; |
56 | 56 | line-height: 20px; |
57 | 57 | cursor: pointer; |
58 | - transition: .3s linear all; | |
58 | + | |
59 | + -webkit-transition: -webkit-transform 0.3s linear all; | |
60 | + -moz-transition: -moz-transform 0.3s linear all; | |
61 | + -o-transition: -o-transform 0.3s linear all; | |
62 | + transition: transform 0.3s linear all; | |
63 | + | |
59 | 64 | overflow: hidden; |
60 | 65 | z-index: 100; |
61 | 66 | ... | ... |
src/app/components/proposal-carousel/proposal-carousel.scss
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | background-color: #f1f1f1; |
3 | 3 | border-radius: 5px; |
4 | 4 | overflow: hidden; |
5 | + margin-bottom: 30px; | |
5 | 6 | |
6 | 7 | &-top { |
7 | 8 | position: relative; |
... | ... | @@ -57,21 +58,20 @@ |
57 | 58 | font-weight: bold; |
58 | 59 | line-height: 116px; |
59 | 60 | z-index: 1; |
60 | - | |
61 | 61 | } |
62 | 62 | } |
63 | 63 | |
64 | 64 | &-bottom { |
65 | 65 | position: relative; |
66 | 66 | color: #fff; |
67 | - padding: 10px; | |
67 | + padding: 15px 30px; | |
68 | 68 | font-weight: bold; |
69 | 69 | cursor: pointer; |
70 | 70 | z-index: 10; |
71 | 71 | |
72 | 72 | &-icon { |
73 | 73 | position: absolute; |
74 | - top: 10px; | |
74 | + top: 15px; | |
75 | 75 | right: 15px; |
76 | 76 | |
77 | 77 | .glyphicon { | ... | ... |
src/app/components/proposal-related/proposal-related.directive.js
... | ... | @@ -9,14 +9,10 @@ |
9 | 9 | function proposalRelated() { |
10 | 10 | |
11 | 11 | /** @ngInject */ |
12 | - function ProposalRelatedController(ArticleService, $scope, $element, $timeout, $log) { | |
12 | + function ProposalRelatedController($log) { | |
13 | 13 | $log.debug('ProposalRelatedController'); |
14 | 14 | |
15 | 15 | var vm = this; |
16 | - vm.ArticleService = ArticleService; | |
17 | - vm.$scope = $scope; | |
18 | - vm.$element = $element; | |
19 | - vm.$timeout = $timeout; | |
20 | 16 | vm.$log = $log; |
21 | 17 | |
22 | 18 | vm.init(); |
... | ... | @@ -24,69 +20,16 @@ |
24 | 20 | |
25 | 21 | ProposalRelatedController.prototype.init = function () { |
26 | 22 | // initial values |
27 | - var vm = this; | |
28 | - | |
29 | - vm.activeIndex = 1; | |
30 | - vm.loading = false; | |
31 | - | |
32 | - if(angular.isDefined(vm.limit) && angular.isString(vm.limit)){ | |
33 | - vm.limit = parseInt(vm.limit); | |
34 | - }else{ | |
35 | - vm.limit = 3; | |
36 | - } | |
37 | - | |
38 | - vm.loadData(); | |
39 | - }; | |
40 | - | |
41 | - ProposalRelatedController.prototype.loadData = function () { | |
42 | - // async values | |
43 | - var vm = this; | |
44 | - | |
45 | - vm.loading = true; | |
46 | - | |
47 | - // simulate delay | |
48 | - vm.$timeout(function(){ | |
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 | - } | |
82 | - }, 2000); | |
23 | + // var vm = this; | |
83 | 24 | }; |
84 | 25 | |
85 | 26 | var directive = { |
86 | 27 | restrict: 'E', |
87 | 28 | templateUrl: 'app/components/proposal-related/proposal-related.html', |
88 | 29 | scope: { |
89 | - article: '=' | |
30 | + proposal: '=', | |
31 | + topic: '=', | |
32 | + category: '=' | |
90 | 33 | }, |
91 | 34 | controller: ProposalRelatedController, |
92 | 35 | controllerAs: 'vm', | ... | ... |
src/app/components/proposal-related/proposal-related.html
1 | 1 | <div class="proposal-related" ng-class="{'focus':vm.isFocused}"> |
2 | 2 | <div class="proposal-related--top"> |
3 | - <div class="proposal-related--theme color-theme-bg-darker">[Nome do Tema]</div> | |
4 | - <div class="proposal-related--program color-theme-bg">[Nome do Programa]</div> | |
3 | + <div class="proposal-related--theme color-theme-bg-darker">{{::vm.category.name}}</div> | |
4 | + <div class="proposal-related--program color-theme-bg">{{::vm.topic.title}}</div> | |
5 | 5 | </div> |
6 | 6 | <div class="proposal-related--middle"> |
7 | - <div class="proposal-related--content">[Conteúdo ad proposta enviada]</div> | |
7 | + <div class="proposal-related--content"> | |
8 | + <div class="proposal-related--content-inner" ng-bind-html="vm.proposal.abstract"></div> | |
9 | + </div> | |
8 | 10 | <div class="proposal-related--actions"> |
9 | 11 | <div class="row"> |
10 | 12 | <div class="col-sm-4"> | ... | ... |
src/app/components/proposal-related/proposal-related.scss
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | background-color: #f1f1f1; |
3 | 3 | border-radius: 5px; |
4 | 4 | overflow: hidden; |
5 | - | |
5 | + | |
6 | 6 | &.focus { |
7 | 7 | border: 7px solid #000; |
8 | 8 | border-radius: 12px; |
... | ... | @@ -18,8 +18,10 @@ |
18 | 18 | overflow: hidden; |
19 | 19 | } |
20 | 20 | |
21 | - // &--middle {} | |
22 | - | |
21 | + &--middle { | |
22 | + padding: 30px; | |
23 | + } | |
24 | + | |
23 | 25 | &--bottom { |
24 | 26 | border-bottom-left-radius: 5px; |
25 | 27 | border-bottom-right-radius: 5px; |
... | ... | @@ -34,6 +36,10 @@ |
34 | 36 | padding: 20px 15px; |
35 | 37 | } |
36 | 38 | |
39 | + &--content { | |
40 | + padding-bottom: 20px; | |
41 | + } | |
42 | + | |
37 | 43 | .glyphicon { |
38 | 44 | color: #fff; |
39 | 45 | } |
... | ... | @@ -44,4 +50,4 @@ |
44 | 50 | -moz-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3); |
45 | 51 | box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3); |
46 | 52 | } |
47 | -} | |
48 | 53 | \ No newline at end of file |
54 | +} | ... | ... |
src/app/pages/programas/programa-content.controller.js
... | ... | @@ -54,22 +54,28 @@ |
54 | 54 | } |
55 | 55 | |
56 | 56 | vm.DialogaService.getProposalsByTopicId(vm.article.id, {}, function(data){ |
57 | - vm.proposals = data.children; | |
58 | - vm.proposalsTopRated = [ | |
59 | - {abstract: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tristique consectetur neque, at tincidunt enim volutpat sit amet. Integer sed cursus metus, non luctus risus. Mauris elementum est quis vehicula ullamcorper.'}, | |
60 | - {abstract: 'Mauris elementum est quis vehicula ullamcorper. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tristique consectetur neque, at tincidunt enim volutpat sit amet. Integer sed cursus metus, non luctus risus.'}, | |
61 | - {abstract: 'Integer sed cursus metus, non luctus risus. Mauris elementum est quis vehicula ullamcorper. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tristique consectetur neque, at tincidunt enim volutpat sit amet.'}, | |
62 | - ]; | |
57 | + vm.proposals = data.articles; | |
58 | + vm.proposalsTopRated = vm.proposals.slice(0, 3); | |
63 | 59 | }, function (error) { |
64 | 60 | vm.$log.error(error); |
65 | 61 | }); |
66 | - | |
62 | + | |
63 | + // get random proposal | |
64 | + vm.DialogaService.getProposalsByTopicId(vm.article.id, { | |
65 | + 'order': 'random()', | |
66 | + 'limit': '1' | |
67 | + }, function(data){ | |
68 | + vm.randomProposal = data.articles[0]; | |
69 | + }, function (error) { | |
70 | + vm.$log.error(error); | |
71 | + }); | |
72 | + | |
67 | 73 | vm.loading = false; |
68 | 74 | }, function(error) { |
69 | 75 | vm.$log.error(error); |
70 | 76 | vm.error = error; |
71 | 77 | vm.loading = false; |
72 | - | |
78 | + | |
73 | 79 | // vm.$log.info('Rollback to home page.'); |
74 | 80 | // vm.$state.go('inicio', {}, {location: true}); |
75 | 81 | }); | ... | ... |
src/app/pages/programas/programa.html
... | ... | @@ -23,7 +23,7 @@ |
23 | 23 | <div class="container"> |
24 | 24 | <div class="row"> |
25 | 25 | <article class="program-preview"> |
26 | - | |
26 | + | |
27 | 27 | <div class="col-md-12"> |
28 | 28 | <h1 class="program-preview--title color-theme-fg">{{::pageProgramaContent.article.title}}</h1> |
29 | 29 | </div> |
... | ... | @@ -60,15 +60,22 @@ |
60 | 60 | </div> |
61 | 61 | <div class="col-md-4"> |
62 | 62 | <div class="row"> |
63 | - <div class="col-xs-12"> | |
63 | + <div class="col-xs-12" ng-if="pageProgramaContent.proposalsTopRated && pageProgramaContent.proposalsTopRated.lenght > 0"> | |
64 | 64 | <h3 class="color-theme-fg">Propostas mais votadas</h3> |
65 | - <div ng-if="pageProgramaContent.proposalsTopRated"> | |
66 | - <proposal-carousel proposals="pageProgramaContent.proposalsTopRated"></proposal-carousel> | |
67 | - </div> | |
65 | + <proposal-carousel proposals="pageProgramaContent.proposalsTopRated"></proposal-carousel> | |
68 | 66 | </div> |
69 | - <div class="col-xs-12"> | |
67 | + <div class="col-xs-12" ng-if="pageProgramaContent.randomProposal"> | |
70 | 68 | <h3 class="color-theme-fg">Propostas nesse programa</h3> |
71 | - <proposal-related article="pageProgramaContent.article"></proposal-related> | |
69 | + <proposal-related proposal="pageProgramaContent.randomProposal" topic="pageProgramaContent.article" category="pageProgramaContent.category"></proposal-related> | |
70 | + </div> | |
71 | + <div class="col-xs-12" ng-if="!pageProgramaContent.randomProposal && !(pageProgramaContent.proposalsTopRated && pageProgramaContent.proposalsTopRated.lenght > 0)"> | |
72 | + <h3>Programas sem propostas</h3> | |
73 | + <p> | |
74 | + Este programa ainda não possui nenhuma proposta. | |
75 | + <div class="button--themed"> | |
76 | + <button type="button" class="btn btn-block" ng-click="pageProgramaContent.makeProposal()">Faça uma proposta</button> | |
77 | + </div> | |
78 | + </p> | |
72 | 79 | </div> |
73 | 80 | </div> |
74 | 81 | </div> |
... | ... | @@ -87,7 +94,7 @@ |
87 | 94 | </div> |
88 | 95 | </div> |
89 | 96 | </section> |
90 | - | |
97 | + | |
91 | 98 | <section class="section-content"> |
92 | 99 | <article class="program-content" ng-if="pageProgramaContent.article"> |
93 | 100 | <div ng-bind-html="pageProgramaContent.article.body"></div> | ... | ... |
src/assets/images/icons/sprite.png