Commit 1601c50587e6b73bd6946c6874ed6c089f2731f0
Exists in
master
and in
8 other branches
Merged
Showing
41 changed files
with
776 additions
and
462 deletions
Show diff stats
bower.json
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | "angular-messages": "ng-messages#*", |
10 | 10 | "angular-sanitize": "~1.4.0", |
11 | 11 | "angular-slugify": "~1.0.1", |
12 | - "angular-social-links": "~0.0.19", | |
12 | + "angular-socialshare": "angularjs-socialshare#~0.1.13", | |
13 | 13 | "angular-touch": "~1.4.0", |
14 | 14 | "angular-ui-router": "~0.2.15", |
15 | 15 | "animate.css": "~3.3.0", | ... | ... |
src/app/components/a11y-bar/a11y-bar.html
1 | -<div class="a11y-bar"> | |
1 | +<div class="a11y-bar hidden-xs"> | |
2 | 2 | <div class="container"> |
3 | 3 | <div class="row"> |
4 | 4 | <div class="col-sm-6"> |
... | ... | @@ -21,12 +21,12 @@ |
21 | 21 | <span class="color-theme-common-bg">3</span> |
22 | 22 | </a> |
23 | 23 | </li> |
24 | - <li> | |
24 | + <!-- <li> | |
25 | 25 | <a class="color-theme-common-fg" accesskey="4" href="#footer" id="skip-to-footer" ng-click="focusOn('#footer', $event)"> |
26 | 26 | Ir para o rodapé |
27 | 27 | <span class="color-theme-common-bg">4</span> |
28 | 28 | </a> |
29 | - </li> | |
29 | + </li> --> | |
30 | 30 | </ul> |
31 | 31 | </div> |
32 | 32 | ... | ... |
src/app/components/a11y-bar/a11y-bar.scss
src/app/components/article-grid/article-grid.html
src/app/components/article-service/article.service.js
... | ... | @@ -11,6 +11,7 @@ |
11 | 11 | |
12 | 12 | var service = { |
13 | 13 | apiArticles: $rootScope.basePath + '/api/v1/articles/', |
14 | + apiCommunities: $rootScope.basePath + '/api/v1/communities/', | |
14 | 15 | getArticleById: getArticleById, |
15 | 16 | getArticleBySlug: getArticleBySlug, |
16 | 17 | getCategories: getCategories, |
... | ... | @@ -19,6 +20,7 @@ |
19 | 20 | getTopicById: getTopicById, |
20 | 21 | getProposals: getProposals, |
21 | 22 | getProposalsByTopicId: getProposalsByTopicId, |
23 | + getEvents: getEvents, | |
22 | 24 | searchTopics: searchTopics, |
23 | 25 | searchProposals: searchProposals |
24 | 26 | }; |
... | ... | @@ -30,7 +32,8 @@ |
30 | 32 | var url = service.apiArticles + articleId; |
31 | 33 | var paramsExtended = angular.extend({}, params); |
32 | 34 | |
33 | - UtilService.get(url, {params: paramsExtended}).then(function(data){ | |
35 | + UtilService.get(url, {params: paramsExtended}) | |
36 | + .then(function(data){ | |
34 | 37 | cbSuccess(data); |
35 | 38 | }).catch(function(error){ |
36 | 39 | cbError(error); |
... | ... | @@ -45,43 +48,38 @@ |
45 | 48 | throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; |
46 | 49 | } |
47 | 50 | |
48 | - function getCategories (articleId, cbSuccess, cbError) { | |
51 | + function getCategories (articleId, params, cbSuccess, cbError) { | |
49 | 52 | // Ex.: /api/v1/articles/103358?fields= |
50 | 53 | |
51 | 54 | var url = service.apiArticles + articleId; |
52 | - | |
53 | - UtilService.get(url, {params: { | |
55 | + var paramsExtended = angular.extend({ | |
54 | 56 | 'fields[]': ['id', 'categories'] |
55 | - }}).then(function(data){ | |
57 | + }, params); | |
58 | + | |
59 | + UtilService.get(url, {params: paramsExtended}) | |
60 | + .then(function(data){ | |
56 | 61 | cbSuccess(data); |
57 | 62 | }).catch(function(error){ |
58 | 63 | cbError(error); |
59 | 64 | }); |
60 | 65 | } |
61 | 66 | |
62 | - function getCategoryBySlug () { | |
67 | + function getCategoryBySlug (/*slug, params, cbSuccess, cbError*/) { | |
63 | 68 | throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; |
64 | 69 | } |
65 | 70 | |
66 | - function getTopics (cbSuccess, cbError) { | |
71 | + function getTopics (params, cbSuccess, cbError) { | |
67 | 72 | // Ex.: /api/v1/articles/103358/children?fields= |
68 | - | |
69 | - var url = service.apiArticles + API.articleId.home + '/children'; | |
70 | - | |
71 | - UtilService.get(url, {params: { | |
72 | - 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] | |
73 | - }}).then(function(data){ | |
74 | - cbSuccess(data); | |
75 | - }).catch(function(error){ | |
76 | - cbError(error); | |
77 | - }); | |
73 | + getTopicById(API.articleId.home); | |
78 | 74 | } |
79 | 75 | |
80 | - function getTopicById (topicId, cbSuccess, cbError) { | |
81 | - // Ex.: /api/v1/articles/103358/children/121521?fields= | |
76 | + function getTopicById (topicId, params, cbSuccess, cbError) { | |
77 | + // Ex.: /api/v1/articles/103358/children?fields= | |
82 | 78 | |
83 | - // var url = service.apiArticles + API.articleId.home + '/children/' + topicId; // dont need to chain | |
84 | - var url = service.apiArticles + topicId; | |
79 | + var url = service.apiArticles + topicId + '/children'; | |
80 | + var paramsExtended = angular.extend({ | |
81 | + 'fields[]': ['id', 'categories'] | |
82 | + }, params); | |
85 | 83 | |
86 | 84 | UtilService.get(url, {params: { |
87 | 85 | 'fields[]': ['id', 'title', 'body', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] |
... | ... | @@ -109,12 +107,24 @@ |
109 | 107 | }); |
110 | 108 | } |
111 | 109 | |
110 | + /** | |
111 | + * Ex.: /api/v1/articles/[article_id]/children?[params]content_type=ProposalsDiscussionPlugin::Proposal | |
112 | + * Ex.: /api/v1/articles/103644/children?limit=20&fields=id,name,slug,abstract,created_by&content_type=ProposalsDiscussionPlugin::Proposal | |
113 | + * | |
114 | + * @param {Integer} topicId topic where has those proposals | |
115 | + * @param {Object} params params for pagination ant others | |
116 | + * @param {Function} cbSuccess callback for success | |
117 | + * @param {Function} cbError callback for error | |
118 | + * @return {Array} [description] | |
119 | + */ | |
112 | 120 | function getProposalsByTopicId (topicId, params, cbSuccess, cbError) { |
113 | - var url = service.apiArticles + topicId; | |
121 | + var url = service.apiArticles + topicId + '/children'; | |
114 | 122 | |
115 | 123 | var paramsExtended = angular.extend({ |
116 | - 'fields[]': ['id', 'title', 'abstract', 'children', 'children_count'], | |
117 | - 'content_type':'ProposalsDiscussionPlugin::Proposals' | |
124 | + 'fields[]': ['id', 'title', 'abstract', 'children', 'children_count', 'ranking_position', 'hits', 'votes_for', 'votes_against'], | |
125 | + 'limit':'20', | |
126 | + 'page':'1', | |
127 | + 'content_type':'ProposalsDiscussionPlugin::Proposal' | |
118 | 128 | }, params); |
119 | 129 | |
120 | 130 | UtilService.get(url, {params: paramsExtended}).then(function(data){ |
... | ... | @@ -124,7 +134,22 @@ |
124 | 134 | }); |
125 | 135 | } |
126 | 136 | |
127 | - function getRandomProposal (cbSuccess, cbError) {} | |
137 | + function getEvents (community_id, params, cbSuccess, cbError) { | |
138 | + // Ex.: /api/v1/communities/19195/articles?categories_ids[]=' + cat_id + '&content_type=Event'; | |
139 | + // Ex.: /api/v1/communities/' + community_id + '/articles?categories_ids[]=' + cat_id + '&content_type=Event'; | |
140 | + | |
141 | + var url = service.apiCommunities + community_id + '/articles'; | |
142 | + var paramsExtended = angular.extend({ | |
143 | + 'fields[]': ['id', 'slug', 'title', 'abstract', 'body', 'categories', 'created_at', 'start_date', 'end_date', 'hits'], | |
144 | + 'content_type':'Event' | |
145 | + }, params); | |
146 | + | |
147 | + UtilService.get(url, {params: paramsExtended}).then(function(data){ | |
148 | + cbSuccess(data.articles); | |
149 | + }).catch(function(error){ | |
150 | + cbError(error); | |
151 | + }); | |
152 | + } | |
128 | 153 | |
129 | 154 | function searchTopics (params, cbSuccess, cbError) { |
130 | 155 | // Ex.: /api/v1/search/article?type=ProposalsDiscussionPlugin::Topic&query=cisternas | ... | ... |
src/app/components/breadcrumb/breadcrumb.scss
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/dialoga-service/dialoga.service.js
... | ... | @@ -9,24 +9,24 @@ |
9 | 9 | function DialogaService($rootScope, $sce, API, ArticleService, UtilService, Slug, $log) { |
10 | 10 | $log.debug('DialogaService'); |
11 | 11 | |
12 | - var service = { | |
13 | - getHome: getHome, | |
14 | - getAbout: getAbout, | |
15 | - getThemes: getThemes, | |
16 | - getPrograms: getPrograms, | |
17 | - getProgramBySlug: getProgramBySlug, | |
18 | - getProgramsRandom: getProgramsRandom, | |
19 | - getProposals: getProposals, | |
20 | - getProposalsByTopicId: getProposalsByTopicId, | |
21 | - getEvents: getEvents, | |
22 | - getQuestions: getQuestions, | |
23 | - searchProgram: searchProgram, | |
24 | - searchProposal: searchProposal, | |
25 | - }; | |
12 | + var extendedService = angular.extend({}, ArticleService); | |
13 | + | |
14 | + extendedService.serviceDialoga = $rootScope.basePath + '/api/v1/dialoga_plugin/'; | |
15 | + extendedService.getHome = getHome; | |
16 | + extendedService.getAbout = getAbout; | |
17 | + extendedService.getTerms = getTerms; | |
18 | + extendedService.getThemes = getThemes; | |
19 | + extendedService.getPrograms = getPrograms; | |
20 | + extendedService.getProgramBySlug = getProgramBySlug; | |
21 | + extendedService.getProgramsRandom = getProgramsRandom; | |
22 | + extendedService.getEvents = getEvents; // override | |
23 | + extendedService.getQuestions = getQuestions; | |
24 | + extendedService.searchPrograms = searchPrograms; | |
25 | + extendedService.searchProposals = searchProposals; | |
26 | 26 | |
27 | 27 | var CACHE = {}; |
28 | 28 | |
29 | - return service; | |
29 | + return extendedService; | |
30 | 30 | |
31 | 31 | function getHome (cbSuccess, cbError) { |
32 | 32 | if( !!CACHE.home ){ |
... | ... | @@ -62,6 +62,19 @@ |
62 | 62 | } |
63 | 63 | } |
64 | 64 | |
65 | + function getTerms (cbSuccess, cbError) { | |
66 | + if( !!CACHE.terms ){ | |
67 | + cbSuccess(CACHE.terms); | |
68 | + }else{ | |
69 | + // load article content | |
70 | + ArticleService.getArticleById(API.articleId.terms, {}, function (article){ | |
71 | + CACHE.terms = article; | |
72 | + | |
73 | + cbSuccess(CACHE.terms); | |
74 | + }, cbError); | |
75 | + } | |
76 | + } | |
77 | + | |
65 | 78 | function getThemes (cbSuccess, cbError) { |
66 | 79 | if( !!CACHE.themes ){ |
67 | 80 | cbSuccess(CACHE.themes); |
... | ... | @@ -91,11 +104,11 @@ |
91 | 104 | } |
92 | 105 | |
93 | 106 | function getProgramBySlug (slug, cbSuccess, cbError) { |
94 | - | |
107 | + | |
95 | 108 | if( !CACHE.programs ){ |
96 | 109 | getPrograms(_getProgramBySlug, cbError); |
97 | 110 | } else { |
98 | - _getProgramBySlug(); | |
111 | + _getProgramBySlug(); | |
99 | 112 | } |
100 | 113 | |
101 | 114 | function _getProgramBySlug(){ |
... | ... | @@ -110,58 +123,46 @@ |
110 | 123 | } |
111 | 124 | } |
112 | 125 | |
113 | - function getProgramsRandom (cbSuccess, cbError) { | |
114 | - getPrograms(cbSuccess, cbError); | |
115 | - // TODO: get endpoint for production | |
116 | - // if( !!CACHE.programsRandom ){ | |
117 | - // cbSuccess(CACHE.programsRandom); | |
118 | - // }else{ | |
119 | - // // load article content | |
120 | - // // UtilService.get(API.random_topics, {params: { | |
121 | - // ArticleService.getArticleById(API.articleId.home, {params: { | |
122 | - // 'fields[]': [ | |
123 | - // 'id', 'title', 'slug', 'abstract', 'children_count'], | |
124 | - // 'content_type': 'ProposalsDiscussionPlugin::Topic' | |
125 | - // }}).then(function(data){ | |
126 | - // CACHE.programsRandom = data; | |
127 | - | |
128 | - // cbSuccess(data); | |
129 | - // }).catch(function(error){ | |
130 | - // cbError(error); | |
131 | - // }); | |
132 | - // } | |
133 | - } | |
126 | + // Ex.: /api/v1/dialoga_plugin/random_topics/103358 | |
127 | + // TODO: get endpoint for production | |
128 | + // TODO: put at cache? | |
129 | + function getProgramsRandom(params, cbSuccess, cbError) { | |
134 | 130 | |
135 | - function getProposals (param, cbSuccess, cbError) { | |
136 | - ArticleService.getProposals(param, function (data){ | |
137 | - CACHE.proposals = data; | |
131 | + if( !!CACHE.programsRandom ){ | |
132 | + cbSuccess(CACHE.programsRandom); | |
133 | + }else{ | |
134 | + var mapFromCache = !!CACHE.programs; | |
138 | 135 | |
139 | - cbSuccess(CACHE.proposals); | |
140 | - }, cbError); | |
141 | - } | |
136 | + var url = extendedService.serviceDialoga + 'random_topics/' + API.articleId.home; | |
137 | + var fields = null; | |
142 | 138 | |
143 | - function getProposalsByTopicId (topicId, params, cbSuccess, cbError) { | |
144 | - ArticleService.getProposalsByTopicId(topicId, params, function (data){ | |
145 | - CACHE.proposals = data; | |
139 | + if (mapFromCache){ | |
140 | + // get only references | |
141 | + fields = ['id', 'title', 'slug']; | |
142 | + }else{ | |
143 | + // get all content | |
144 | + fields = []; | |
145 | + } | |
146 | 146 | |
147 | - cbSuccess(CACHE.proposals); | |
148 | - }, cbError); | |
149 | - } | |
147 | + var paramsExtended = angular.extend({ | |
148 | + 'fields[]': fields | |
149 | + }, params); | |
150 | 150 | |
151 | - function getEvents (cbSuccess, cbError) { | |
152 | - if( !!CACHE.events ){ | |
153 | - cbSuccess(CACHE.events); | |
154 | - }else{ | |
155 | - // load main content | |
156 | - getHome(function(){ | |
157 | - if(!CACHE.hasOwnProperty('events')){ | |
158 | - throw { name: 'NotFound', message: '"events" is not defined. "article.categories" was loaded?'}; | |
159 | - } | |
160 | - cbSuccess(CACHE.events); | |
161 | - },cbError); | |
151 | + UtilService.get(url, {params: paramsExtended}).then(function(data){ | |
152 | + _pipeHandleProgramsRandomFromCache(mapFromCache, data, cbSuccess); | |
153 | + }).catch(function(error){ | |
154 | + cbError(error); | |
155 | + }); | |
162 | 156 | } |
163 | 157 | } |
164 | 158 | |
159 | + function getEvents (params, cbSuccess, cbError) { | |
160 | + var paramsExtended = angular.extend({}, params); | |
161 | + | |
162 | + ArticleService.getEvents(API.communityId, paramsExtended, cbSuccess, cbError); | |
163 | + } | |
164 | + | |
165 | + // TODO: implement | |
165 | 166 | function getQuestions (cbSuccess/*, cbError*/) { |
166 | 167 | if( !!CACHE.questions ){ |
167 | 168 | cbSuccess(CACHE.questions); |
... | ... | @@ -174,9 +175,13 @@ |
174 | 175 | } |
175 | 176 | } |
176 | 177 | |
177 | - function searchProgram (cbSuccess, cbError) {} | |
178 | + function searchPrograms (query, cbSuccess, cbError) { | |
179 | + ArticleService.searchTopics({query: query}, cbSuccess, cbError); | |
180 | + } | |
178 | 181 | |
179 | - function searchProposal (cbSuccess, cbError) {} | |
182 | + function searchProposals (query, cbSuccess, cbError) { | |
183 | + ArticleService.searchProposals({query: query}, cbSuccess, cbError); | |
184 | + } | |
180 | 185 | |
181 | 186 | function _pipeHandleYoutube (data) { |
182 | 187 | var abstract = data.article.abstract; |
... | ... | @@ -243,6 +248,30 @@ |
243 | 248 | } |
244 | 249 | } |
245 | 250 | |
251 | + function _pipeHandleProgramsRandomFromCache (mapFromCache, data, cbSuccess){ | |
252 | + | |
253 | + if(mapFromCache){ | |
254 | + var result = []; | |
255 | + var refPrograms = data.articles; | |
256 | + | |
257 | + for (var i = CACHE.programs.length - 1; i >= 0; i--) { | |
258 | + var cachedProgram = CACHE.programs[i]; | |
259 | + | |
260 | + for (var j = refPrograms.length - 1; j >= 0; j--) { | |
261 | + var refProgram = refPrograms[j]; | |
262 | + | |
263 | + if(refProgram.id === cachedProgram.id){ | |
264 | + result.push(cachedProgram); | |
265 | + } | |
266 | + } | |
267 | + } | |
268 | + | |
269 | + data.articles = result; | |
270 | + } | |
271 | + | |
272 | + cbSuccess(data); | |
273 | + } | |
274 | + | |
246 | 275 | function forceIframeParams(abstract) { |
247 | 276 | var patternIframe = '<iframe src="'; |
248 | 277 | var indexOfIframe = abstract.indexOf(patternIframe); | ... | ... |
src/app/components/event-list/event-list.directive.js
... | ... | @@ -19,18 +19,24 @@ |
19 | 19 | vm.$log = $log; |
20 | 20 | |
21 | 21 | vm.init(); |
22 | + // vm.attachListeners(); | |
22 | 23 | } |
23 | 24 | |
24 | 25 | EventListController.prototype.init = function () { |
25 | 26 | var vm = this; |
26 | 27 | |
27 | - vm.eventList = []; | |
28 | - vm.isListVisible = false; | |
28 | + if(!vm.events){ | |
29 | + throw { name: 'NotDefined', message: 'The attribute "events" is undefined.'}; | |
30 | + } | |
31 | + | |
32 | + if(!vm.isCollapsed){ | |
33 | + vm.isCollapsed = true; | |
34 | + } | |
29 | 35 | }; |
30 | 36 | |
31 | 37 | EventListController.prototype.toggleView = function () { |
32 | 38 | var vm = this; |
33 | - vm.isListVisible = !vm.isListVisible; | |
39 | + vm.isCollapsed = !vm.isCollapsed; | |
34 | 40 | }; |
35 | 41 | |
36 | 42 | EventListController.prototype.subscribe = function (data) { |
... | ... | @@ -42,8 +48,12 @@ |
42 | 48 | var directive = { |
43 | 49 | restrict: 'E', |
44 | 50 | templateUrl: 'app/components/event-list/event-list.html', |
51 | + scope: { | |
52 | + events: '=', | |
53 | + isCollapsed: '=' | |
54 | + }, | |
45 | 55 | controller: EventListController, |
46 | - controllerAs: 'eventListCtrl', | |
56 | + controllerAs: 'vm', | |
47 | 57 | bindToController: true |
48 | 58 | }; |
49 | 59 | ... | ... |
src/app/components/event-list/event-list.html
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | <section class="color-theme-common-bg"> |
4 | 4 | |
5 | 5 | <div class="container"> |
6 | - <div class="event-bar--trigger"> | |
6 | + <div class="event-bar--trigger" ng-click="vm.toggleView()"> | |
7 | 7 | <div class="event-bar--trigger-top"> |
8 | 8 | <div class="col-sm-6"> |
9 | 9 | <h1 class="title"> |
... | ... | @@ -12,19 +12,20 @@ |
12 | 12 | </h1> |
13 | 13 | </div> |
14 | 14 | <div class="col-sm-6"> |
15 | - <h2 class="event-bar--trigger-toggle text-right" ng-click="eventListCtrl.toggleView()"> | |
15 | + <h2 class="event-bar--trigger-toggle text-right"> | |
16 | 16 | <span><b>18</b> bate papos <b>agendados</b></span> |
17 | 17 | <span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span> |
18 | 18 | </h2> |
19 | 19 | </div> |
20 | 20 | </div> |
21 | + <div class="clearfix"></div> | |
21 | 22 | </div> |
22 | 23 | </div> |
23 | 24 | </section> |
24 | 25 | |
25 | 26 | <section class="section-table"> |
26 | 27 | <div class="container"> |
27 | - <!-- <div class="event-tab--trigger" ng-show="!eventListCtrl.isListVisible" ng-click="eventListCtrl.toggleView()"> | |
28 | + <!-- <div class="event-tab--trigger" ng-show="vm.isCollapsed" ng-click="vm.toggleView()"> | |
28 | 29 | <div class="event-tab--header"> |
29 | 30 | <div class="event-tab--icon"> |
30 | 31 | <span class="glyphicon glyphicon-calendar" aria-hidden="true"></span> |
... | ... | @@ -38,81 +39,26 @@ |
38 | 39 | </button> |
39 | 40 | </div> --> |
40 | 41 | |
41 | - <div class="event-list--panel ng-hide" ng-show="eventListCtrl.isListVisible"> | |
42 | + <div class="event-list--panel ng-hide" ng-show="!vm.isCollapsed"> | |
42 | 43 | <div class="event-list--table-wrapper"> |
43 | 44 | <div class="table-responsive"> |
44 | 45 | <table class="table event-list--table"> |
45 | 46 | <!-- <thead></thead> --> |
46 | 47 | <tbody> |
47 | - <tr> | |
48 | + <tr ng-repeat="event in vm.events"> | |
48 | 49 | <td> |
49 | - <span class="date">dd/mm/aaaa</span> | |
50 | + <span class="date">{{event.start_date | date : "dd/MM/yyyy"}}</span> | |
50 | 51 | <span class="separator">-</span> |
51 | - <span class="time">HH:mm</span> | |
52 | + <span class="time">{{event.start_date | date : "HH:mm"}}</span> | |
52 | 53 | <span class="separator">-</span> |
53 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
54 | - <button type="button" class="btn color-theme-common-bg" ng-click="eventListCtrl.subscribe('EVENT_ID')"> | |
54 | + <span class="description">[DESCRIÇÃO]</span> | |
55 | + <button type="button" class="btn color-theme-common-bg" ng-click="vm.subscribe('EVENT_ID')"> | |
55 | 56 | Inscreva-se |
56 | - <span class="sr-only">no bate-papo com (ministro) no dia (date) as (hh:mm) horas</span> | |
57 | + <span class="sr-only">no bate-papo com (ministro) no dia {event.start_date | date : "dd/MM/yyyy"}} as {{event.start_date | date : "HH:mm"}} horas</span> | |
57 | 58 | </button> |
58 | 59 | <span class="subscribers">123 inscritos</span> |
59 | 60 | </td> |
60 | 61 | </tr> |
61 | - <tr> | |
62 | - <td> | |
63 | - <span class="date">dd/mm/aaaa</span> | |
64 | - <span class="separator">-</span> | |
65 | - <span class="time">HH:mm</span> | |
66 | - <span class="separator">-</span> | |
67 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
68 | - <button type="button" class="btn color-theme-common-bg">Inscreva-se</button> | |
69 | - <span class="subscribers">123 inscritos</span> | |
70 | - </td> | |
71 | - </tr> | |
72 | - <tr> | |
73 | - <td> | |
74 | - <span class="date">dd/mm/aaaa</span> | |
75 | - <span class="separator">-</span> | |
76 | - <span class="time">HH:mm</span> | |
77 | - <span class="separator">-</span> | |
78 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
79 | - <button type="button" class="btn color-theme-common-bg">Inscreva-se</button> | |
80 | - <span class="subscribers">123 inscritos</span> | |
81 | - </td> | |
82 | - </tr> | |
83 | - <tr> | |
84 | - <td> | |
85 | - <span class="date">dd/mm/aaaa</span> | |
86 | - <span class="separator">-</span> | |
87 | - <span class="time">HH:mm</span> | |
88 | - <span class="separator">-</span> | |
89 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
90 | - <button type="button" class="btn color-theme-common-bg">Inscreva-se</button> | |
91 | - <span class="subscribers">123 inscritos</span> | |
92 | - </td> | |
93 | - </tr> | |
94 | - <tr> | |
95 | - <td> | |
96 | - <span class="date">dd/mm/aaaa</span> | |
97 | - <span class="separator">-</span> | |
98 | - <span class="time">HH:mm</span> | |
99 | - <span class="separator">-</span> | |
100 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
101 | - <button type="button" class="btn color-theme-common-bg">Inscreva-se</button> | |
102 | - <span class="subscribers">123 inscritos</span> | |
103 | - </td> | |
104 | - </tr> | |
105 | - <tr> | |
106 | - <td> | |
107 | - <span class="date">dd/mm/aaaa</span> | |
108 | - <span class="separator">-</span> | |
109 | - <span class="time">HH:mm</span> | |
110 | - <span class="separator">-</span> | |
111 | - <span class="description">Mais médicos, Segurança Nacional, SAMU</span> | |
112 | - <button type="button" class="btn color-theme-common-bg">Inscreva-se</button> | |
113 | - <span class="subscribers">123 inscritos</span> | |
114 | - </td> | |
115 | - </tr> | |
116 | 62 | </tbody> |
117 | 63 | <!-- <tfooter></tfooter> --> |
118 | 64 | </table> | ... | ... |
src/app/components/event-list/event-list.scss
... | ... | @@ -17,8 +17,8 @@ |
17 | 17 | transition: .3s linear all; |
18 | 18 | |
19 | 19 | &.ng-hide { |
20 | - height: 0px; | |
21 | - line-height: 0px; | |
20 | + height: 0; | |
21 | + line-height: 0; | |
22 | 22 | } |
23 | 23 | |
24 | 24 | // .event-list--header { |
... | ... | @@ -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 | |
... | ... | @@ -72,6 +77,7 @@ |
72 | 77 | |
73 | 78 | .event-bar--trigger { |
74 | 79 | color: #fff; |
80 | + cursor: pointer; | |
75 | 81 | |
76 | 82 | h1 { |
77 | 83 | margin-bottom: 20px; | ... | ... |
src/app/components/navbar/navbar.html
... | ... | @@ -20,42 +20,49 @@ |
20 | 20 | <li ui-sref-active="active"><a ui-sref="propostas">Propostas</a></li> |
21 | 21 | <li ui-sref-active="active"><a ui-sref="ranking">Ranking</a></li> |
22 | 22 | <li ui-sref-active="active"><a ui-sref="duvidas">Dúvidas</a></li> |
23 | - <!-- <li ui-sref-active="active"><a ui-sref="respostas">Respostas</a></li> --> | |
24 | - <li role="separator" class="divider"><span>|</span></li> | |
23 | + <li role="separator" class="divider hidden-xs hidden-sm"><span>|</span></li> | |
25 | 24 | <li class="dropdown"> |
26 | - <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Compartilhar <span class="icon-circle"><span class="glyphicon glyphicon-share-alt"></span></span></a> | |
27 | - <ul class="dropdown-menu"> | |
25 | + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Compartilhar <span class="icon icon-social-share-small"></span></a> | |
26 | + <social-share class="dropdown-menu dropdown-menu-right"></social-share> | |
27 | + <!-- <ul class="dropdown-menu dropdown-menu-right dropdown-menu-social"> | |
28 | 28 | <li> |
29 | - <a social-facebook custom-url="http://dialoga.gov.br" title="Compartilhar no Facebook"> | |
30 | - <span class="icon icon-social-facebook"></span> | |
29 | + <a socialshare | |
30 | + socialshare-provider="facebook" | |
31 | + socialshare-url="http://dialoga.gov.br" | |
32 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
33 | + title="Compartilhar no Facebook"> | |
34 | + <span class="icon-circle icon-small icon-circle-social-facebook"><span class="icon icon-social-facebook"></span></span> | |
31 | 35 | <span class="sr-only">Compartilhar no Facebook</span> |
32 | 36 | </a> |
33 | 37 | </li> |
34 | 38 | <li> |
35 | - <a social-twitter custom-url="http://dialoga.gov.br" status="This status is #{{ vm.status }}" title="Compartilhar no Twitter"> | |
36 | - <span class="icon icon-social-twitter"></span> | |
39 | + <a socialshare | |
40 | + socialshare-provider="twitter" | |
41 | + socialshare-url="http://dialoga.gov.br" | |
42 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
43 | + socialshare-hastags="dialogabrasil" | |
44 | + title="Compartilhar no Twitter"> | |
45 | + <span class="icon-circle icon-small icon-circle-social-twitter"><span class="icon icon-social-twitter"></span></span> | |
37 | 46 | <span class="sr-only">Compartilhar no Twitter</span> |
38 | 47 | </a> |
39 | 48 | </li> |
40 | 49 | <li> |
41 | - <a social-gplus custom-url="http://dialoga.gov.br" title="Compartilhar no Google Plus"> | |
42 | - <span class="icon icon-social-google-plus"></span> | |
50 | + <a socialshare | |
51 | + socialshare-provider="gplus" | |
52 | + socialshare-url="http://dialoga.gov.br" | |
53 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
54 | + title="Compartilhar no Google Plus"> | |
55 | + <span class="icon-circle icon-small icon-circle-social-googleplus"><span class="icon icon-social-googleplus"></span></span> | |
43 | 56 | <span class="sr-only">Compartilhar no Google Plus</span> |
44 | 57 | </a> |
45 | 58 | </li> |
46 | - <!-- <li> | |
47 | - <a href="whatsapp://send?text=http%3A%2F%2Fdialoga.gov.br" target="_blank" title="Compartilhar no WhatsApp"> | |
48 | - <span class="icon icon-social-whatsapp"></span> | |
49 | - <span class="sr-only">Compartilhar no WhatsApp</span> | |
50 | - </a> | |
51 | - </li> --> | |
52 | 59 | <li> |
53 | 60 | <a href="mailto:contato@dialoga.gov.br?subject=Conheça o Dialoga Brasil" title="Enviar por email"> |
54 | - <span class="icon icon-social-whatsapp"></span> | |
61 | + <span class="icon-circle icon-small icon-circle-social-whatsapp"><span class="icon icon-social-whatsapp"></span></span> | |
55 | 62 | <span class="sr-only">Enviar por email</span> |
56 | 63 | </a> |
57 | 64 | </li> |
58 | - </ul> | |
65 | + </ul> --> | |
59 | 66 | </li> |
60 | 67 | </ul> |
61 | 68 | </div> | ... | ... |
src/app/components/navbar/navbar.scss
1 | 1 | .app-navbar { |
2 | 2 | |
3 | 3 | border-bottom: 2px solid #f1f1f1; |
4 | - margin-bottom: 20px; | |
5 | 4 | |
6 | 5 | .navbar { |
7 | 6 | margin-bottom: 0; |
... | ... | @@ -12,13 +11,26 @@ |
12 | 11 | height: auto; |
13 | 12 | padding-bottom: 0; |
14 | 13 | padding-left: 0; |
14 | + | |
15 | + @media screen and (max-width: $screen-md) { | |
16 | + padding: 20px 0; | |
17 | + margin: 20px 0; | |
18 | + } | |
15 | 19 | } |
16 | 20 | |
17 | 21 | .navbar-toggle { |
22 | + padding: 12px 10px; | |
18 | 23 | margin-top: 20px; |
24 | + border-radius: 100%; | |
25 | + background-color: #5e749d; | |
19 | 26 | |
20 | 27 | .icon-bar { |
21 | 28 | height: 3px; |
29 | + background-color: #fff; | |
30 | + } | |
31 | + | |
32 | + @media screen and (max-width: $screen-md) { | |
33 | + margin-top: 45px; | |
22 | 34 | } |
23 | 35 | } |
24 | 36 | |
... | ... | @@ -27,11 +39,15 @@ |
27 | 39 | margin: 53px 10px 0 10px; |
28 | 40 | display: block; |
29 | 41 | |
30 | - @media screen and (max-width: 768px) { | |
42 | + @media screen and (max-width: $screen-md) { | |
31 | 43 | display: none; |
32 | 44 | } |
33 | 45 | } |
34 | 46 | |
47 | + .dropdown-menu { | |
48 | + padding: 0; | |
49 | + } | |
50 | + | |
35 | 51 | .navbar-nav > li { |
36 | 52 | |
37 | 53 | & > a { |
... | ... | @@ -49,42 +65,31 @@ |
49 | 65 | .contraste & { |
50 | 66 | color: #fff; |
51 | 67 | } |
68 | + | |
69 | + @media screen and (max-width: $screen-md) { | |
70 | + margin-top: 5px; | |
71 | + } | |
52 | 72 | } |
53 | 73 | |
54 | 74 | &.active > a { |
55 | 75 | border-bottom: 3px solid #77BB34; |
56 | 76 | |
57 | - @media screen and (max-width: 768px) { | |
77 | + @media screen and (max-width: $screen-md) { | |
58 | 78 | border: none; |
59 | 79 | background-color: #eee; |
60 | 80 | padding: 10px 0 10px 0px; |
61 | 81 | } |
62 | 82 | } |
63 | 83 | |
64 | - .dropdown-menu { | |
65 | - min-width: 190px; | |
66 | - | |
67 | - li { | |
68 | - float: left; | |
69 | - padding: 0; | |
70 | - margin: 0; | |
71 | - width: 45px; | |
84 | + .dropdown-toggle { | |
85 | + margin-top: 50px; | |
72 | 86 | |
73 | - & > a { | |
74 | - padding: 0; | |
75 | - } | |
76 | - | |
77 | - &:first-child { | |
78 | - margin-left: 5px; | |
79 | - } | |
87 | + @media screen and (max-width: $screen-md) { | |
88 | + margin-top: 0px; | |
80 | 89 | } |
81 | 90 | } |
82 | 91 | } |
83 | 92 | |
84 | - .navbar-toggle .icon-bar { | |
85 | - background-color: #333; | |
86 | - } | |
87 | - | |
88 | 93 | .contraste & { |
89 | 94 | .nav > li > a:hover, |
90 | 95 | .nav > li > a:focus { | ... | ... |
src/app/components/proposal-carousel/proposal-carousel.directive.js
... | ... | @@ -46,6 +46,16 @@ |
46 | 46 | vm.activeIndex = (vm.activeIndex > 0) ? --vm.activeIndex : vm.proposalsLength - 1; |
47 | 47 | }; |
48 | 48 | |
49 | + ProposalCarouselController.prototype.switchProposal = function (index) { | |
50 | + var vm = this; | |
51 | + | |
52 | + if(index >= 0 && index < vm.proposalsLength) { | |
53 | + vm.activeIndex = index; | |
54 | + }else{ | |
55 | + vm.$log.warn('[switchProposal] "index" not handled:', index); | |
56 | + } | |
57 | + }; | |
58 | + | |
49 | 59 | ProposalCarouselController.prototype.showProposals = function () { |
50 | 60 | var vm = this; |
51 | 61 | ... | ... |
src/app/components/proposal-carousel/proposal-carousel.html
1 | 1 | <div class="proposal-carousel"> |
2 | 2 | <div ng-if="vm.proposals"> |
3 | - <div class="proposal-carousel-top color-theme-bg"> | |
3 | + <div class="proposal-carousel-top color-theme-bg-darker"> | |
4 | 4 | <div class="proposal-carousel-position" ng-repeat="proposal in vm.proposals"> |
5 | 5 | <span ng-show="vm.activeIndex === $index">{{::($index+1)}}º</span> |
6 | 6 | <span ng-show="vm.activeIndex === $index">Lugar</span> | ... | ... |
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,11 @@ |
9 | 9 | function proposalRelated() { |
10 | 10 | |
11 | 11 | /** @ngInject */ |
12 | - function ProposalRelatedController(ArticleService, $scope, $element, $timeout, $log) { | |
12 | + function ProposalRelatedController($state, $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; | |
16 | + vm.$state = $state; | |
20 | 17 | vm.$log = $log; |
21 | 18 | |
22 | 19 | vm.init(); |
... | ... | @@ -24,69 +21,26 @@ |
24 | 21 | |
25 | 22 | ProposalRelatedController.prototype.init = function () { |
26 | 23 | // 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(); | |
24 | + // var vm = this; | |
39 | 25 | }; |
40 | 26 | |
41 | - ProposalRelatedController.prototype.loadData = function () { | |
42 | - // async values | |
27 | + ProposalRelatedController.prototype.showContent = function (program) { | |
43 | 28 | var vm = this; |
44 | 29 | |
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); | |
30 | + vm.$state.go('programa-conteudo', { | |
31 | + slug: program.slug | |
32 | + }, { | |
33 | + location: true | |
34 | + }); | |
83 | 35 | }; |
84 | 36 | |
85 | 37 | var directive = { |
86 | 38 | restrict: 'E', |
87 | 39 | templateUrl: 'app/components/proposal-related/proposal-related.html', |
88 | 40 | scope: { |
89 | - article: '=' | |
41 | + proposal: '=', | |
42 | + topic: '=', | |
43 | + category: '=' | |
90 | 44 | }, |
91 | 45 | controller: ProposalRelatedController, |
92 | 46 | controllerAs: 'vm', | ... | ... |
src/app/components/proposal-related/proposal-related.html
1 | -<div class="proposal-related"> | |
2 | - Proposta | |
1 | +<div class="proposal-related" ng-class="{'focus':vm.isFocused}"> | |
2 | + <div class="proposal-related--top"> | |
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 | + </div> | |
6 | + <div class="proposal-related--middle"> | |
7 | + <div class="proposal-related--content"> | |
8 | + <div class="proposal-related--content-inner" ng-bind-html="vm.proposal.abstract"></div> | |
9 | + </div> | |
10 | + <div class="proposal-related--join"> | |
11 | + <button class="btn btn-link" ng-click="vm.showContent(vm.topic)">Participe</button> | |
12 | + </div> | |
13 | + <div class="proposal-related--actions text-center"> | |
14 | + <div class="row"> | |
15 | + <div class="col-xs-4"> | |
16 | + <div class="action vote_for"> | |
17 | + <div class="icon-circle"> | |
18 | + <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | |
19 | + </div> | |
20 | + <div class="action-label">Apoio</div> | |
21 | + </div> | |
22 | + </div> | |
23 | + <div class="col-xs-4"> | |
24 | + <div class="action next"> | |
25 | + <div class="icon-circle"> | |
26 | + <span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span> | |
27 | + </div> | |
28 | + <div class="action-label">Pular</div> | |
29 | + </div> | |
30 | + </div> | |
31 | + <div class="col-xs-4"> | |
32 | + <div class="action vote_against"> | |
33 | + <div class="icon-circle"> | |
34 | + <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | |
35 | + </div> | |
36 | + <div class="action-label">Não Apoio</div> | |
37 | + </div> | |
38 | + </div> | |
39 | + </div> | |
40 | + </div> | |
41 | + </div> | |
42 | + <div class="proposal-related--bottom text-center"> | |
43 | + <div class="proposal-related--share"> | |
44 | + <span>COMPARTILHE ESSA <b>PROPOSTA</b></span> | |
45 | + <div class="dropdown"> | |
46 | + <button id="dropdown-share-btn" class="btn btn-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="icon icon-social-share-small" aria-hidden="true"></span></button> | |
47 | + <social-share class="dropdown-menu dropdown-menu-right"></social-share> | |
48 | + </div> | |
49 | + </div> | |
50 | + <div class="proposal-related--ranking"> | |
51 | + <div class="proposal-related--ranking-inner"> | |
52 | + <span class="icon icon-small icon-ranking" aria-hidden="true"></span> | |
53 | + <span>Colocação nos resultados:</span> | |
54 | + <span>{{::vm.proposal.ranking_position}}º</span> | |
55 | + </div> | |
56 | + </div> | |
57 | + </div> | |
3 | 58 | </div> | ... | ... |
src/app/components/proposal-related/proposal-related.scss
... | ... | @@ -0,0 +1,77 @@ |
1 | +.proposal-related { | |
2 | + background-color: #f1f1f1; | |
3 | + border-radius: 5px; | |
4 | + // overflow: hidden; | |
5 | + | |
6 | + &.focus { | |
7 | + border: 7px solid #000; | |
8 | + border-radius: 12px; | |
9 | + border-color: #5E769C; | |
10 | + } | |
11 | + | |
12 | + &--top { | |
13 | + color: #fff; | |
14 | + font-weight: bold; | |
15 | + | |
16 | + border-top-left-radius: 5px; | |
17 | + border-top-right-radius: 5px; | |
18 | + overflow: hidden; | |
19 | + } | |
20 | + | |
21 | + &--middle { | |
22 | + padding: 30px; | |
23 | + } | |
24 | + | |
25 | + &--bottom { | |
26 | + border-bottom-left-radius: 5px; | |
27 | + border-bottom-right-radius: 5px; | |
28 | + // overflow: hidden; | |
29 | + border-bottom: 5px solid #dadada; | |
30 | + } | |
31 | + | |
32 | + &--theme { | |
33 | + padding: 10px 15px 5px 15px; | |
34 | + } | |
35 | + | |
36 | + &--program { | |
37 | + padding: 20px 15px; | |
38 | + } | |
39 | + | |
40 | + &--content { | |
41 | + padding-bottom: 20px; | |
42 | + } | |
43 | + | |
44 | + &--share { | |
45 | + padding: 15px 0; | |
46 | + background-color: #e8e8e8; | |
47 | + } | |
48 | + | |
49 | + &--ranking { | |
50 | + font-weight: bold; | |
51 | + padding: 10px 0; | |
52 | + background-color: #dadada; | |
53 | + } | |
54 | + | |
55 | + .action-label { | |
56 | + margin-top: 10px; | |
57 | + } | |
58 | + | |
59 | + .dropdown { | |
60 | + display: inline-block; | |
61 | + } | |
62 | + .dropdown-menu { | |
63 | + padding: 0; | |
64 | + margin: 0; | |
65 | + } | |
66 | + | |
67 | + .glyphicon { | |
68 | + color: #fff; | |
69 | + } | |
70 | + .icon-circle { | |
71 | + cursor: pointer; | |
72 | + | |
73 | + -webkit-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3); | |
74 | + -moz-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3); | |
75 | + box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.3); | |
76 | + } | |
77 | +} | ... | ... |
src/app/components/social-share/social-share.directive.js
0 → 100644
... | ... | @@ -0,0 +1,30 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('dialoga') | |
6 | + .directive('socialShare', socialShare); | |
7 | + | |
8 | + /** @ngInject */ | |
9 | + function socialShare() { | |
10 | + var directive = { | |
11 | + restrict: 'E', | |
12 | + templateUrl: 'app/components/social-share/social-share.html', | |
13 | + scope: { | |
14 | + }, | |
15 | + controller: SocialShareController, | |
16 | + controllerAs: 'vm', | |
17 | + bindToController: true | |
18 | + }; | |
19 | + | |
20 | + return directive; | |
21 | + | |
22 | + /** @ngInject */ | |
23 | + function SocialShareController($log) { | |
24 | + $log.debug('SocialShareController'); | |
25 | + | |
26 | + // var vm = this; | |
27 | + } | |
28 | + } | |
29 | + | |
30 | +})(); | ... | ... |
... | ... | @@ -0,0 +1,74 @@ |
1 | +<ul class="social-share list-inline"> | |
2 | + <li> | |
3 | + <a socialshare | |
4 | + socialshare-provider="facebook" | |
5 | + socialshare-url="http://dialoga.gov.br" | |
6 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
7 | + title="Compartilhar no Facebook"> | |
8 | + <span class="icon-circle icon-small icon-circle-social-facebook"><span class="icon icon-social-facebook"></span></span> | |
9 | + <span class="sr-only">Compartilhar no Facebook</span> | |
10 | + </a> | |
11 | + </li> | |
12 | + <li> | |
13 | + <a socialshare | |
14 | + socialshare-provider="twitter" | |
15 | + socialshare-url="http://dialoga.gov.br" | |
16 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
17 | + socialshare-hastags="dialogabrasil" | |
18 | + title="Compartilhar no Twitter"> | |
19 | + <span class="icon-circle icon-small icon-circle-social-twitter"><span class="icon icon-social-twitter"></span></span> | |
20 | + <span class="sr-only">Compartilhar no Twitter</span> | |
21 | + </a> | |
22 | + </li> | |
23 | + <li> | |
24 | + <a socialshare | |
25 | + socialshare-provider="gplus" | |
26 | + socialshare-url="http://dialoga.gov.br" | |
27 | + socialshare-text="Conheça o Dialoga Brasil. Dialoga Brasil | O País fica melhor quando VOCÊ PARTICIPA." | |
28 | + title="Compartilhar no Google Plus"> | |
29 | + <span class="icon-circle icon-small icon-circle-social-googleplus"><span class="icon icon-social-googleplus"></span></span> | |
30 | + <span class="sr-only">Compartilhar no Google Plus</span> | |
31 | + </a> | |
32 | + </li> | |
33 | + <li> | |
34 | + <a href="mailto:contato@dialoga.gov.br?subject=Conheça o Dialoga Brasil" title="Enviar por email"> | |
35 | + <span class="icon-circle icon-small icon-circle-social-whatsapp"><span class="icon icon-social-whatsapp"></span></span> | |
36 | + <span class="sr-only">Enviar por email</span> | |
37 | + </a> | |
38 | + </li> | |
39 | +</ul> | |
40 | +<!-- <div class="social-share"> | |
41 | + <ul> | |
42 | + <li> | |
43 | + <a social-facebook custom-url="http://dialoga.gov.br"> | |
44 | + <span class="icon icon-social-facebook"></span> | |
45 | + <span class="sr-only">Compartilhar no Facebook</span> | |
46 | + </a> | |
47 | + </li> | |
48 | + <li> | |
49 | + <a social-twitter custom-url="http://dialoga.gov.br" status="This status is #{{ ctrl.coolWord }}"> | |
50 | + <span class="icon icon-social-twitter"></span> | |
51 | + <span class="sr-only">Compartilhar no Twitter</span> | |
52 | + </a> | |
53 | + </li> | |
54 | + <li> | |
55 | + <a social-gplus custom-url="http://dialoga.gov.br"> | |
56 | + <span class="icon icon-social-google-plus"></span> | |
57 | + <span class="sr-only">Compartilhar no Google Plus</span> | |
58 | + </a> | |
59 | + </li> | |
60 | + <li> | |
61 | + <a href="whatsapp://send?text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank"> | |
62 | + <span class="icon icon-social-whatsapp"></span> | |
63 | + <span class="sr-only">Compartilhar no WhatsApp</span> | |
64 | + </a> | |
65 | + </li> | |
66 | + </ul> | |
67 | +</div> | |
68 | + --> | |
69 | +<!-- <ul> | |
70 | + <li><a href="http://dialoga.gov.br/#/programas/121492/sobre-o-programa" class="fb-share icon icon-facebook" data-caption="Brasil de Todas as Telas" data-description="Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso"><span class="fa fa-facebook"></span><span class="sr-only">Compartilhar no Facebook</span></a></li> | |
71 | + <li><a href="https://twitter.com/intent/tweet?url=http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa&text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso" target="_blank" class="tw-share icon icon-twitter popup"><span class="fa fa-twitter"></span><span class="sr-only">Compartilhar no Twitter</span></a></li> | |
72 | + <li><a href="https://plus.google.com/share?url=http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank" class="gp-share icon icon-gplus popup"><span class="fa fa-google-plus"></span><span class="sr-only">Compartilhar no Google Plus</span></a></li> | |
73 | + <li><a href="whatsapp://send?text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank" class="ws-share icon icon-whatsapp"><span class="fa fa-whatsapp"></span><span class="sr-only">Compartilhar no WhatsApp</span></a></li> | |
74 | +</ul> --> | ... | ... |
src/app/components/socialShare/socialShare.directive.js
... | ... | @@ -1,30 +0,0 @@ |
1 | -(function() { | |
2 | - 'use strict'; | |
3 | - | |
4 | - angular | |
5 | - .module('dialoga') | |
6 | - .directive('socialShare', socialShare); | |
7 | - | |
8 | - /** @ngInject */ | |
9 | - function socialShare() { | |
10 | - var directive = { | |
11 | - restrict: 'E', | |
12 | - templateUrl: 'app/components/socialShare/socialShare.html', | |
13 | - scope: { | |
14 | - }, | |
15 | - controller: SocialShareController, | |
16 | - controllerAs: 'vm', | |
17 | - bindToController: true | |
18 | - }; | |
19 | - | |
20 | - return directive; | |
21 | - | |
22 | - /** @ngInject */ | |
23 | - function SocialShareController($log) { | |
24 | - $log.debug('SocialShareController'); | |
25 | - | |
26 | - // var vm = this; | |
27 | - } | |
28 | - } | |
29 | - | |
30 | -})(); |
src/app/components/socialShare/socialShare.html
... | ... | @@ -1,35 +0,0 @@ |
1 | -<div class="social-share"> | |
2 | - <ul> | |
3 | - <li> | |
4 | - <a social-facebook custom-url="http://dialoga.gov.br"> | |
5 | - <span class="icon icon-social-facebook"></span> | |
6 | - <span class="sr-only">Compartilhar no Facebook</span> | |
7 | - </a> | |
8 | - </li> | |
9 | - <li> | |
10 | - <a social-twitter custom-url="http://dialoga.gov.br" status="This status is #{{ ctrl.coolWord }}"> | |
11 | - <span class="icon icon-social-twitter"></span> | |
12 | - <span class="sr-only">Compartilhar no Twitter</span> | |
13 | - </a> | |
14 | - </li> | |
15 | - <li> | |
16 | - <a social-gplus custom-url="http://dialoga.gov.br"> | |
17 | - <span class="icon icon-social-google-plus"></span> | |
18 | - <span class="sr-only">Compartilhar no Google Plus</span> | |
19 | - </a> | |
20 | - </li> | |
21 | - <li> | |
22 | - <a href="whatsapp://send?text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank"> | |
23 | - <span class="icon icon-social-whatsapp"></span> | |
24 | - <span class="sr-only">Compartilhar no WhatsApp</span> | |
25 | - </a> | |
26 | - </li> | |
27 | - </ul> | |
28 | -</div> | |
29 | - | |
30 | -<!-- <ul> | |
31 | - <li><a href="http://dialoga.gov.br/#/programas/121492/sobre-o-programa" class="fb-share icon icon-facebook" data-caption="Brasil de Todas as Telas" data-description="Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso"><span class="fa fa-facebook"></span><span class="sr-only">Compartilhar no Facebook</span></a></li> | |
32 | - <li><a href="https://twitter.com/intent/tweet?url=http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa&text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso" target="_blank" class="tw-share icon icon-twitter popup"><span class="fa fa-twitter"></span><span class="sr-only">Compartilhar no Twitter</span></a></li> | |
33 | - <li><a href="https://plus.google.com/share?url=http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank" class="gp-share icon icon-gplus popup"><span class="fa fa-google-plus"></span><span class="sr-only">Compartilhar no Google Plus</span></a></li> | |
34 | - <li><a href="whatsapp://send?text=Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso http%3A%2F%2Fdialoga.gov.br%2F%23%2Fprogramas%2F121492%2Fsobre-o-programa" target="_blank" class="ws-share icon icon-whatsapp"><span class="fa fa-whatsapp"></span><span class="sr-only">Compartilhar no WhatsApp</span></a></li> | |
35 | -</ul> --> |
src/app/components/socialShare/socialShare.scss
... | ... | @@ -1,24 +0,0 @@ |
1 | -.social-share { | |
2 | - ul { | |
3 | - display: inline-block; | |
4 | - vertical-align: middle; | |
5 | - list-style: none; | |
6 | - padding-left: 0; | |
7 | - } | |
8 | - | |
9 | - li{ | |
10 | - display: inline-block; | |
11 | - padding: 0 2px !important; | |
12 | - vertical-align: top; | |
13 | - } | |
14 | - | |
15 | - .social-share--description { | |
16 | - display: inline-block; | |
17 | - color: #000; | |
18 | - font-size: 12px; | |
19 | - font-weight: 300; | |
20 | - padding-right: 10px; | |
21 | - text-align: right; | |
22 | - vertical-align: middle; | |
23 | - } | |
24 | -} |
src/app/index.constants.js
src/app/index.module.js
... | ... | @@ -2,6 +2,6 @@ |
2 | 2 | 'use strict'; |
3 | 3 | |
4 | 4 | angular |
5 | - .module('dialoga', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ui.router', 'ngStorage', 'socialLinks', 'slugifier', 'ncy-angular-breadcrumb', 'ngMessages']); | |
5 | + .module('dialoga', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ui.router', 'ngStorage', '720kb.socialshare', 'slugifier', 'ncy-angular-breadcrumb', 'ngMessages']); | |
6 | 6 | |
7 | 7 | })(); | ... | ... |
src/app/index.scss
... | ... | @@ -132,8 +132,44 @@ body { |
132 | 132 | } |
133 | 133 | } |
134 | 134 | |
135 | + | |
136 | +.social-share { | |
137 | + min-width: 200px; | |
138 | + background-color: #eee; | |
139 | + padding: 5px; | |
140 | + height: 47px; | |
141 | + | |
142 | + &:after { | |
143 | + clear: both; | |
144 | + } | |
145 | + | |
146 | + li { | |
147 | + float: left; | |
148 | + padding: 0; | |
149 | + margin: 0; | |
150 | + width: 45px; | |
151 | + text-align: center; | |
152 | + | |
153 | + & > a { | |
154 | + padding: 0; | |
155 | + } | |
156 | + | |
157 | + &:first-child { | |
158 | + // margin-left: 5px; | |
159 | + } | |
160 | + } | |
161 | + | |
162 | + .icon { | |
163 | + transform: scale(0.7); | |
164 | + position: relative; | |
165 | + top: -10px; | |
166 | + left: -10px; | |
167 | + } | |
168 | +} | |
169 | + | |
135 | 170 | .icon { |
136 | - display: block; | |
171 | + display: inline-block; | |
172 | + vertical-align: middle; | |
137 | 173 | } |
138 | 174 | |
139 | 175 | .icon-wrapper-rounded { |
... | ... | @@ -141,11 +177,53 @@ body { |
141 | 177 | border-radius: 100%; |
142 | 178 | } |
143 | 179 | |
180 | +.icon-circle { | |
181 | + display: inline-block; | |
182 | + vertical-align: middle; | |
183 | + width: 50px; | |
184 | + height: 50px; | |
185 | + font-size: 20px; | |
186 | + text-align: center; | |
187 | + // border: 1px solid #eee; | |
188 | + border-radius: 100%; | |
189 | + overflow: hidden; | |
190 | + | |
191 | + &.icon-small { | |
192 | + width: 35px; | |
193 | + height: 35px; | |
194 | + } | |
195 | + | |
196 | + .vote_for &, | |
197 | + .next &, | |
198 | + .vote_against & { | |
199 | + padding-top: 12px; | |
200 | + } | |
201 | + | |
202 | + .vote_for & { | |
203 | + background-color: #4AC97A; | |
204 | + } | |
205 | + .next & { | |
206 | + background-color: #EEB453; | |
207 | + } | |
208 | + .vote_against & { | |
209 | + background-color: #EC4C68; | |
210 | + } | |
211 | +} | |
212 | + | |
213 | +.icon-circle-social-facebook {background-color: #537ab5; } | |
214 | +.icon-circle-social-twitter {background-color: #77cbef; } | |
215 | +.icon-circle-social-googleplus {background-color: #d23b00; } | |
216 | +.icon-circle-social-whatsapp {background-color: #10ad08; } | |
217 | +.icon-circle-social-youtube {background-color: #c63635; } | |
218 | +.icon-circle-social-flickr {background-color: #eaeaea; } | |
219 | +.icon-circle-mail {background-color: #ecb24e; } | |
220 | + | |
144 | 221 | // Theme |
145 | 222 | @each $category, $color in $categories { |
146 | 223 | .#{$category} { |
147 | 224 | .color-theme-fg { color: $color; } |
148 | 225 | .color-theme-bg { background-color: $color;} |
226 | + .color-theme-bg-darker { background-color: darken($color, 10%);} | |
149 | 227 | |
150 | 228 | .contraste & .color-theme-fg { color: #fff; } |
151 | 229 | .contraste & .color-theme-bg { background-color: #000;} | ... | ... |
src/app/pages/header/header.html
src/app/pages/header/header.scss
1 | -.accessibility-wrapper { | |
2 | - .icon-user { | |
3 | - display: inline-block; | |
4 | - vertical-align: middle; | |
5 | - width: 26px; | |
6 | - height: 26px; | |
7 | - border: 1px solid #ccc; | |
8 | - border-radius: 100%; | |
9 | - background-position: 1px 0px; | |
1 | +#header { | |
10 | 2 | |
11 | - .contraste & { | |
12 | - // XXX: chage for dinamic handler | |
13 | - background-position: -0px -24px; | |
14 | - } | |
3 | + @media (max-width: $screen-md) { | |
4 | + | |
15 | 5 | } |
16 | 6 | -} |
7 | +} | |
17 | 8 | \ No newline at end of file | ... | ... |
src/app/pages/inicio/inicio.controller.js
... | ... | @@ -53,20 +53,23 @@ |
53 | 53 | } |
54 | 54 | |
55 | 55 | loadAfterHome(); |
56 | - | |
56 | + | |
57 | 57 | vm.loading = false; |
58 | 58 | }, function(error) { |
59 | 59 | vm.$log.error('Error on getHome.', error); |
60 | 60 | }); |
61 | 61 | |
62 | + // Load event list | |
63 | + vm.DialogaService.getEvents({}, function(events) { | |
64 | + vm.events = events; | |
65 | + vm.loadingEvents = false; | |
66 | + }, function(error) { | |
67 | + vm.$log.error('Error on getEvents.', error); | |
68 | + vm.loadingEvents = false; | |
69 | + vm.eventsError = true; | |
70 | + }); | |
71 | + | |
62 | 72 | function loadAfterHome () { |
63 | - // Load event list | |
64 | - // vm.DialogaService.getEvents(function(data) { | |
65 | - // vm.events = data; | |
66 | - // vm.loadingEvents = false; | |
67 | - // }, function(error) { | |
68 | - // vm.$log.error('Error on getEvents.', error); | |
69 | - // }); | |
70 | 73 | |
71 | 74 | // Load theme list |
72 | 75 | vm.DialogaService.getThemes(function(data) { |
... | ... | @@ -77,9 +80,9 @@ |
77 | 80 | }); |
78 | 81 | |
79 | 82 | // Load program list |
80 | - vm.DialogaService.getProgramsRandom(function(data) { | |
83 | + vm.DialogaService.getProgramsRandom({}, function(data) { | |
81 | 84 | vm.programs = vm.article.children; |
82 | - vm.filtredPrograms = data; | |
85 | + vm.filtredPrograms = data.articles; | |
83 | 86 | vm.loadingPrograms = false; |
84 | 87 | }, function(error) { |
85 | 88 | vm.$log.error('Error on getPrograms.', error); | ... | ... |
src/app/pages/inicio/inicio.html
... | ... | @@ -23,7 +23,7 @@ |
23 | 23 | |
24 | 24 | <section class="section-event"> |
25 | 25 | <div ng-if="pageInicio.events"> |
26 | - <event-list events="[]"></event-list> | |
26 | + <event-list events="pageInicio.events"></event-list> | |
27 | 27 | </div> |
28 | 28 | <div ng-if="!pageInicio.events && pageInicio.loadingEvents" class="container"> |
29 | 29 | <div class="row"> |
... | ... | @@ -48,7 +48,7 @@ |
48 | 48 | <div ng-if="pageInicio.loading && !pageInicio.error"> |
49 | 49 | <div class="alert alert-info" role="alert">Carregando conteúdo...</div> |
50 | 50 | </div> |
51 | - | |
51 | + | |
52 | 52 | <div ng-if="pageInicio.error"> |
53 | 53 | <div class="alert alert-danger" role="alert"> |
54 | 54 | Erro ao carregar o conteúdo principal. |
... | ... | @@ -63,6 +63,23 @@ |
63 | 63 | <div class="container"> |
64 | 64 | <div id="lista-de-programas" class="row"> |
65 | 65 | <div class="col-sm-4 col-md-3"> |
66 | + <div class="row visible-xs"> | |
67 | + <div class="col-xs-12"> | |
68 | + <div class="input-group input-group-lg input-group-search"> | |
69 | + <label for="articleQueryFilter" class="control-label sr-only">Buscar programas:</label> | |
70 | + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageInicio.query" placeholder="Buscar programas" aria-label="Buscar programas" > | |
71 | + <span class="input-group-btn"> | |
72 | + <button type="button" class="btn btn-default" ng-click="pageInicio.search()"> | |
73 | + <span class="icon-circle icon-small color-theme-common-bg"> | |
74 | + <span class="glyphicon glyphicon-search"></span> | |
75 | + </span> | |
76 | + <span class="sr-only">Buscar</span> | |
77 | + </button> | |
78 | + </span> | |
79 | + </div> | |
80 | + <br/> | |
81 | + </div> | |
82 | + </div> | |
66 | 83 | <div ng-if="pageInicio.themes"> |
67 | 84 | <category-list categories="pageInicio.themes" selected-category="pageInicio.selectedTheme"></category-list> |
68 | 85 | </div> |
... | ... | @@ -78,32 +95,46 @@ |
78 | 95 | </div> |
79 | 96 | </div> |
80 | 97 | <div class="col-sm-8 col-md-9"> |
81 | - <div class="row"> | |
82 | - <header class="header"> | |
83 | - <h2>Conheça os programas <span class="small">({{pageInicio.filtredPrograms.length}}/{{::pageInicio.programs.length}})</span></h2> | |
84 | - <button type="button" class="btn btn-link" ng-click="pageInicio.showAll($event)"> | |
85 | - <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> Ver todos os {{::pageInicio.programs.length}} programas | |
86 | - </button> | |
87 | - </header> | |
98 | + <div class="row hidden-xs"> | |
99 | + <div class="col-xs-12"> | |
100 | + <div class="input-group input-group-lg input-group-search"> | |
101 | + <label for="articleQueryFilter" class="control-label sr-only">Buscar programas:</label> | |
102 | + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pageInicio.query" placeholder="Buscar programas" aria-label="Buscar programas" > | |
103 | + <span class="input-group-btn"> | |
104 | + <button type="button" class="btn btn-default" ng-click="pageInicio.search()"> | |
105 | + <span class="icon-circle icon-small color-theme-common-bg"> | |
106 | + <span class="glyphicon glyphicon-search"></span> | |
107 | + </span> | |
108 | + <span class="sr-only">Buscar</span> | |
109 | + </button> | |
110 | + </span> | |
111 | + </div> | |
112 | + </div> | |
88 | 113 | </div> |
89 | 114 | <div class="row"> |
90 | - <div class="col-xs-6 col-sm-7 col-md-9"> | |
91 | - <label for="articleQueryFilter" class="control-label sr-only">Filtrar programas:</label> | |
92 | - <input id="articleQueryFilter" type="search" class="form-control" ng-model="pageInicio.query" placeholder="Filtrar programas" aria-label="Filtrar programas" > | |
115 | + <div class="col-sm-12"> | |
116 | + <header class="header"> | |
117 | + <h2>Programas</h2> | |
118 | + <button type="button" class="btn btn-link" ng-click="pageInicio.showAll($event)"> | |
119 | + <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> Ver todos os {{::pageInicio.programs.length}} programas | |
120 | + </button> | |
121 | + </header> | |
93 | 122 | </div> |
94 | 123 | </div> |
95 | 124 | |
96 | - <div ng-if="pageInicio.programs"> | |
97 | - <article-grid articles="pageInicio.filtredPrograms"></article-grid> | |
98 | - </div> | |
99 | - <div ng-if="!pageInicio.programs && pageInicio.loadingPrograms"> | |
100 | - <div class="alert alert-info" role="alert"> | |
101 | - Carregando programas. | |
125 | + <div class="row"> | |
126 | + <div class="col-sm-12" ng-if="pageInicio.programs"> | |
127 | + <article-grid articles="pageInicio.filtredPrograms"></article-grid> | |
102 | 128 | </div> |
103 | - </div> | |
104 | - <div ng-if="!pageInicio.programs && pageInicio.programsError"> | |
105 | - <div class="alert alert-danger" role="alert"> | |
106 | - Não foi possível carregar a lista de programas neste momento. | |
129 | + <div ng-if="!pageInicio.programs && pageInicio.loadingPrograms"> | |
130 | + <div class="alert alert-info" role="alert"> | |
131 | + Carregando programas. | |
132 | + </div> | |
133 | + </div> | |
134 | + <div ng-if="!pageInicio.programs && pageInicio.programsError"> | |
135 | + <div class="alert alert-danger" role="alert"> | |
136 | + Não foi possível carregar a lista de programas neste momento. | |
137 | + </div> | |
107 | 138 | </div> |
108 | 139 | </div> |
109 | 140 | </div> | ... | ... |
src/app/pages/inicio/inicio.scss
1 | 1 | .page--inicio { |
2 | - margin-top: 20px; | |
2 | + | |
3 | + .section-video { | |
4 | + padding: 20px 0; | |
5 | + // background-color: #919191; | |
6 | + } | |
3 | 7 | |
4 | 8 | .section--articles { |
5 | 9 | |
6 | 10 | .header { |
7 | 11 | position: relative; |
8 | - height: 40px; | |
9 | - margin-bottom: 10px; | |
10 | 12 | |
11 | 13 | button { |
12 | 14 | position: absolute; |
... | ... | @@ -22,6 +24,20 @@ |
22 | 24 | } |
23 | 25 | } |
24 | 26 | } |
27 | + | |
28 | + .input-group-search { | |
29 | + .icon-circle { | |
30 | + color: #fff; | |
31 | + padding: 5px; | |
32 | + margin-top: -5px; | |
33 | + } | |
34 | + button { | |
35 | + border-left: none; | |
36 | + } | |
37 | + } | |
38 | + .input-group-btn { | |
39 | + background-color: #fff; | |
40 | + } | |
25 | 41 | } |
26 | 42 | |
27 | 43 | .section-gray { | ... | ... |
src/app/pages/programas/programa-content.controller.js
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | .controller('ProgramaContentPageController', ProgramaContentPageController); |
7 | 7 | |
8 | 8 | /** @ngInject */ |
9 | - function ProgramaContentPageController(DialogaService, $state, $scope, $rootScope, $log) { | |
9 | + function ProgramaContentPageController(DialogaService, $state, $scope, $rootScope, $element, $log) { | |
10 | 10 | $log.debug('ProgramaContentPageController'); |
11 | 11 | |
12 | 12 | var vm = this; |
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | vm.$state = $state; |
16 | 16 | vm.$scope = $scope; |
17 | 17 | vm.$rootScope = $rootScope; |
18 | + vm.$element = $element; | |
18 | 19 | vm.$log = $log; |
19 | 20 | |
20 | 21 | vm.init(); |
... | ... | @@ -54,33 +55,42 @@ |
54 | 55 | } |
55 | 56 | |
56 | 57 | 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 | - ]; | |
58 | + vm.proposals = data.articles; | |
59 | + vm.proposalsTopRated = vm.proposals.slice(0, 3); | |
63 | 60 | }, function (error) { |
64 | 61 | vm.$log.error(error); |
65 | 62 | }); |
66 | - | |
63 | + | |
64 | + // get random proposal | |
65 | + vm.DialogaService.getProposalsByTopicId(vm.article.id, { | |
66 | + 'order': 'random()', | |
67 | + 'limit': '1' | |
68 | + }, function(data){ | |
69 | + vm.randomProposal = data.articles[0]; | |
70 | + }, function (error) { | |
71 | + vm.$log.error(error); | |
72 | + }); | |
73 | + | |
67 | 74 | vm.loading = false; |
68 | 75 | }, function(error) { |
69 | 76 | vm.$log.error(error); |
70 | 77 | vm.error = error; |
71 | 78 | vm.loading = false; |
72 | - | |
79 | + | |
73 | 80 | // vm.$log.info('Rollback to home page.'); |
74 | 81 | // vm.$state.go('inicio', {}, {location: true}); |
75 | 82 | }); |
76 | - | |
77 | 83 | }; |
78 | 84 | |
79 | 85 | ProgramaContentPageController.prototype.attachListeners = function() { |
80 | 86 | var vm = this; |
81 | 87 | |
82 | 88 | vm.$scope.$on('proposal-carousel:toProposals', function() { |
83 | - vm.$log.warn('TODO: handle see proposals / ranking'); | |
89 | + if(!vm._proposal_list){ | |
90 | + vm._proposal_list = vm.$element.find('.proposal-ranking-section'); | |
91 | + } | |
92 | + | |
93 | + vm._proposal_list.slideToggle(); | |
84 | 94 | }); |
85 | 95 | }; |
86 | 96 | ... | ... |
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> |
... | ... | @@ -41,10 +41,8 @@ |
41 | 41 | <p>Lorem ipsum dolor sit amet, ea veniam mucius ocurreret vix, ius ex nisl vidisse partiendo. Blandit nominavi cum ei, paulo quaestio his ei, eum minim salutandi in. Civibus albucius in quo, et eam posse facilisis. Debet suavitate sea ut, his ei feugiat fastidii eleifend. Quo ex quando maiestatis voluptatum, mel te perpetua maiestatis, sit ceteros legendos deserunt ea. Enim dolores moderatius eu pro, ad quo ignota aliquid meliore.</p> |
42 | 42 | </div> |
43 | 43 | <div class="program-preview--share"> |
44 | - <ul class="list-inline"> | |
45 | - <li>Compartilhe este programa:</li> | |
46 | - <li><social-share class="program-preview--share-directive"></social-share></li> | |
47 | - </ul> | |
44 | + <div class="program-preview--share-label">Compartilhe este programa:</div> | |
45 | + <social-share class="program-preview--share-directive"></social-share> | |
48 | 46 | </div> |
49 | 47 | <div class="program-preview--make-proposal"> |
50 | 48 | <div class="row"> |
... | ... | @@ -60,15 +58,22 @@ |
60 | 58 | </div> |
61 | 59 | <div class="col-md-4"> |
62 | 60 | <div class="row"> |
63 | - <div class="col-xs-12"> | |
61 | + <div class="col-xs-12" ng-if="pageProgramaContent.proposalsTopRated && pageProgramaContent.proposalsTopRated.length > 0"> | |
64 | 62 | <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> | |
63 | + <proposal-carousel proposals="pageProgramaContent.proposalsTopRated"></proposal-carousel> | |
68 | 64 | </div> |
69 | - <div class="col-xs-12"> | |
65 | + <div class="col-xs-12" ng-if="pageProgramaContent.randomProposal"> | |
70 | 66 | <h3 class="color-theme-fg">Propostas nesse programa</h3> |
71 | - <proposal-related article="pageProgramaContent.article"></proposal-related> | |
67 | + <proposal-related proposal="pageProgramaContent.randomProposal" topic="pageProgramaContent.article" category="pageProgramaContent.category"></proposal-related> | |
68 | + </div> | |
69 | + <div class="col-xs-12" ng-if="!pageProgramaContent.randomProposal && !(pageProgramaContent.proposalsTopRated && pageProgramaContent.proposalsTopRated.length > 0)"> | |
70 | + <h3>Programas sem propostas</h3> | |
71 | + <p> | |
72 | + Este programa ainda não possui nenhuma proposta. | |
73 | + <div class="button--themed"> | |
74 | + <button type="button" class="btn btn-block" ng-click="pageProgramaContent.makeProposal()">Faça uma proposta</button> | |
75 | + </div> | |
76 | + </p> | |
72 | 77 | </div> |
73 | 78 | </div> |
74 | 79 | </div> |
... | ... | @@ -77,17 +82,17 @@ |
77 | 82 | </div> |
78 | 83 | </section> |
79 | 84 | |
80 | - <section class="proposal-ranking-section"> | |
85 | + <section class="proposal-ranking-section" style="display:none;" ng-if="pageProgramaContent.proposals && pageProgramaContent.proposals.length > 0"> | |
81 | 86 | <div class="container"> |
82 | 87 | <div class="proposal-ranking-section-header"> |
83 | 88 | <h3 class="color-theme-fg">Resultados de propostas mais votadas</h3> |
84 | 89 | </div> |
85 | - <div class="proposal-ranking-section-table" ng-if="pageProgramaContent.proposals"> | |
90 | + <div class="proposal-ranking-section-table"> | |
86 | 91 | <proposal-list proposals="pageProgramaContent.proposals"></proposal-list> |
87 | 92 | </div> |
88 | 93 | </div> |
89 | 94 | </section> |
90 | - | |
95 | + | |
91 | 96 | <section class="section-content"> |
92 | 97 | <article class="program-content" ng-if="pageProgramaContent.article"> |
93 | 98 | <div ng-bind-html="pageProgramaContent.article.body"></div> | ... | ... |
src/app/pages/programas/programas.scss
src/assets/images/icons/ranking.png
1.67 KB
src/assets/images/icons/sprite.png
106 KB