Commit b035251af8a0f5b6982474a8b54b6978b78d4f5d
1 parent
6ad695da
Exists in
master
and in
8 other branches
Refact components. More generic directives names
Showing
37 changed files
with
1584 additions
and
1105 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,68 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .directive('articleBar', articleBar); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function articleBar() { | |
| 10 | + var directive = { | |
| 11 | + restrict: 'E', | |
| 12 | + templateUrl: 'app/components/article-bar/article-bar.html', | |
| 13 | + scope: { | |
| 14 | + category: '=', | |
| 15 | + categories: '=' | |
| 16 | + }, | |
| 17 | + controller: ArticleBarController, | |
| 18 | + controllerAs: 'vm', | |
| 19 | + bindToController: true | |
| 20 | + }; | |
| 21 | + | |
| 22 | + return directive; | |
| 23 | + | |
| 24 | + /** @ngInject */ | |
| 25 | + function ArticleBarController($scope, $rootScope, $state, $log) { | |
| 26 | + $log.debug('ArticleBarController'); | |
| 27 | + | |
| 28 | + var vm = this; | |
| 29 | + | |
| 30 | + vm.$scope = $scope; | |
| 31 | + vm.$rootScope = $rootScope; | |
| 32 | + vm.$state = $state; | |
| 33 | + vm.theme = 'blue'; | |
| 34 | + | |
| 35 | + // if(!vm.category) { | |
| 36 | + // throw 'article bar without category'; | |
| 37 | + // } | |
| 38 | + | |
| 39 | + // if(!vm.categories) { | |
| 40 | + // throw 'article bar without categories list'; | |
| 41 | + // } | |
| 42 | + | |
| 43 | + vm.currentCategory = vm.category; | |
| 44 | + | |
| 45 | + vm.$scope.$watch('vm.currentCategory', function(newValue, oldValue){ | |
| 46 | + if(newValue !== oldValue){ | |
| 47 | + vm.$state.go('inicio', { | |
| 48 | + tema: newValue.slug | |
| 49 | + }, { | |
| 50 | + location: true | |
| 51 | + }); | |
| 52 | + } | |
| 53 | + }); | |
| 54 | + | |
| 55 | + vm.goBack = function (){ | |
| 56 | + var vm = this; | |
| 57 | + var prevState = vm.$rootScope.$previousState; | |
| 58 | + if(prevState && prevState.state.name){ | |
| 59 | + vm.$state.go(prevState.state.name, prevState.params); | |
| 60 | + } else { | |
| 61 | + vm.$state.go('inicio'); | |
| 62 | + } | |
| 63 | + }; | |
| 64 | + } | |
| 65 | + | |
| 66 | + } | |
| 67 | + | |
| 68 | +})(); | ... | ... |
| ... | ... | @@ -0,0 +1,23 @@ |
| 1 | +<div class="article-bar" ng-class="vm.theme"> | |
| 2 | + <div class="navbar"> | |
| 3 | + <div class="navbar-header"> | |
| 4 | + <button class="article-bar--item btn btn-link" ng-click="vm.goBack()"> | |
| 5 | + <!-- <span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span> --> | |
| 6 | + <span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span> | |
| 7 | + Voltar | |
| 8 | + </button> | |
| 9 | + </div> | |
| 10 | + <div class="navbar-left" ng-if="vm.category"> | |
| 11 | + <button class="article-bar--item article-bar--category-button btn btn-link"> | |
| 12 | + <span class="icon" ng-class="'icon-tema-' + vm.category.slug"></span> | |
| 13 | + <span class="category-name">{{::vm.category.name}}</span> | |
| 14 | + </button> | |
| 15 | + </div> | |
| 16 | + <div class="navbar-right" ng-if="vm.categories"> | |
| 17 | + <label for="selectCategory" class="control-label sr-only" title="Selecione uma opção para acessar os programas do tema">Temas:</label> | |
| 18 | + <select id="selectCategory" name="selectCategory" class="article-bar--item form-control" ng-model="vm.currentCategory" ng-options="category.name for category in vm.categories track by category.slug"> | |
| 19 | + </select> | |
| 20 | + </div> | |
| 21 | + </div> | |
| 22 | + </div> | |
| 23 | +</div> | ... | ... |
| ... | ... | @@ -0,0 +1,52 @@ |
| 1 | +.article-bar { | |
| 2 | + position: relative; | |
| 3 | + background-color: #0042b1; | |
| 4 | + | |
| 5 | + .btn { | |
| 6 | + color: #fff; | |
| 7 | + font-weight: bold; | |
| 8 | + } | |
| 9 | + | |
| 10 | + &--item { | |
| 11 | + margin: 8px 0; | |
| 12 | + | |
| 13 | + @media (max-width: $screen-xs) { | |
| 14 | + margin: 8px; | |
| 15 | + } | |
| 16 | + | |
| 17 | + } | |
| 18 | + | |
| 19 | + &--category-button { | |
| 20 | + position: relative; | |
| 21 | + width: 125px; | |
| 22 | + text-align: right; | |
| 23 | + margin-left: 10px; | |
| 24 | + font-size: 24px; | |
| 25 | + line-height: 20px; | |
| 26 | + font-family: 'Open Sans'; | |
| 27 | + | |
| 28 | + .icon { | |
| 29 | + display: inline-block; | |
| 30 | + margin: -40px -35px -40px -50px; | |
| 31 | + transform: scale(.37); | |
| 32 | + } | |
| 33 | + } | |
| 34 | + | |
| 35 | + .navbar { | |
| 36 | + margin-bottom: 0; | |
| 37 | + } | |
| 38 | + | |
| 39 | + .navbar-right { | |
| 40 | + margin-right: 15px; | |
| 41 | + } | |
| 42 | + | |
| 43 | + @each $category, $color in $categories { | |
| 44 | + &.#{$category} { | |
| 45 | + background-color: $color; | |
| 46 | + } | |
| 47 | + } | |
| 48 | + | |
| 49 | + .contraste & { | |
| 50 | + background-color: #262626; | |
| 51 | + } | |
| 52 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,84 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .directive('articleBox', articleBox); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function articleBox($rootScope) { | |
| 10 | + | |
| 11 | + /** @ngInject */ | |
| 12 | + function ArticleBoxController(ArticleService, $scope, $state, Slug, $log) { | |
| 13 | + $log.debug('ArticleBoxController'); | |
| 14 | + | |
| 15 | + var vm = this; | |
| 16 | + vm.ArticleService = ArticleService; | |
| 17 | + vm.$scope = $scope; | |
| 18 | + vm.$state = $state; | |
| 19 | + vm.Slug = Slug; | |
| 20 | + vm.$log = $log; | |
| 21 | + | |
| 22 | + vm.init(); | |
| 23 | + } | |
| 24 | + | |
| 25 | + ArticleBoxController.prototype.init = function () { | |
| 26 | + var vm = this; | |
| 27 | + | |
| 28 | + if(!vm.article.slug){ | |
| 29 | + vm.article.slug = vm.Slug.slugify(vm.article.title); | |
| 30 | + } | |
| 31 | + | |
| 32 | + if(!vm.category){ | |
| 33 | + vm.category = vm.article.categories[0]; | |
| 34 | + } | |
| 35 | + | |
| 36 | + if(!vm.banner){ | |
| 37 | + vm.banner = { | |
| 38 | + src: $rootScope.basePath + vm.article.image.url, | |
| 39 | + alt: 'Imagem de destaque do conteúdo' | |
| 40 | + }; | |
| 41 | + } | |
| 42 | + | |
| 43 | + // if(vm.article.color && !vm.article.bgColor){ | |
| 44 | + // // 15% more darker | |
| 45 | + // vm.article.colorDarker = window.ColorLuminance(vm.article.color, 0.15); | |
| 46 | + // } | |
| 47 | + }; | |
| 48 | + | |
| 49 | + ArticleBoxController.prototype.showContent = function () { | |
| 50 | + var vm = this; | |
| 51 | + | |
| 52 | + vm.$state.go('programa-conheca', { | |
| 53 | + slug: vm.article.slug | |
| 54 | + }, { | |
| 55 | + location: true | |
| 56 | + }); | |
| 57 | + }; | |
| 58 | + | |
| 59 | + ArticleBoxController.prototype.showPreview = function () { | |
| 60 | + var vm = this; | |
| 61 | + | |
| 62 | + vm.$state.go('programa', { | |
| 63 | + slug: vm.article.slug | |
| 64 | + }, { | |
| 65 | + location: true | |
| 66 | + }); | |
| 67 | + }; | |
| 68 | + | |
| 69 | + var directive = { | |
| 70 | + restrict: 'E', | |
| 71 | + templateUrl: 'app/components/article-box/article-box.html', | |
| 72 | + scope: { | |
| 73 | + article: '=' | |
| 74 | + }, | |
| 75 | + controller: ArticleBoxController, | |
| 76 | + controllerAs: 'vm', | |
| 77 | + bindToController: true | |
| 78 | + }; | |
| 79 | + | |
| 80 | + | |
| 81 | + return directive; | |
| 82 | + } | |
| 83 | + | |
| 84 | +})(); | ... | ... |
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +<article class="article-box" ng-click="vm.showPreview()" ng-class="vm.category.slug"> | |
| 2 | + <div> | |
| 3 | + <h2 class="article-box--category">{{vm.category.name}}</h2> | |
| 4 | + <div class="article-box--image-wrapper"> | |
| 5 | + <!-- <img class="article-box--image img-responsive" ng-src="{{vm.banner.src}}" alt="{{vm.banner.alt}}" /> --> | |
| 6 | + <div class="article-box--image" ng-style="{'background-image':'url( {{vm.banner.src}} )'}"></div> | |
| 7 | + </div> | |
| 8 | + <div class="article-box--title"> | |
| 9 | + <h1>{{::vm.article.title}}</h1> | |
| 10 | + </div> | |
| 11 | + <div class="article-box--abstract" ng-bind-html="vm.article.abstract"></div> | |
| 12 | + <div class="button--themed"> | |
| 13 | + <button class="btn btn-block"> | |
| 14 | + Participe | |
| 15 | + </button> | |
| 16 | + </div> | |
| 17 | + </div> | |
| 18 | +</article> | ... | ... |
| ... | ... | @@ -0,0 +1,146 @@ |
| 1 | +$article-box-space: 20px; | |
| 2 | + | |
| 3 | +.article-box { | |
| 4 | + cursor: pointer; | |
| 5 | + background-color: #fff; | |
| 6 | + margin-top: $article-box-space; | |
| 7 | + margin-bottom: $article-box-space; | |
| 8 | + border-radius: 3px; | |
| 9 | + overflow: hidden; | |
| 10 | + | |
| 11 | + .contraste & { | |
| 12 | + color: #fff; | |
| 13 | + background-color: #262626; | |
| 14 | + } | |
| 15 | + | |
| 16 | + &--category { | |
| 17 | + font-size: 14px; | |
| 18 | + font-weight: bold; | |
| 19 | + text-transform: uppercase; | |
| 20 | + line-height: 22px; | |
| 21 | + display: block; | |
| 22 | + height: 30px; | |
| 23 | + margin: 0; | |
| 24 | + padding: 5px $article-box-space; | |
| 25 | + color: #ffffff; | |
| 26 | + | |
| 27 | + @each $category, $color in $categories { | |
| 28 | + .#{$category} & { | |
| 29 | + background-color: $color; | |
| 30 | + } | |
| 31 | + } | |
| 32 | + | |
| 33 | + .contraste & { | |
| 34 | + background-color: #262626; | |
| 35 | + } | |
| 36 | + } | |
| 37 | + | |
| 38 | + &--title { | |
| 39 | + | |
| 40 | + padding: 0 $article-box-space; | |
| 41 | + | |
| 42 | + h1 { | |
| 43 | + font-size: 18px; | |
| 44 | + font-weight: bold; | |
| 45 | + margin: 0 0 $article-box-space 0; | |
| 46 | + display: table-cell; | |
| 47 | + vertical-align: middle; | |
| 48 | + | |
| 49 | + // Altura das linhas do abstract | |
| 50 | + $hLine: 20px; | |
| 51 | + // default | |
| 52 | + height: $hLine * 2; | |
| 53 | + | |
| 54 | + @media (max-width: $screen-xs) { | |
| 55 | + // height: $hLine * 3; | |
| 56 | + height: auto; | |
| 57 | + } | |
| 58 | + | |
| 59 | + @media (min-width: $screen-xs + 1) { | |
| 60 | + // height: $hLine * 2; | |
| 61 | + height: auto; | |
| 62 | + } | |
| 63 | + | |
| 64 | + @media (min-width: $screen-sm + 1) { | |
| 65 | + height: $hLine * 2; | |
| 66 | + } | |
| 67 | + | |
| 68 | + @media (min-width: $screen-md + 1) { | |
| 69 | + height: $hLine * 2; | |
| 70 | + } | |
| 71 | + } | |
| 72 | + } | |
| 73 | + | |
| 74 | + &--abstract { | |
| 75 | + padding: 0 $article-box-space; | |
| 76 | + display: table-cell; | |
| 77 | + vertical-align: middle; | |
| 78 | + | |
| 79 | + // Altura das linhas do abstract | |
| 80 | + $pLine: 20px; | |
| 81 | + // 1 linha: 19px -> 20 | |
| 82 | + // 2 linhas: 38px -> 40 | |
| 83 | + // 3 linhas: 57px -> 60 | |
| 84 | + // 4 linhas: 76px -> 80 | |
| 85 | + | |
| 86 | + height: $pLine * 2; // default | |
| 87 | + | |
| 88 | + @media (max-width: $screen-xs) { | |
| 89 | + // height: $pLine * 4; | |
| 90 | + height: auto; | |
| 91 | + } | |
| 92 | + | |
| 93 | + @media (min-width: $screen-xs + 1) { | |
| 94 | + // height: $pLine * 3; | |
| 95 | + height: auto; | |
| 96 | + } | |
| 97 | + | |
| 98 | + @media (min-width: $screen-sm + 1) { | |
| 99 | + height: $pLine * 4; | |
| 100 | + } | |
| 101 | + | |
| 102 | + @media (min-width: $screen-md + 1) { | |
| 103 | + height: $pLine * 3; | |
| 104 | + } | |
| 105 | + | |
| 106 | + p { margin: 0; } | |
| 107 | + } | |
| 108 | + | |
| 109 | + &--image-wrapper { | |
| 110 | + position: relative; | |
| 111 | + // width: 100%; | |
| 112 | + // width: 370px; | |
| 113 | + // height: 170px; | |
| 114 | + | |
| 115 | + overflow: hidden; | |
| 116 | + // text-align: center; | |
| 117 | + min-height: 170px; | |
| 118 | + } | |
| 119 | + | |
| 120 | + &--image { | |
| 121 | + min-height: 170px; | |
| 122 | + background-position: center; | |
| 123 | + background-size: cover; | |
| 124 | + background-repeat: no-repeat; | |
| 125 | + | |
| 126 | + -webkit-transition: all $time ease-in-out; | |
| 127 | + -moz-transition: all $time ease-in-out; | |
| 128 | + -o-transition: all $time ease-in-out; | |
| 129 | + transition: all $time ease-in-out; | |
| 130 | + } | |
| 131 | + | |
| 132 | + &:hover { | |
| 133 | + background-color: #d9d9d9; | |
| 134 | + | |
| 135 | + .article-box--image { | |
| 136 | + -webkit-transform: scale($scale); /* prefixo para browsers webkit */ | |
| 137 | + -moz-transform: scale($scale); /* prefixo para browsers gecko */ | |
| 138 | + -o-transform: scale($scale); /* prefixo para opera */ | |
| 139 | + transform: scale($scale); | |
| 140 | + } | |
| 141 | + | |
| 142 | + .contraste & { | |
| 143 | + background-color: #262626; | |
| 144 | + } | |
| 145 | + } | |
| 146 | +} | ... | ... |
src/app/components/article-content/article-content.directive.js
0 → 100644
src/app/components/article-grid/article-grid.directive.js
0 → 100644
| ... | ... | @@ -0,0 +1,322 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .directive('articleGrid', articleGrid); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function articleGrid() { | |
| 10 | + | |
| 11 | + /** @ngInject */ | |
| 12 | + function ArticleGridController($scope, $rootScope, $element, ArticleService, $location, $filter, $log) { | |
| 13 | + $log.debug('ArticleGridController'); | |
| 14 | + | |
| 15 | + // alias | |
| 16 | + var vm = this; | |
| 17 | + | |
| 18 | + // dependencies | |
| 19 | + vm.$scope = $scope; | |
| 20 | + vm.$rootScope = $rootScope; | |
| 21 | + vm.$element = $element; | |
| 22 | + vm.ArticleService = ArticleService; | |
| 23 | + vm.$location = $location; | |
| 24 | + vm.$filter = $filter; | |
| 25 | + vm.$log = $log; | |
| 26 | + vm.defaultLimit = 6; | |
| 27 | + | |
| 28 | + // initialization | |
| 29 | + vm.init(); | |
| 30 | + } | |
| 31 | + | |
| 32 | + ArticleGridController.prototype.init = function() { | |
| 33 | + var vm = this; | |
| 34 | + | |
| 35 | + vm.ArticleService.getPrograms(function(programs){ | |
| 36 | + vm.articles = programs; | |
| 37 | + }); | |
| 38 | + | |
| 39 | + vm.ArticleService.getCategories(function(categories){ | |
| 40 | + vm.categories = categories; | |
| 41 | + }); | |
| 42 | + | |
| 43 | + vm.orderCriteries = [ | |
| 44 | + { label: 'Título', name: 'titulo' }, | |
| 45 | + { label: 'Tema', name: 'tema' }, | |
| 46 | + { label: 'Aleatório', name: 'aleatorio' } | |
| 47 | + ]; | |
| 48 | + | |
| 49 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 50 | + vm.search = vm.$location.search(); | |
| 51 | + | |
| 52 | + // Add initial values for the filter | |
| 53 | + vm.query = (vm.search && vm.search.filtro) ? vm.search.filtro : null; | |
| 54 | + vm.limitTo = (vm.search && vm.search.limite) ? parseInt(vm.search.limite, 10) : vm.defaultLimit; | |
| 55 | + vm.orderCriteria = (vm.search && vm.search.ordem) ? { name: vm.search.ordem } : null; | |
| 56 | + vm.reverse = (vm.search && vm.search.reverso) ? true : false; | |
| 57 | + | |
| 58 | + // vm.selectedCategory = (vm.search && vm.search.tema) ? vm.getCategoryBySlug(vm.search.tema) : null; | |
| 59 | + if (vm.search && vm.search.tema) { | |
| 60 | + var slug = vm.search.tema; | |
| 61 | + vm.ArticleService.getCategoryBySlug(slug, function(category){ | |
| 62 | + vm.selectedCategory = category; | |
| 63 | + }, function(error){ | |
| 64 | + vm.$log.error('Error when try to "getCategoryBySlug"', error); | |
| 65 | + }); | |
| 66 | + } | |
| 67 | + | |
| 68 | + if (!angular.equals({}, vm.search)) { | |
| 69 | + var $el = vm.$element; | |
| 70 | + angular.element('body').animate({scrollTop: $el.offset().top}, 'slow'); | |
| 71 | + } | |
| 72 | + | |
| 73 | + // update window location params | |
| 74 | + vm.$scope.$on('change-selectedCategory', function(event, selectedCategory){ | |
| 75 | + vm.selectedCategory = selectedCategory; | |
| 76 | + }); | |
| 77 | + | |
| 78 | + vm.$scope.$watch('vm.query', function(newValue/*, oldValue*/) { | |
| 79 | + vm.search.filtro = newValue ? newValue : null; | |
| 80 | + vm.$location.search('filtro', vm.search.filtro); | |
| 81 | + if(vm.search.filtro){ | |
| 82 | + vm.limitTo = vm.articles.length; | |
| 83 | + }else{ | |
| 84 | + vm.limitTo = vm.defaultLimit; | |
| 85 | + } | |
| 86 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 87 | + }); | |
| 88 | + | |
| 89 | + vm.$scope.$watch('vm.limitTo', function(newValue/*, oldValue*/) { | |
| 90 | + vm.search.limite = (newValue && newValue !== vm.defaultLimit) ? newValue : null; | |
| 91 | + vm.$location.search('limite', vm.search.limite); | |
| 92 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 93 | + }); | |
| 94 | + | |
| 95 | + vm.$scope.$watch('vm.selectedCategory', function(newValue/*, oldValue*/) { | |
| 96 | + vm.search.tema = newValue ? newValue.slug : null; | |
| 97 | + vm.$location.search('tema', vm.search.tema); | |
| 98 | + if(vm.search.tema){ | |
| 99 | + vm.limitTo = vm.articles.length; | |
| 100 | + }else{ | |
| 101 | + vm.limitTo = vm.defaultLimit; | |
| 102 | + } | |
| 103 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 104 | + }); | |
| 105 | + | |
| 106 | + vm.$scope.$watch('vm.orderCriteria', function(newValue/*, oldValue*/) { | |
| 107 | + vm.search.ordem = (newValue && newValue.name) ? newValue.name : null; | |
| 108 | + vm.$location.search('ordem', vm.search.ordem); | |
| 109 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 110 | + }); | |
| 111 | + | |
| 112 | + vm.$scope.$watch('vm.reverse', function(newValue/*, oldValue*/) { | |
| 113 | + vm.search.reverso = newValue ? newValue : null; | |
| 114 | + vm.$location.search('reverso', vm.search.reverso); | |
| 115 | + vm.filtredArticleList = vm.getFiltredArticles(); | |
| 116 | + }); | |
| 117 | + | |
| 118 | + }; | |
| 119 | + | |
| 120 | + ArticleGridController.prototype.resetFilterValues = function() { | |
| 121 | + var vm = this; | |
| 122 | + | |
| 123 | + vm.query = null; | |
| 124 | + vm.limitTo = vm.defaultLimit; | |
| 125 | + vm.selectedCategory = null; | |
| 126 | + vm.orderCriteria = null; | |
| 127 | + }; | |
| 128 | + | |
| 129 | + ArticleGridController.prototype.getIconClasses = function(category) { | |
| 130 | + var vm = this; | |
| 131 | + | |
| 132 | + vm.$log.debug('[TODO] getIconClasses of category:', category); | |
| 133 | + return 'glyphicon glyphicon-exclamation-sign'; | |
| 134 | + }; | |
| 135 | + | |
| 136 | + ArticleGridController.prototype.getCategoryBySlug = function(categorySlug) { | |
| 137 | + var vm = this; | |
| 138 | + var result = null; | |
| 139 | + | |
| 140 | + angular.forEach(vm.categories, function(value/*, key*/) { | |
| 141 | + if (value.slug === categorySlug) { | |
| 142 | + result = value; | |
| 143 | + } | |
| 144 | + }); | |
| 145 | + | |
| 146 | + return result; | |
| 147 | + }; | |
| 148 | + | |
| 149 | + ArticleGridController.prototype.showAll = function($event) { | |
| 150 | + var vm = this; | |
| 151 | + | |
| 152 | + $event.stopPropagation(); | |
| 153 | + | |
| 154 | + vm.resetFilterValues(); | |
| 155 | + vm.limitTo = vm.articles.length; | |
| 156 | + }; | |
| 157 | + | |
| 158 | + ArticleGridController.prototype.getFiltredArticles = function() { | |
| 159 | + var vm = this; | |
| 160 | + | |
| 161 | + if(!vm.articles){ | |
| 162 | + vm.$log.warn('No articles loaded yet. Abort.'); | |
| 163 | + return null; | |
| 164 | + } | |
| 165 | + | |
| 166 | + var input = vm.articles; | |
| 167 | + var output = input; | |
| 168 | + var query = vm.query; | |
| 169 | + var selectedCategory = vm.selectedCategory; | |
| 170 | + var orderCriteria = vm.orderCriteria ? vm.orderCriteria : { name : 'aleatorio'}; | |
| 171 | + var filter = vm.$filter('filter'); | |
| 172 | + var orderBy = vm.$filter('orderBy'); | |
| 173 | + var limitTo = vm.$filter('limitTo'); | |
| 174 | + var limit = vm.limitTo ? vm.limitTo : 4; | |
| 175 | + | |
| 176 | + if (selectedCategory) { | |
| 177 | + output = _filterByCategory(output, selectedCategory); | |
| 178 | + } | |
| 179 | + | |
| 180 | + if (query) { | |
| 181 | + output = filter(output, query, false); | |
| 182 | + } | |
| 183 | + | |
| 184 | + switch (orderCriteria.name) { | |
| 185 | + case 'titulo': | |
| 186 | + output = orderBy(output, 'title', vm.reverse); | |
| 187 | + break; | |
| 188 | + case 'tema': | |
| 189 | + output = orderBy(output, 'categories[0].name', vm.reverse); | |
| 190 | + break; | |
| 191 | + case 'more_participants': | |
| 192 | + vm.$log.info('Criteria not handled yet: ', orderCriteria); | |
| 193 | + break; | |
| 194 | + case 'aleatorio': | |
| 195 | + // shuffling | |
| 196 | + // if (!vm._isShuffled){ | |
| 197 | + output = vm.filterShuffle(output); | |
| 198 | + // vm._isShuffled = true; | |
| 199 | + // } | |
| 200 | + | |
| 201 | + if (vm.reverse) { | |
| 202 | + output = output.slice().reverse(); | |
| 203 | + } | |
| 204 | + | |
| 205 | + break; | |
| 206 | + default: | |
| 207 | + vm.$log.warn('Criteria not matched: ', orderCriteria); | |
| 208 | + break; | |
| 209 | + } | |
| 210 | + | |
| 211 | + output = limitTo(output, limit); | |
| 212 | + | |
| 213 | + return output; | |
| 214 | + }; | |
| 215 | + | |
| 216 | + ArticleGridController.prototype.filterShuffle = function(input) { | |
| 217 | + var result = []; | |
| 218 | + var resultByCategory = {}; | |
| 219 | + | |
| 220 | + // divide by categories | |
| 221 | + for (var i = 0; i < input.length; i++) { | |
| 222 | + var program = input[i]; | |
| 223 | + var categorySlug = program.categories[0].slug; | |
| 224 | + | |
| 225 | + if (!resultByCategory[categorySlug]) { | |
| 226 | + resultByCategory[categorySlug] = []; | |
| 227 | + } | |
| 228 | + | |
| 229 | + resultByCategory[categorySlug].push(program); | |
| 230 | + } | |
| 231 | + | |
| 232 | + // shuffle each array | |
| 233 | + var prop = null; | |
| 234 | + var categoryWithPrograms = null; | |
| 235 | + for (prop in resultByCategory) { | |
| 236 | + if (resultByCategory.hasOwnProperty(prop)) { | |
| 237 | + categoryWithPrograms = resultByCategory[prop]; | |
| 238 | + resultByCategory[prop] = shuffle(categoryWithPrograms); | |
| 239 | + } | |
| 240 | + } | |
| 241 | + | |
| 242 | + // Concat all into result array | |
| 243 | + // > while has program at Lists on resultByCategory | |
| 244 | + var hasProgram = true; | |
| 245 | + while (hasProgram) { | |
| 246 | + | |
| 247 | + var foundProgram = false; | |
| 248 | + // each categoryList with array of program | |
| 249 | + prop = null; | |
| 250 | + categoryWithPrograms = null; | |
| 251 | + for (prop in resultByCategory) { | |
| 252 | + | |
| 253 | + if (resultByCategory.hasOwnProperty(prop)) { | |
| 254 | + categoryWithPrograms = resultByCategory[prop]; | |
| 255 | + | |
| 256 | + if (categoryWithPrograms.length > 0) { | |
| 257 | + var pivotProgram = categoryWithPrograms.pop(); | |
| 258 | + result.push(pivotProgram); | |
| 259 | + foundProgram = true; | |
| 260 | + } | |
| 261 | + } | |
| 262 | + } | |
| 263 | + | |
| 264 | + if (!foundProgram) { | |
| 265 | + hasProgram = false; | |
| 266 | + } | |
| 267 | + } | |
| 268 | + | |
| 269 | + return result; | |
| 270 | + }; | |
| 271 | + | |
| 272 | + var directive = { | |
| 273 | + restrict: 'E', | |
| 274 | + templateUrl: 'app/components/article-grid/article-grid.html', | |
| 275 | + controller: ArticleGridController, | |
| 276 | + controllerAs: 'vm', | |
| 277 | + bindToController: true | |
| 278 | + }; | |
| 279 | + | |
| 280 | + return directive; | |
| 281 | + } | |
| 282 | + | |
| 283 | + function _filterByCategory (input, category) { | |
| 284 | + input = input || []; | |
| 285 | + | |
| 286 | + if (!category) { | |
| 287 | + // no filter | |
| 288 | + return input; | |
| 289 | + } | |
| 290 | + | |
| 291 | + var out = []; | |
| 292 | + for (var i = 0; i < input.length; i++) { | |
| 293 | + var program = input[i]; | |
| 294 | + if (program.categories[0].slug === category.slug) { | |
| 295 | + out.push(program); | |
| 296 | + } | |
| 297 | + } | |
| 298 | + | |
| 299 | + return out; | |
| 300 | + } | |
| 301 | + | |
| 302 | + // -> Fisher–Yates shuffle algorithm | |
| 303 | + function shuffle (array) { | |
| 304 | + var currentIndex = array.length, temporaryValue, randomIndex ; | |
| 305 | + | |
| 306 | + // While there remain elements to shuffle... | |
| 307 | + while (0 !== currentIndex) { | |
| 308 | + | |
| 309 | + // Pick a remaining element... | |
| 310 | + randomIndex = Math.floor(Math.random() * currentIndex); | |
| 311 | + currentIndex -= 1; | |
| 312 | + | |
| 313 | + // And swap it with the current element. | |
| 314 | + temporaryValue = array[currentIndex]; | |
| 315 | + array[currentIndex] = array[randomIndex]; | |
| 316 | + array[randomIndex] = temporaryValue; | |
| 317 | + } | |
| 318 | + | |
| 319 | + return array; | |
| 320 | + } | |
| 321 | + | |
| 322 | +})(); | ... | ... |
| ... | ... | @@ -0,0 +1,50 @@ |
| 1 | +<article class="article-grid"> | |
| 2 | + <header class="header"> | |
| 3 | + <h2>Conheça os programas <span class="small">({{vm.filtredArticleList.length}}/{{vm.articles.length}})</span></h2> | |
| 4 | + <button type="button" class="btn btn-link" ng-click="vm.showAll($event)"> | |
| 5 | + <span class="glyphicon glyphicon-chevron-right"></span> Ver todos os {{vm.articles.length}} programas | |
| 6 | + </button> | |
| 7 | + </header> | |
| 8 | + <div> | |
| 9 | + <div class="col-sm-12"> | |
| 10 | + <aside class="form-inline"> | |
| 11 | + <div class="row"> | |
| 12 | + <div class="col-xs-6 col-sm-7 col-md-9"> | |
| 13 | + <label for="articleQueryFilter" class="control-label sr-only">Filtrar programas:</label> | |
| 14 | + <input id="articleQueryFilter" type="search" class="form-control" ng-model="vm.query" placeholder="Filtrar programas" aria-label="Filtrar programas" > | |
| 15 | + </div> | |
| 16 | + | |
| 17 | + <!-- <label for="selectCategoryFilter" class="control-label sr-only">Filtrar por tema:</label> | |
| 18 | + <select id="selectCategoryFilter" name="selectCategoryFilter" class="form-control" ng-model="vm.categoryFilter" ng-options="category.name for category in vm.categories track by category.slug"> | |
| 19 | + <option value="">-- Filtrar por tema --</option> | |
| 20 | + </select> --> | |
| 21 | + | |
| 22 | + <div class="col-xs-6 col-sm-5 col-md-3"> | |
| 23 | + <label for="articleOrderByFilter" class="control-label sr-only">Ordernar por:</label> | |
| 24 | + <select id="articleOrderByFilter" name="articleOrderByFilter" class="form-control pull-right" ng-model="vm.orderCriteria" ng-options="orderCriteria.label for orderCriteria in vm.orderCriteries"> | |
| 25 | + <option value="">-- Ordernar por: --</option> | |
| 26 | + </select> | |
| 27 | + </div> | |
| 28 | + <!-- <div class="checkbox"> | |
| 29 | + <label> | |
| 30 | + <input type="checkbox" ng-model="vm.reverse"> | |
| 31 | + Reverso | |
| 32 | + </label> | |
| 33 | + </div> --> | |
| 34 | + | |
| 35 | + <!-- <input id="articleLimitFilter" type="number" class="form-control input-sm" size="4" step="2" ng-model="vm.limitTo" aria-label="Limitar" > | |
| 36 | + <label for="articleLimitFilter" class="control-label">Limite</label> --> | |
| 37 | + | |
| 38 | + </div> | |
| 39 | + </aside> | |
| 40 | + </div> | |
| 41 | + | |
| 42 | + <div ng-repeat="article in vm.filtredArticleList as results"> | |
| 43 | + <article-box article="article" class="col-xs-12 col-sm-6"></article-box> | |
| 44 | + <div ng-if="$odd" class="clearfix"></div> | |
| 45 | + </div> | |
| 46 | + <div class="animate-repeat" ng-if="results.length == 0"> | |
| 47 | + Nenhum programa encontrado. | |
| 48 | + </div> | |
| 49 | + </div> | |
| 50 | +</article> | ... | ... |
| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | +.article-grid { | |
| 2 | + .header { | |
| 3 | + position: relative; | |
| 4 | + height: 40px; | |
| 5 | + margin-bottom: 10px; | |
| 6 | + | |
| 7 | + button { | |
| 8 | + position: absolute; | |
| 9 | + right: 0; | |
| 10 | + top: 2px; | |
| 11 | + } | |
| 12 | + } | |
| 13 | + | |
| 14 | + .form-inline { | |
| 15 | + input, | |
| 16 | + select { | |
| 17 | + width: 100%; | |
| 18 | + } | |
| 19 | + } | |
| 20 | +} | ... | ... |
src/app/components/article-preview/article-preview.directive.js
0 → 100644
| ... | ... | @@ -0,0 +1,74 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .directive('articlePreview', articlePreview); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function articlePreview($rootScope) { | |
| 10 | + | |
| 11 | + /** @ngInject */ | |
| 12 | + function ArticlePreviewController(ArticleService, $scope, $state, Slug, $log) { | |
| 13 | + $log.debug('ArticlePreviewController'); | |
| 14 | + | |
| 15 | + var vm = this; | |
| 16 | + vm.ArticleService = ArticleService; | |
| 17 | + vm.$scope = $scope; | |
| 18 | + vm.$state = $state; | |
| 19 | + vm.Slug = Slug; | |
| 20 | + vm.$log = $log; | |
| 21 | + | |
| 22 | + vm.init(); | |
| 23 | + } | |
| 24 | + | |
| 25 | + ArticlePreviewController.prototype.init = function () { | |
| 26 | + var vm = this; | |
| 27 | + | |
| 28 | + if(!vm.article.slug){ | |
| 29 | + vm.article.slug = vm.Slug.slugify(vm.article.title); | |
| 30 | + } | |
| 31 | + | |
| 32 | + if(!vm.category){ | |
| 33 | + vm.category = vm.article.categories[0]; | |
| 34 | + } | |
| 35 | + | |
| 36 | + if(!vm.banner){ | |
| 37 | + vm.banner = { | |
| 38 | + src: $rootScope.basePath + vm.article.image.url, | |
| 39 | + alt: 'Imagem de destaque do programa' | |
| 40 | + }; | |
| 41 | + } | |
| 42 | + | |
| 43 | + // if(vm.article.color && !vm.article.bgColor){ | |
| 44 | + // // 15% more darker | |
| 45 | + // vm.article.colorDarker = window.ColorLuminance(vm.article.color, 0.15); | |
| 46 | + // } | |
| 47 | + }; | |
| 48 | + | |
| 49 | + ArticlePreviewController.prototype.showContent = function () { | |
| 50 | + var vm = this; | |
| 51 | + | |
| 52 | + vm.$state.go('conheca-o-programa', { | |
| 53 | + slug: vm.article.slug | |
| 54 | + }, { | |
| 55 | + location: true | |
| 56 | + }); | |
| 57 | + }; | |
| 58 | + | |
| 59 | + var directive = { | |
| 60 | + restrict: 'E', | |
| 61 | + templateUrl: 'app/components/article-preview/article-preview.html', | |
| 62 | + scope: { | |
| 63 | + article: '=' | |
| 64 | + }, | |
| 65 | + controller: ArticlePreviewController, | |
| 66 | + controllerAs: 'vm', | |
| 67 | + bindToController: true | |
| 68 | + }; | |
| 69 | + | |
| 70 | + | |
| 71 | + return directive; | |
| 72 | + } | |
| 73 | + | |
| 74 | +})(); | ... | ... |
| ... | ... | @@ -0,0 +1,101 @@ |
| 1 | +<article class="article-preview" ng-class="vm.category.slug"> | |
| 2 | + <header class="article-banner"> | |
| 3 | + <img class="article-banner--image" ng-src="{{vm.banner.src}}" alt="{{vm.banner.alt}}"> | |
| 4 | + <div class="article-banner--strip"> | |
| 5 | + <h1 class="article-banner--title">{{::vm.article.title}}</h1> | |
| 6 | + <p class="article-banner--abstract" ng-bind-html="vm.article.abstract"></p> | |
| 7 | + </div> | |
| 8 | + </header> | |
| 9 | + | |
| 10 | + <section class="call-to-action--section"> | |
| 11 | + <div class="row show-content-row"> | |
| 12 | + <div class="col-xs-10 col-xs-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3"> | |
| 13 | + <div class="button--themed"> | |
| 14 | + <button class="btn btn-block" ng-click="vm.showContent()">Conheça o programa</button> | |
| 15 | + </div> | |
| 16 | + </div> | |
| 17 | + </div> | |
| 18 | + <div class="row proposal-row"> | |
| 19 | + <div class="row-height"> | |
| 20 | + <div class="col-md-6 col-height"> | |
| 21 | + <div class="inside-full-height"> | |
| 22 | + <div class="proposal-box make-proposal"> | |
| 23 | + <h2 class="proposal-box--title">Faça uma proposta</h2> | |
| 24 | + <p class="proposal-box--text">Qual a sua sugestão para melhorar este programa?</p> | |
| 25 | + <div class="row"> | |
| 26 | + <div class="col-xs-8 col-xs-offset-2"> | |
| 27 | + <div class="button--themed"> | |
| 28 | + <button class="btn btn-block" ng-click="vm.goSendProposal()"> | |
| 29 | + Envie sua proposta | |
| 30 | + </button> | |
| 31 | + </div> | |
| 32 | + </div> | |
| 33 | + </div> | |
| 34 | + </div> | |
| 35 | + </div> | |
| 36 | + </div> | |
| 37 | + <div class="col-md-6 col-height"> | |
| 38 | + <div class="inside-full-height"> | |
| 39 | + <div class="proposal-box support-proposal"> | |
| 40 | + <h2 class="proposal-box--title">Apoie outras propostas</h2> | |
| 41 | + <p class="proposal-box--text"> | |
| 42 | + Lorem qual a sua sugestão para melhorar este programa | |
| 43 | + Lorem qual a sua sugestão para melhorar este programa | |
| 44 | + Lorem qual a sua sugestão para melhorar este programa | |
| 45 | + Lorem qual a sua sugestão para melhorar este programa | |
| 46 | + Lorem qual a sua sugestão para melhorar este programa | |
| 47 | + Lorem qual a sua sugestão para melhorar este programa? | |
| 48 | + </p> | |
| 49 | + <div class="col-lg-12"> | |
| 50 | + <div class="col-xs-8 col-xs-offset-2 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> | |
| 51 | + <div class="button--themed vote-buttons"> | |
| 52 | + <button class="btn btn-circle vote-buttons-up" ng-click="vm.vote(1)"> | |
| 53 | + <span class="sr-only">Eu <b>apoio</b> esta proposta.</span> | |
| 54 | + <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | |
| 55 | + </button> | |
| 56 | + | |
| 57 | + <button class="btn btn-circle vote-buttons-down" ng-click="vm.vote(-1)"> | |
| 58 | + <span class="sr-only">Eu <b>não apoio</b> esta proposta.</span> | |
| 59 | + <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | |
| 60 | + </button> | |
| 61 | + | |
| 62 | + <button class="btn btn-block vote-buttons-skip" ng-click="vm.vote(0)"> | |
| 63 | + <span class="sr-only">Pular esta proposta.</span> | |
| 64 | + <span class="icon" aria-hidden="true"></span> | |
| 65 | + Pular | |
| 66 | + </button> | |
| 67 | + </div> | |
| 68 | + </div> | |
| 69 | + </div> | |
| 70 | + <div class="col-lg-12"> | |
| 71 | + <div class="col-xs-8 col-xs-offset-2 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> | |
| 72 | + <div class="text-center"> | |
| 73 | + <button class="btn btn-link" ng-click="vm.showResults()">Resultados</button> | |
| 74 | + </div> | |
| 75 | + </div> | |
| 76 | + </div> | |
| 77 | + <div class="col-md-12"> | |
| 78 | + <div class="col-xs-12"> | |
| 79 | + <div class="text-center"> | |
| 80 | + <span>Compartilhe esta proposta</span> | |
| 81 | + <social-share></social-share> | |
| 82 | + </div> | |
| 83 | + </div> | |
| 84 | + </div> | |
| 85 | + <div class="clearfix"></div> | |
| 86 | + </div> | |
| 87 | + </div> | |
| 88 | + </div> | |
| 89 | + </div> | |
| 90 | + </div> | |
| 91 | + <div class="talk-proposal row proposal-row"> | |
| 92 | + <div class="row-height"> | |
| 93 | + <div class="col-md-12 col-height"> | |
| 94 | + <div class=""> | |
| 95 | + <h2>Bate-papo virtual com ministr@s</h2> | |
| 96 | + </div> | |
| 97 | + </div> | |
| 98 | + </div> | |
| 99 | + </div> | |
| 100 | + </section> | |
| 101 | +</article> | ... | ... |
| ... | ... | @@ -0,0 +1,91 @@ |
| 1 | +.article-preview { | |
| 2 | + .article-banner { | |
| 3 | + position: relative; | |
| 4 | + } | |
| 5 | + | |
| 6 | + .article-banner--image { | |
| 7 | + width: 100%; | |
| 8 | + } | |
| 9 | + | |
| 10 | + .article-banner--strip { | |
| 11 | + color: #fff; | |
| 12 | + position: absolute; | |
| 13 | + bottom: 15%; | |
| 14 | + right: 0; | |
| 15 | + width: 50%; | |
| 16 | + text-align: center; | |
| 17 | + | |
| 18 | + @each $category, $color in $categories { | |
| 19 | + .#{$category} & { | |
| 20 | + background-color: $color; | |
| 21 | + } | |
| 22 | + } | |
| 23 | + | |
| 24 | + @media (max-width: $screen-sm){ | |
| 25 | + position: relative; | |
| 26 | + width: 100%; | |
| 27 | + } | |
| 28 | + } | |
| 29 | + | |
| 30 | + .article-banner--title { | |
| 31 | + font-size: 32px; | |
| 32 | + text-transform: uppercase; | |
| 33 | + margin-top: 0; | |
| 34 | + padding-top: 20px; | |
| 35 | + } | |
| 36 | + .article-banner--title, | |
| 37 | + .article-banner--abstract { | |
| 38 | + font-weight: bold; | |
| 39 | + } | |
| 40 | + .article-banner--abstract { | |
| 41 | + padding-bottom: 10px; | |
| 42 | + } | |
| 43 | + | |
| 44 | + .show-content-row { | |
| 45 | + .button--themed { | |
| 46 | + .btn { | |
| 47 | + font-size: 38px; | |
| 48 | + | |
| 49 | + @media (max-width: $screen-sm){ | |
| 50 | + font-size: 20px; | |
| 51 | + } | |
| 52 | + } | |
| 53 | + } | |
| 54 | + } | |
| 55 | + | |
| 56 | + .talk-proposal { | |
| 57 | + margin-top: -20px; | |
| 58 | + } | |
| 59 | + | |
| 60 | + .proposal-box { | |
| 61 | + | |
| 62 | + // padding: 10px 20px; | |
| 63 | + | |
| 64 | + .proposal-box--title { | |
| 65 | + font-size: 38px; | |
| 66 | + font-weight: 400; | |
| 67 | + text-align: center; | |
| 68 | + | |
| 69 | + margin-bottom: 20px; | |
| 70 | + } | |
| 71 | + | |
| 72 | + .proposal-box--text { | |
| 73 | + font-size: 24px; | |
| 74 | + font-weight: 700; | |
| 75 | + line-height: 1.2; | |
| 76 | + margin-bottom: 20px; | |
| 77 | + } | |
| 78 | + | |
| 79 | + @each $category, $color in $categories { | |
| 80 | + .#{$category} & { | |
| 81 | + border-color: $color; | |
| 82 | + | |
| 83 | + .proposal-box--title { | |
| 84 | + color: $color; | |
| 85 | + } | |
| 86 | + } | |
| 87 | + } | |
| 88 | + } | |
| 89 | + | |
| 90 | + | |
| 91 | +} | ... | ... |
src/app/components/articleBar/articleBar.directive.js
| ... | ... | @@ -1,68 +0,0 @@ |
| 1 | -(function() { | |
| 2 | - 'use strict'; | |
| 3 | - | |
| 4 | - angular | |
| 5 | - .module('dialoga') | |
| 6 | - .directive('articleBar', articleBar); | |
| 7 | - | |
| 8 | - /** @ngInject */ | |
| 9 | - function articleBar() { | |
| 10 | - var directive = { | |
| 11 | - restrict: 'E', | |
| 12 | - templateUrl: 'app/components/articleBar/articleBar.html', | |
| 13 | - scope: { | |
| 14 | - category: '=', | |
| 15 | - categories: '=' | |
| 16 | - }, | |
| 17 | - controller: ArticleBarController, | |
| 18 | - controllerAs: 'vm', | |
| 19 | - bindToController: true | |
| 20 | - }; | |
| 21 | - | |
| 22 | - return directive; | |
| 23 | - | |
| 24 | - /** @ngInject */ | |
| 25 | - function ArticleBarController($scope, $rootScope, $state, $log) { | |
| 26 | - $log.debug('ArticleBarController'); | |
| 27 | - | |
| 28 | - var vm = this; | |
| 29 | - | |
| 30 | - vm.$scope = $scope; | |
| 31 | - vm.$rootScope = $rootScope; | |
| 32 | - vm.$state = $state; | |
| 33 | - vm.theme = 'blue'; | |
| 34 | - | |
| 35 | - // if(!vm.category) { | |
| 36 | - // throw 'article bar without category'; | |
| 37 | - // } | |
| 38 | - | |
| 39 | - // if(!vm.categories) { | |
| 40 | - // throw 'article bar without categories list'; | |
| 41 | - // } | |
| 42 | - | |
| 43 | - vm.currentCategory = vm.category; | |
| 44 | - | |
| 45 | - vm.$scope.$watch('vm.currentCategory', function(newValue, oldValue){ | |
| 46 | - if(newValue !== oldValue){ | |
| 47 | - vm.$state.go('inicio', { | |
| 48 | - tema: newValue.slug | |
| 49 | - }, { | |
| 50 | - location: true | |
| 51 | - }); | |
| 52 | - } | |
| 53 | - }); | |
| 54 | - | |
| 55 | - vm.goBack = function (){ | |
| 56 | - var vm = this; | |
| 57 | - var prevState = vm.$rootScope.$previousState; | |
| 58 | - if(prevState && prevState.state.name){ | |
| 59 | - vm.$state.go(prevState.state.name, prevState.params); | |
| 60 | - } else { | |
| 61 | - vm.$state.go('inicio'); | |
| 62 | - } | |
| 63 | - }; | |
| 64 | - } | |
| 65 | - | |
| 66 | - } | |
| 67 | - | |
| 68 | -})(); |
src/app/components/articleBar/articleBar.html
| ... | ... | @@ -1,23 +0,0 @@ |
| 1 | -<div class="article-bar" ng-class="vm.theme"> | |
| 2 | - <div class="navbar"> | |
| 3 | - <div class="navbar-header"> | |
| 4 | - <button class="article-bar--item btn btn-link" ng-click="vm.goBack()"> | |
| 5 | - <!-- <span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span> --> | |
| 6 | - <span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span> | |
| 7 | - Voltar | |
| 8 | - </button> | |
| 9 | - </div> | |
| 10 | - <div class="navbar-left" ng-if="vm.category"> | |
| 11 | - <button class="article-bar--item article-bar--category-button btn btn-link"> | |
| 12 | - <span class="icon" ng-class="'icon-tema-' + vm.category.slug"></span> | |
| 13 | - <span class="category-name">{{::vm.category.name}}</span> | |
| 14 | - </button> | |
| 15 | - </div> | |
| 16 | - <div class="navbar-right" ng-if="vm.categories"> | |
| 17 | - <label for="selectCategory" class="control-label sr-only" title="Selecione uma opção para acessar os programas do tema">Temas:</label> | |
| 18 | - <select id="selectCategory" name="selectCategory" class="article-bar--item form-control" ng-model="vm.currentCategory" ng-options="category.name for category in vm.categories track by category.slug"> | |
| 19 | - </select> | |
| 20 | - </div> | |
| 21 | - </div> | |
| 22 | - </div> | |
| 23 | -</div> |
src/app/components/articleBar/articleBar.scss
| ... | ... | @@ -1,53 +0,0 @@ |
| 1 | -.article-bar { | |
| 2 | - position: relative; | |
| 3 | - background-color: #0042b1; | |
| 4 | - | |
| 5 | - .btn { | |
| 6 | - color: #fff; | |
| 7 | - font-weight: bold; | |
| 8 | - } | |
| 9 | - | |
| 10 | - &--item { | |
| 11 | - margin: 8px 0; | |
| 12 | - | |
| 13 | - @media (max-width: $screen-xs) { | |
| 14 | - margin: 8px; | |
| 15 | - } | |
| 16 | - | |
| 17 | - } | |
| 18 | - | |
| 19 | - &--category-button { | |
| 20 | - position: relative; | |
| 21 | - width: 125px; | |
| 22 | - text-align: right; | |
| 23 | - margin-left: 10px; | |
| 24 | - font-size: 24px; | |
| 25 | - line-height: 20px; | |
| 26 | - font-family: 'Open Sans'; | |
| 27 | - | |
| 28 | - .icon { | |
| 29 | - position: absolute; | |
| 30 | - top: -34px; | |
| 31 | - left: -34px; | |
| 32 | - transform: scale(.37); | |
| 33 | - } | |
| 34 | - } | |
| 35 | - | |
| 36 | - .navbar { | |
| 37 | - margin-bottom: 0; | |
| 38 | - } | |
| 39 | - | |
| 40 | - .navbar-right { | |
| 41 | - margin-right: 15px; | |
| 42 | - } | |
| 43 | - | |
| 44 | - @each $category, $color in $categories { | |
| 45 | - &.#{$category} { | |
| 46 | - background-color: $color; | |
| 47 | - } | |
| 48 | - } | |
| 49 | - | |
| 50 | - .contraste & { | |
| 51 | - background-color: #262626; | |
| 52 | - } | |
| 53 | -} |
src/app/components/auth/auth.service.js
| ... | ... | @@ -8,7 +8,7 @@ |
| 8 | 8 | .factory('AuthInterceptor', AuthInterceptor); |
| 9 | 9 | |
| 10 | 10 | /** @ngInject */ |
| 11 | - function AuthService($http, $rootScope, Session, AUTH_EVENTS, api, $log) { | |
| 11 | + function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) { | |
| 12 | 12 | |
| 13 | 13 | var service = { |
| 14 | 14 | login: login, |
| ... | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 | return service; |
| 22 | 22 | |
| 23 | 23 | function login (credentials) { |
| 24 | - var url = api.host + '/api/v1/login'; | |
| 24 | + var url = API.host + '/api/v1/login'; | |
| 25 | 25 | var encodedData = 'login=' + credentials.username + '&password=' + credentials.password; |
| 26 | 26 | |
| 27 | 27 | return $http | ... | ... |
src/app/components/category-list/category-list.directive.js
0 → 100644
| ... | ... | @@ -0,0 +1,77 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .directive('categoryList', categoryList); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function categoryList() { | |
| 10 | + | |
| 11 | + /** @ngInject */ | |
| 12 | + function CategoryListController($rootScope, ArticleService, $location, $log) { | |
| 13 | + $log.debug('CategoryListController'); | |
| 14 | + | |
| 15 | + // alias | |
| 16 | + var vm = this; | |
| 17 | + | |
| 18 | + // dependencies | |
| 19 | + vm.$rootScope = $rootScope; | |
| 20 | + vm.ArticleService = ArticleService; | |
| 21 | + vm.$location = $location; | |
| 22 | + vm.$log = $log; | |
| 23 | + vm.defaultLimit = 6; | |
| 24 | + | |
| 25 | + // initialization | |
| 26 | + vm.init(); | |
| 27 | + } | |
| 28 | + | |
| 29 | + CategoryListController.prototype.init = function() { | |
| 30 | + var vm = this; | |
| 31 | + | |
| 32 | + vm.selectedCategory = null; | |
| 33 | + vm.ArticleService.getCategories(function(categories){ | |
| 34 | + vm.categories = categories; | |
| 35 | + | |
| 36 | + }); | |
| 37 | + | |
| 38 | + vm.search = vm.$location.search(); | |
| 39 | + if (vm.search && vm.search.tema) { | |
| 40 | + var slug = vm.search.tema; | |
| 41 | + vm.ArticleService.getCategoryBySlug(slug, function(category){ | |
| 42 | + vm.selectedCategory = category; | |
| 43 | + }, function(error){ | |
| 44 | + vm.$log.error('Error when try to "getCategoryBySlug"', error); | |
| 45 | + }); | |
| 46 | + } | |
| 47 | + }; | |
| 48 | + | |
| 49 | + CategoryListController.prototype.selectCategory = function(category, $event) { | |
| 50 | + var vm = this; | |
| 51 | + | |
| 52 | + // prevent glitch | |
| 53 | + $event.stopPropagation(); | |
| 54 | + | |
| 55 | + if (category !== vm.selectedCategory) { | |
| 56 | + // selected new filter | |
| 57 | + vm.selectedCategory = category; | |
| 58 | + } else { | |
| 59 | + vm.selectedCategory = null; | |
| 60 | + } | |
| 61 | + | |
| 62 | + // send event to all controllers | |
| 63 | + vm.$rootScope.$broadcast('change-selectedCategory', vm.selectedCategory); | |
| 64 | + }; | |
| 65 | + | |
| 66 | + var directive = { | |
| 67 | + restrict: 'E', | |
| 68 | + templateUrl: 'app/components/category-list/category-list.html', | |
| 69 | + controller: CategoryListController, | |
| 70 | + controllerAs: 'categoryListCtrl', | |
| 71 | + bindToController: true | |
| 72 | + }; | |
| 73 | + | |
| 74 | + return directive; | |
| 75 | + } | |
| 76 | + | |
| 77 | +})(); | ... | ... |
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +<div class="category-list"> | |
| 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"> | |
| 5 | + <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)"> | |
| 9 | + | |
| 10 | + <span class="category-list--icon-circle" ng-class="category.slug"></span> | |
| 11 | + <span class="category-list--icon icon" ng-class="'icon-tema-' + category.slug"></span> | |
| 12 | + <span class="category-list--label">{{::category.name}}</span> | |
| 13 | + <span class="category-list--icon--right glyphicon glyphicon-chevron-right"></span> | |
| 14 | + </button> | |
| 15 | + </div> | |
| 16 | + </nav> | |
| 17 | +</div> | ... | ... |
| ... | ... | @@ -0,0 +1,111 @@ |
| 1 | +.category-list { | |
| 2 | + .category-list--title { | |
| 3 | + color: #ffffff; | |
| 4 | + font-size: 16px; | |
| 5 | + margin: 0; | |
| 6 | + padding: 20px; | |
| 7 | + background-color: #484848; | |
| 8 | + border-top-left-radius: 5px; | |
| 9 | + border-top-right-radius: 5px; | |
| 10 | + overflow: hidden; | |
| 11 | + } | |
| 12 | + | |
| 13 | + | |
| 14 | + .category-list--group { | |
| 15 | + } | |
| 16 | + | |
| 17 | + .category-list--item { | |
| 18 | + position: relative; | |
| 19 | + text-transform: uppercase; | |
| 20 | + font-weight: bold; | |
| 21 | + padding: 0; | |
| 22 | + height: 68px; | |
| 23 | + overflow: hidden; | |
| 24 | + } | |
| 25 | + | |
| 26 | + .category-list--label { | |
| 27 | + margin-left: 70px; | |
| 28 | + margin-right: 30px; | |
| 29 | + display: inline-block; | |
| 30 | + z-index: 99999; | |
| 31 | + } | |
| 32 | + | |
| 33 | + &--icon-circle { | |
| 34 | + width: 48px; | |
| 35 | + height: 48px; | |
| 36 | + position: absolute; | |
| 37 | + top: 10px; | |
| 38 | + left: 10px; | |
| 39 | + // border: 1px solid #fff; | |
| 40 | + border-radius: 48px; | |
| 41 | + | |
| 42 | + -webkit-transition: -webkit-transform 0.2s ease-in-out; | |
| 43 | + -moz-transition: -moz-transform 0.2s ease-in-out; | |
| 44 | + -o-transition: -o-transform 0.2s ease-in-out; | |
| 45 | + transition: transform 0.2s ease-in-out; | |
| 46 | + | |
| 47 | + // -webkit-transition: all 0.2s ease-in-out; | |
| 48 | + // -moz-transition: all 0.2s ease-in-out; | |
| 49 | + // -o-transition: all 0.2s ease-in-out; | |
| 50 | + // transition: all 0.2s ease-in-out; | |
| 51 | + | |
| 52 | + z-index: 0; | |
| 53 | + | |
| 54 | + .active & { | |
| 55 | + z-index: -1; | |
| 56 | + | |
| 57 | + @media (max-width: $screen-xs) { | |
| 58 | + transform: scale(20); | |
| 59 | + } | |
| 60 | + | |
| 61 | + @media (min-width: $screen-xs + 1) { | |
| 62 | + transform: scale(40); | |
| 63 | + } | |
| 64 | + | |
| 65 | + @media (min-width: $screen-sm + 1) { | |
| 66 | + transform: scale(20); | |
| 67 | + } | |
| 68 | + | |
| 69 | + // @media (min-width: $screen-md + 1) { | |
| 70 | + // transform: scale(20); | |
| 71 | + // } | |
| 72 | + } | |
| 73 | + | |
| 74 | + @each $category, $color in $categories { | |
| 75 | + &.#{$category} { | |
| 76 | + background-color: $color; | |
| 77 | + } | |
| 78 | + } | |
| 79 | + } | |
| 80 | + | |
| 81 | + .category-list--icon { | |
| 82 | + position: absolute; | |
| 83 | + top: -16px; | |
| 84 | + left: -14px; | |
| 85 | + transform: scale(0.35); | |
| 86 | + } | |
| 87 | + | |
| 88 | + .category-list--icon--right { | |
| 89 | + position: absolute; | |
| 90 | + right: 9px; | |
| 91 | + top: 50%; | |
| 92 | + margin-top: -9px; | |
| 93 | + transform: scale(1.4); | |
| 94 | + } | |
| 95 | + | |
| 96 | + .list-group-item.active, | |
| 97 | + .list-group-item.active:hover, | |
| 98 | + .list-group-item.active:focus { | |
| 99 | + background-color: #f5f5f5; | |
| 100 | + } | |
| 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 | +} | ... | ... |
src/app/components/programa/programa.directive.js
| ... | ... | @@ -1,99 +0,0 @@ |
| 1 | -(function() { | |
| 2 | - 'use strict'; | |
| 3 | - | |
| 4 | - angular | |
| 5 | - .module('dialoga') | |
| 6 | - .directive('programaBox', programaBox); | |
| 7 | - | |
| 8 | - /** @ngInject */ | |
| 9 | - function programaBox($rootScope) { | |
| 10 | - | |
| 11 | - /** @ngInject */ | |
| 12 | - function ProgramaController(ArticleService, $scope, $state, Slug, $log) { | |
| 13 | - $log.debug('ProgramaController'); | |
| 14 | - | |
| 15 | - var vm = this; | |
| 16 | - vm.ArticleService = ArticleService; | |
| 17 | - vm.$scope = $scope; | |
| 18 | - vm.$state = $state; | |
| 19 | - vm.Slug = Slug; | |
| 20 | - vm.$log = $log; | |
| 21 | - | |
| 22 | - vm.init(); | |
| 23 | - } | |
| 24 | - | |
| 25 | - ProgramaController.prototype.init = function () { | |
| 26 | - var vm = this; | |
| 27 | - | |
| 28 | - if(!vm.program.slug){ | |
| 29 | - vm.program.slug = vm.Slug.slugify(vm.program.title); | |
| 30 | - } | |
| 31 | - | |
| 32 | - if(!vm.category){ | |
| 33 | - vm.category = vm.program.categories[0]; | |
| 34 | - } | |
| 35 | - | |
| 36 | - if(!vm.banner){ | |
| 37 | - vm.banner = { | |
| 38 | - src: $rootScope.basePath + vm.program.image.url, | |
| 39 | - alt: 'Imagem de destaque do programa' | |
| 40 | - }; | |
| 41 | - } | |
| 42 | - | |
| 43 | - vm.displayType = vm.display; | |
| 44 | - | |
| 45 | - // if(vm.program.color && !vm.program.bgColor){ | |
| 46 | - // // 15% more darker | |
| 47 | - // vm.program.colorDarker = window.ColorLuminance(vm.program.color, 0.15); | |
| 48 | - // } | |
| 49 | - }; | |
| 50 | - | |
| 51 | - ProgramaController.prototype.isDisplay = function (display) { | |
| 52 | - return this.display === display; | |
| 53 | - }; | |
| 54 | - | |
| 55 | - ProgramaController.prototype.isDisplayBox = function () { | |
| 56 | - return this.isDisplay('box'); | |
| 57 | - }; | |
| 58 | - | |
| 59 | - ProgramaController.prototype.isDisplayPreview = function () { | |
| 60 | - return this.isDisplay('preview'); | |
| 61 | - }; | |
| 62 | - | |
| 63 | - ProgramaController.prototype.showContent = function () { | |
| 64 | - var vm = this; | |
| 65 | - | |
| 66 | - vm.$state.go('programa-conheca', { | |
| 67 | - slug: vm.program.slug | |
| 68 | - }, { | |
| 69 | - location: true | |
| 70 | - }); | |
| 71 | - }; | |
| 72 | - | |
| 73 | - ProgramaController.prototype.showPreview = function () { | |
| 74 | - var vm = this; | |
| 75 | - | |
| 76 | - vm.$state.go('programa', { | |
| 77 | - slug: vm.program.slug | |
| 78 | - }, { | |
| 79 | - location: true | |
| 80 | - }); | |
| 81 | - }; | |
| 82 | - | |
| 83 | - var directive = { | |
| 84 | - restrict: 'E', | |
| 85 | - templateUrl: 'app/components/programa/programa.html', | |
| 86 | - scope: { | |
| 87 | - program: '=', | |
| 88 | - display: '=' | |
| 89 | - }, | |
| 90 | - controller: ProgramaController, | |
| 91 | - controllerAs: 'vm', | |
| 92 | - bindToController: true | |
| 93 | - }; | |
| 94 | - | |
| 95 | - | |
| 96 | - return directive; | |
| 97 | - } | |
| 98 | - | |
| 99 | -})(); |
src/app/components/programa/programa.html
| ... | ... | @@ -1,122 +0,0 @@ |
| 1 | -<div ng-if="vm.program" class="{{vm.category.slug}}"> | |
| 2 | - <article ng-if="vm.displayType == 'box'" class="program-box" ng-click="vm.showPreview()"> | |
| 3 | - <div> | |
| 4 | - <h2 class="program-box--category">{{vm.category.name}}</h2> | |
| 5 | - <div class="program-box--image-wrapper"> | |
| 6 | - <!-- <img class="program-box--image img-responsive" ng-src="{{vm.banner.src}}" alt="{{vm.banner.alt}}" /> --> | |
| 7 | - <div class="program-box--image" ng-style="{'background-image':'url( {{vm.banner.src}} )'}"></div> | |
| 8 | - </div> | |
| 9 | - <div class="program-box--title"> | |
| 10 | - <h1>{{::vm.program.title}}</h1> | |
| 11 | - </div> | |
| 12 | - <div class="program-box--abstract" ng-bind-html="vm.program.abstract"></div> | |
| 13 | - <div class="button--themed"> | |
| 14 | - <button class="btn btn-block"> | |
| 15 | - Participe | |
| 16 | - </button> | |
| 17 | - </div> | |
| 18 | - </div> | |
| 19 | - </article> | |
| 20 | - | |
| 21 | - <article ng-if="vm.displayType == 'preview'" class="program-preview"> | |
| 22 | - <header class="program-banner"> | |
| 23 | - <img class="program-banner--image" ng-src="{{vm.banner.src}}" alt="{{vm.banner.alt}}"> | |
| 24 | - <div class="program-banner--strip"> | |
| 25 | - <h1 class="program-banner--title">{{::vm.program.title}}</h1> | |
| 26 | - <p class="program-banner--abstract" ng-bind-html="vm.program.abstract"></p> | |
| 27 | - </div> | |
| 28 | - </header> | |
| 29 | - | |
| 30 | - <section class="call-to-action--section"> | |
| 31 | - <div class="row show-content-row"> | |
| 32 | - <div class="col-xs-10 col-xs-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3"> | |
| 33 | - <div class="button--themed"> | |
| 34 | - <button class="btn btn-block" ng-click="vm.showContent()">Conheça o programa</button> | |
| 35 | - </div> | |
| 36 | - </div> | |
| 37 | - </div> | |
| 38 | - <div class="row proposal-row"> | |
| 39 | - <div class="row-height"> | |
| 40 | - <div class="col-md-6 col-height"> | |
| 41 | - <div class="inside-full-height"> | |
| 42 | - <div class="proposal-box make-proposal"> | |
| 43 | - <h2 class="proposal-box--title">Faça uma proposta</h2> | |
| 44 | - <p class="proposal-box--text">Qual a sua sugestão para melhorar este programa?</p> | |
| 45 | - <div class="row"> | |
| 46 | - <div class="col-xs-8 col-xs-offset-2"> | |
| 47 | - <div class="button--themed"> | |
| 48 | - <button class="btn btn-block" ng-click="vm.goSendProposal()"> | |
| 49 | - Envie sua proposta | |
| 50 | - </button> | |
| 51 | - </div> | |
| 52 | - </div> | |
| 53 | - </div> | |
| 54 | - </div> | |
| 55 | - </div> | |
| 56 | - </div> | |
| 57 | - <div class="col-md-6 col-height"> | |
| 58 | - <div class="inside-full-height"> | |
| 59 | - <div class="proposal-box support-proposal"> | |
| 60 | - <h2 class="proposal-box--title">Apoie outras propostas</h2> | |
| 61 | - <p class="proposal-box--text"> | |
| 62 | - Lorem qual a sua sugestão para melhorar este programa | |
| 63 | - Lorem qual a sua sugestão para melhorar este programa | |
| 64 | - Lorem qual a sua sugestão para melhorar este programa | |
| 65 | - Lorem qual a sua sugestão para melhorar este programa | |
| 66 | - Lorem qual a sua sugestão para melhorar este programa | |
| 67 | - Lorem qual a sua sugestão para melhorar este programa? | |
| 68 | - </p> | |
| 69 | - <div class="col-lg-12"> | |
| 70 | - <div class="col-xs-8 col-xs-offset-2 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> | |
| 71 | - <div class="button--themed vote-buttons"> | |
| 72 | - <button class="btn btn-circle vote-buttons-up" ng-click="vm.vote(1)"> | |
| 73 | - <span class="sr-only">Eu <b>apoio</b> esta proposta.</span> | |
| 74 | - <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | |
| 75 | - </button> | |
| 76 | - | |
| 77 | - <button class="btn btn-circle vote-buttons-down" ng-click="vm.vote(-1)"> | |
| 78 | - <span class="sr-only">Eu <b>não apoio</b> esta proposta.</span> | |
| 79 | - <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | |
| 80 | - </button> | |
| 81 | - | |
| 82 | - <button class="btn btn-block vote-buttons-skip" ng-click="vm.vote(0)"> | |
| 83 | - <span class="sr-only">Pular esta proposta.</span> | |
| 84 | - <span class="icon" aria-hidden="true"></span> | |
| 85 | - Pular | |
| 86 | - </button> | |
| 87 | - </div> | |
| 88 | - </div> | |
| 89 | - </div> | |
| 90 | - <div class="col-lg-12"> | |
| 91 | - <div class="col-xs-8 col-xs-offset-2 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2"> | |
| 92 | - <div class="text-center"> | |
| 93 | - <button class="btn btn-link" ng-click="vm.showResults()">Resultados</button> | |
| 94 | - </div> | |
| 95 | - </div> | |
| 96 | - </div> | |
| 97 | - <div class="col-md-12"> | |
| 98 | - <div class="col-xs-12"> | |
| 99 | - <div class="text-center"> | |
| 100 | - <span>Compartilhe esta proposta</span> | |
| 101 | - <social-share></social-share> | |
| 102 | - </div> | |
| 103 | - </div> | |
| 104 | - </div> | |
| 105 | - <div class="clearfix"></div> | |
| 106 | - </div> | |
| 107 | - </div> | |
| 108 | - </div> | |
| 109 | - </div> | |
| 110 | - </div> | |
| 111 | - <div class="talk-proposal row proposal-row"> | |
| 112 | - <div class="row-height"> | |
| 113 | - <div class="col-md-12 col-height"> | |
| 114 | - <div class=""> | |
| 115 | - <h2>Bate-papo virtual com ministr@s</h2> | |
| 116 | - </div> | |
| 117 | - </div> | |
| 118 | - </div> | |
| 119 | - </div> | |
| 120 | - </section> | |
| 121 | - </article> | |
| 122 | -</div> |
src/app/components/programa/programa.scss
| ... | ... | @@ -1,409 +0,0 @@ |
| 1 | -// Variables | |
| 2 | -$program-box-space: 20px; | |
| 3 | -$scale: 1.1; | |
| 4 | -$time: .2s; | |
| 5 | -$darken: 15%; | |
| 6 | - | |
| 7 | -// Commons | |
| 8 | -.button--themed { | |
| 9 | - padding: $program-box-space; | |
| 10 | - .btn { | |
| 11 | - color: #fff; | |
| 12 | - font-weight: bold; | |
| 13 | - padding: 15px 0; | |
| 14 | - border-left: 0; | |
| 15 | - border-right: 0; | |
| 16 | - border-top: 0; | |
| 17 | - border-radius: 6px; | |
| 18 | - | |
| 19 | - -webkit-transition: all $time ease-in-out; | |
| 20 | - -moz-transition: all $time ease-in-out; | |
| 21 | - -o-transition: all $time ease-in-out; | |
| 22 | - transition: all $time ease-in-out; | |
| 23 | - | |
| 24 | - @each $category, $color in $categories { | |
| 25 | - .#{$category} & { | |
| 26 | - background-color: $color; | |
| 27 | - border-bottom: 3px solid darken($color, $darken); | |
| 28 | - } | |
| 29 | - } | |
| 30 | - | |
| 31 | - &:hover, | |
| 32 | - &:focus { | |
| 33 | - @each $category, $color in $categories { | |
| 34 | - .#{$category} & { | |
| 35 | - background-color: darken($color, $darken); | |
| 36 | - } | |
| 37 | - } | |
| 38 | - } | |
| 39 | - | |
| 40 | - .contraste & { | |
| 41 | - color: #262626; | |
| 42 | - background-color: #fff; | |
| 43 | - } | |
| 44 | - } | |
| 45 | - | |
| 46 | - .btn-circle { | |
| 47 | - width: 64px; | |
| 48 | - height: 64px; | |
| 49 | - border-radius: 100%; | |
| 50 | - } | |
| 51 | - | |
| 52 | - // &.vote-buttons { | |
| 53 | - // padding-bottom: 40px; | |
| 54 | - // } | |
| 55 | - | |
| 56 | - .btn.vote-buttons-up { | |
| 57 | - float: right; | |
| 58 | - margin-right: 10px; | |
| 59 | - background-color: #32dbb5; | |
| 60 | - border-bottom: 3px solid #1da485; | |
| 61 | - | |
| 62 | - &:hover, | |
| 63 | - &:focus { | |
| 64 | - background-color: #1da485; | |
| 65 | - } | |
| 66 | - } | |
| 67 | - | |
| 68 | - .btn.vote-buttons-down { | |
| 69 | - float: left; | |
| 70 | - margin-left: 10px; | |
| 71 | - background-color: #db4127; | |
| 72 | - border-bottom: 3px solid #9c2d1a; | |
| 73 | - | |
| 74 | - &:hover, | |
| 75 | - &:focus { | |
| 76 | - background-color: #9c2d1a; | |
| 77 | - } | |
| 78 | - | |
| 79 | - | |
| 80 | - // @media (max-width: $screen-sm) { | |
| 81 | - // margin-left: | |
| 82 | - // } | |
| 83 | - } | |
| 84 | - | |
| 85 | - .vote-buttons-up, | |
| 86 | - .vote-buttons-down { | |
| 87 | - font-size: 30px; | |
| 88 | - margin-bottom: 20px; | |
| 89 | - } | |
| 90 | -} | |
| 91 | - | |
| 92 | - | |
| 93 | -.program-box { | |
| 94 | - cursor: pointer; | |
| 95 | - background-color: #fff; | |
| 96 | - margin-top: $program-box-space; | |
| 97 | - margin-bottom: $program-box-space; | |
| 98 | - border-radius: 3px; | |
| 99 | - overflow: hidden; | |
| 100 | - | |
| 101 | - .contraste & { | |
| 102 | - color: #fff; | |
| 103 | - background-color: #262626; | |
| 104 | - } | |
| 105 | - | |
| 106 | - &--category { | |
| 107 | - font-size: 14px; | |
| 108 | - font-weight: bold; | |
| 109 | - text-transform: uppercase; | |
| 110 | - line-height: 22px; | |
| 111 | - display: block; | |
| 112 | - height: 30px; | |
| 113 | - margin: 0; | |
| 114 | - padding: 5px $program-box-space; | |
| 115 | - color: #ffffff; | |
| 116 | - | |
| 117 | - @each $category, $color in $categories { | |
| 118 | - .#{$category} & { | |
| 119 | - background-color: $color; | |
| 120 | - } | |
| 121 | - } | |
| 122 | - | |
| 123 | - .contraste & { | |
| 124 | - background-color: #262626; | |
| 125 | - } | |
| 126 | - } | |
| 127 | - | |
| 128 | - &--title { | |
| 129 | - | |
| 130 | - padding: 0 $program-box-space; | |
| 131 | - | |
| 132 | - h1 { | |
| 133 | - font-size: 18px; | |
| 134 | - font-weight: bold; | |
| 135 | - margin: 0 0 $program-box-space 0; | |
| 136 | - display: table-cell; | |
| 137 | - vertical-align: middle; | |
| 138 | - | |
| 139 | - // Altura das linhas do abstract | |
| 140 | - $hLine: 20px; | |
| 141 | - // default | |
| 142 | - height: $hLine * 2; | |
| 143 | - | |
| 144 | - @media (max-width: $screen-xs) { | |
| 145 | - // height: $hLine * 3; | |
| 146 | - height: auto; | |
| 147 | - } | |
| 148 | - | |
| 149 | - @media (min-width: $screen-xs + 1) { | |
| 150 | - // height: $hLine * 2; | |
| 151 | - height: auto; | |
| 152 | - } | |
| 153 | - | |
| 154 | - @media (min-width: $screen-sm + 1) { | |
| 155 | - height: $hLine * 2; | |
| 156 | - } | |
| 157 | - | |
| 158 | - @media (min-width: $screen-md + 1) { | |
| 159 | - height: $hLine * 2; | |
| 160 | - } | |
| 161 | - } | |
| 162 | - } | |
| 163 | - | |
| 164 | - &--abstract { | |
| 165 | - padding: 0 $program-box-space; | |
| 166 | - display: table-cell; | |
| 167 | - vertical-align: middle; | |
| 168 | - | |
| 169 | - // Altura das linhas do abstract | |
| 170 | - $pLine: 20px; | |
| 171 | - // 1 linha: 19px -> 20 | |
| 172 | - // 2 linhas: 38px -> 40 | |
| 173 | - // 3 linhas: 57px -> 60 | |
| 174 | - // 4 linhas: 76px -> 80 | |
| 175 | - | |
| 176 | - height: $pLine * 2; // default | |
| 177 | - | |
| 178 | - @media (max-width: $screen-xs) { | |
| 179 | - // height: $pLine * 4; | |
| 180 | - height: auto; | |
| 181 | - } | |
| 182 | - | |
| 183 | - @media (min-width: $screen-xs + 1) { | |
| 184 | - // height: $pLine * 3; | |
| 185 | - height: auto; | |
| 186 | - } | |
| 187 | - | |
| 188 | - @media (min-width: $screen-sm + 1) { | |
| 189 | - height: $pLine * 4; | |
| 190 | - } | |
| 191 | - | |
| 192 | - @media (min-width: $screen-md + 1) { | |
| 193 | - height: $pLine * 3; | |
| 194 | - } | |
| 195 | - | |
| 196 | - p { margin: 0; } | |
| 197 | - } | |
| 198 | - | |
| 199 | - &--image-wrapper { | |
| 200 | - position: relative; | |
| 201 | - // width: 100%; | |
| 202 | - // width: 370px; | |
| 203 | - // height: 170px; | |
| 204 | - | |
| 205 | - overflow: hidden; | |
| 206 | - // text-align: center; | |
| 207 | - min-height: 170px; | |
| 208 | - } | |
| 209 | - | |
| 210 | - &--image { | |
| 211 | - min-height: 170px; | |
| 212 | - background-position: center; | |
| 213 | - background-size: cover; | |
| 214 | - background-repeat: no-repeat; | |
| 215 | - | |
| 216 | - -webkit-transition: all $time ease-in-out; | |
| 217 | - -moz-transition: all $time ease-in-out; | |
| 218 | - -o-transition: all $time ease-in-out; | |
| 219 | - transition: all $time ease-in-out; | |
| 220 | - } | |
| 221 | - | |
| 222 | - &:hover { | |
| 223 | - background-color: #d9d9d9; | |
| 224 | - | |
| 225 | - .program-box--image { | |
| 226 | - -webkit-transform: scale($scale); /* prefixo para browsers webkit */ | |
| 227 | - -moz-transform: scale($scale); /* prefixo para browsers gecko */ | |
| 228 | - -o-transform: scale($scale); /* prefixo para opera */ | |
| 229 | - transform: scale($scale); | |
| 230 | - } | |
| 231 | - | |
| 232 | - .contraste & { | |
| 233 | - background-color: #262626; | |
| 234 | - } | |
| 235 | - } | |
| 236 | -} | |
| 237 | - | |
| 238 | -.program-preview { | |
| 239 | - .program-banner { | |
| 240 | - position: relative; | |
| 241 | - } | |
| 242 | - | |
| 243 | - .program-banner--image { | |
| 244 | - width: 100%; | |
| 245 | - } | |
| 246 | - | |
| 247 | - .program-banner--strip { | |
| 248 | - color: #fff; | |
| 249 | - position: absolute; | |
| 250 | - bottom: 15%; | |
| 251 | - right: 0; | |
| 252 | - width: 50%; | |
| 253 | - text-align: center; | |
| 254 | - | |
| 255 | - @each $category, $color in $categories { | |
| 256 | - .#{$category} & { | |
| 257 | - background-color: $color; | |
| 258 | - } | |
| 259 | - } | |
| 260 | - | |
| 261 | - @media (max-width: $screen-sm){ | |
| 262 | - position: relative; | |
| 263 | - width: 100%; | |
| 264 | - } | |
| 265 | - } | |
| 266 | - | |
| 267 | - .program-banner--title { | |
| 268 | - font-size: 32px; | |
| 269 | - text-transform: uppercase; | |
| 270 | - margin-top: 0; | |
| 271 | - padding-top: 20px; | |
| 272 | - } | |
| 273 | - .program-banner--title, | |
| 274 | - .program-banner--abstract { | |
| 275 | - font-weight: bold; | |
| 276 | - } | |
| 277 | - .program-banner--abstract { | |
| 278 | - padding-bottom: 10px; | |
| 279 | - } | |
| 280 | -} | |
| 281 | - | |
| 282 | -.show-content-row { | |
| 283 | - .button--themed { | |
| 284 | - .btn { | |
| 285 | - font-size: 38px; | |
| 286 | - | |
| 287 | - @media (max-width: $screen-sm){ | |
| 288 | - font-size: 20px; | |
| 289 | - } | |
| 290 | - } | |
| 291 | - } | |
| 292 | -} | |
| 293 | - | |
| 294 | -.row-height { | |
| 295 | - display: table; | |
| 296 | - table-layout: fixed; | |
| 297 | - height: 100%; | |
| 298 | - width: 100%; | |
| 299 | - border-spacing: 20px; | |
| 300 | - | |
| 301 | - @media (max-width: $screen-sm) { | |
| 302 | - display: block; | |
| 303 | - } | |
| 304 | - | |
| 305 | - // @media (min-width: $screen-sm + 1) { | |
| 306 | - // height: $hLine * 2; | |
| 307 | - // } | |
| 308 | - | |
| 309 | - // @media (min-width: $screen-md + 1) { | |
| 310 | - // height: $hLine * 2; | |
| 311 | - // } | |
| 312 | -} | |
| 313 | - | |
| 314 | -.col-height { | |
| 315 | - display: table-cell; | |
| 316 | - float: none; | |
| 317 | - height: 100%; | |
| 318 | - vertical-align: top; | |
| 319 | - | |
| 320 | - border: 1px solid #000; | |
| 321 | - border-radius: 3px; | |
| 322 | - | |
| 323 | - @each $category, $color in $categories { | |
| 324 | - .#{$category} & { | |
| 325 | - border-color: $color; | |
| 326 | - } | |
| 327 | - } | |
| 328 | - | |
| 329 | - @media (max-width: $screen-sm){ | |
| 330 | - display: block; | |
| 331 | - border: none; | |
| 332 | - } | |
| 333 | -} | |
| 334 | - | |
| 335 | -.inside { | |
| 336 | - margin-top: 20px; | |
| 337 | - margin-bottom: 20px; | |
| 338 | -} | |
| 339 | - | |
| 340 | -.inside-full-height { | |
| 341 | - height: 100%; | |
| 342 | - margin-top: 0; | |
| 343 | - margin-bottom: 0; | |
| 344 | - | |
| 345 | - | |
| 346 | - @media (max-width: $screen-sm) { | |
| 347 | - border: 1px solid; | |
| 348 | - border-radius: 3px; | |
| 349 | - padding: 20px; | |
| 350 | - margin: 10px 0; | |
| 351 | - | |
| 352 | - @each $category, $color in $categories { | |
| 353 | - .#{$category} & { | |
| 354 | - border-color: $color; | |
| 355 | - } | |
| 356 | - } | |
| 357 | - } | |
| 358 | -} | |
| 359 | - | |
| 360 | - | |
| 361 | -.talk-proposal { | |
| 362 | - margin-top: -20px; | |
| 363 | -} | |
| 364 | - | |
| 365 | -.proposal-box { | |
| 366 | - | |
| 367 | - // padding: 10px 20px; | |
| 368 | - | |
| 369 | - .proposal-box--title { | |
| 370 | - font-size: 38px; | |
| 371 | - font-weight: 400; | |
| 372 | - text-align: center; | |
| 373 | - | |
| 374 | - margin-bottom: 20px; | |
| 375 | - } | |
| 376 | - | |
| 377 | - .proposal-box--text { | |
| 378 | - font-size: 24px; | |
| 379 | - font-weight: 700; | |
| 380 | - line-height: 1.2; | |
| 381 | - margin-bottom: 20px; | |
| 382 | - } | |
| 383 | - | |
| 384 | - @each $category, $color in $categories { | |
| 385 | - .#{$category} & { | |
| 386 | - border-color: $color; | |
| 387 | - | |
| 388 | - .proposal-box--title { | |
| 389 | - color: $color; | |
| 390 | - } | |
| 391 | - } | |
| 392 | - } | |
| 393 | -} | |
| 394 | - | |
| 395 | -.program-content { | |
| 396 | - h2 { | |
| 397 | - font-size: 38px; | |
| 398 | - font-weight: 500; | |
| 399 | - margin-bottom: 40px; | |
| 400 | - padding-bottom: 20px; | |
| 401 | - | |
| 402 | - small { | |
| 403 | - display: block; | |
| 404 | - font-size: 16px; | |
| 405 | - padding-top: 5px; | |
| 406 | - text-transform: none; | |
| 407 | - } | |
| 408 | - } | |
| 409 | -} |
src/app/components/programas/programas.html
| ... | ... | @@ -1,74 +0,0 @@ |
| 1 | -<div id="lista-de-programas" class="row"> | |
| 2 | - <div class="col-sm-4 col-md-3"> | |
| 3 | - <div class="category-list"> | |
| 4 | - <nav class="navigation"> | |
| 5 | - <h3 class="category-list--title"><b>Programas</b> por Tema</h3> | |
| 6 | - <div class="list-group category-list" ng-class="vm.categoryFilter.slug"> | |
| 7 | - <button type="button" class="list-group-item category-list--item" | |
| 8 | - ng-repeat="category in vm.categories" | |
| 9 | - ng-class="{active: vm.categoryFilter.slug === category.slug}" | |
| 10 | - ng-click="vm.filterByCategory(category, $event)"> | |
| 11 | - | |
| 12 | - <span class="category-list--icon-circle" ng-class="category.slug"></span> | |
| 13 | - <span class="category-list--icon icon" ng-class="'icon-tema-' + category.slug"></span> | |
| 14 | - <span class="category-list--label">{{::category.name}}</span> | |
| 15 | - <span class="category-list--icon--right glyphicon glyphicon-chevron-right"></span> | |
| 16 | - </button> | |
| 17 | - </div> | |
| 18 | - </nav> | |
| 19 | - </div> | |
| 20 | - </div> | |
| 21 | - | |
| 22 | - <div class="col-sm-8 col-md-9"> | |
| 23 | - <article class="program-list"> | |
| 24 | - <header class="header"> | |
| 25 | - <h2>Conheça os programas <span class="small">({{vm.filtredProgramList.length}}/{{::vm.programs.length}})</span></h2> | |
| 26 | - <button type="button" class="btn btn-link" ng-click="vm.showAll($event)"> | |
| 27 | - <span class="glyphicon glyphicon-chevron-right"></span> Ver todos os {{::vm.programs.length}} programas | |
| 28 | - </button> | |
| 29 | - </header> | |
| 30 | - <div> | |
| 31 | - <div class="col-sm-12"> | |
| 32 | - <aside class="form-inline"> | |
| 33 | - <div class="row"> | |
| 34 | - <div class="col-xs-6 col-sm-7 col-md-9"> | |
| 35 | - <label for="programListFilter" class="control-label sr-only">Filtrar programas:</label> | |
| 36 | - <input id="programListFilter" type="search" class="form-control" ng-model="vm.query" placeholder="Filtrar programas" aria-label="Filtrar programas" > | |
| 37 | - </div> | |
| 38 | - | |
| 39 | - <!-- <label for="selectCategoryFilter" class="control-label sr-only">Filtrar por tema:</label> | |
| 40 | - <select id="selectCategoryFilter" name="selectCategoryFilter" class="form-control" ng-model="vm.categoryFilter" ng-options="category.name for category in vm.categories track by category.slug"> | |
| 41 | - <option value="">-- Filtrar por tema --</option> | |
| 42 | - </select> --> | |
| 43 | - | |
| 44 | - <div class="col-xs-6 col-sm-5 col-md-3"> | |
| 45 | - <label for="selectOrderBy" class="control-label sr-only">Ordernar por:</label> | |
| 46 | - <select id="selectOrderBy" name="selectOrderBy" class="form-control pull-right" ng-model="vm.orderCriteria" ng-options="orderCriteria.label for orderCriteria in vm.orderCriteries"> | |
| 47 | - <option value="">-- Ordernar por: --</option> | |
| 48 | - </select> | |
| 49 | - </div> | |
| 50 | - <!-- <div class="checkbox"> | |
| 51 | - <label> | |
| 52 | - <input type="checkbox" ng-model="vm.reverse"> | |
| 53 | - Reverso | |
| 54 | - </label> | |
| 55 | - </div> --> | |
| 56 | - | |
| 57 | - <!-- <input id="programListLimit" type="number" class="form-control input-sm" size="4" step="2" ng-model="vm.limitTo" aria-label="Limitar" > | |
| 58 | - <label for="programListLimit" class="control-label">Limite</label> --> | |
| 59 | - | |
| 60 | - </div> | |
| 61 | - </aside> | |
| 62 | - </div> | |
| 63 | - | |
| 64 | - <div ng-repeat="program in vm.filtredProgramList as results"> | |
| 65 | - <programa-box program="program" display="'box'" class="col-xs-12 col-sm-6"></programa-box> | |
| 66 | - <div ng-if="$odd" class="clearfix"></div> | |
| 67 | - </div> | |
| 68 | - <div class="animate-repeat" ng-if="results.length == 0"> | |
| 69 | - Nenhum programa encontrado. | |
| 70 | - </div> | |
| 71 | - </div> | |
| 72 | - </article> | |
| 73 | - </div> | |
| 74 | -</div> |
src/app/components/programas/programas.scss
| ... | ... | @@ -1,132 +0,0 @@ |
| 1 | -.program-list { | |
| 2 | - .header { | |
| 3 | - position: relative; | |
| 4 | - height: 40px; | |
| 5 | - margin-bottom: 10px; | |
| 6 | - | |
| 7 | - button { | |
| 8 | - position: absolute; | |
| 9 | - right: 0; | |
| 10 | - top: 2px; | |
| 11 | - } | |
| 12 | - } | |
| 13 | - | |
| 14 | - .form-inline { | |
| 15 | - input, | |
| 16 | - select { | |
| 17 | - width: 100%; | |
| 18 | - } | |
| 19 | - } | |
| 20 | -} | |
| 21 | - | |
| 22 | -.category-list { | |
| 23 | - .category-list--title { | |
| 24 | - color: #ffffff; | |
| 25 | - font-size: 16px; | |
| 26 | - margin: 0; | |
| 27 | - padding: 20px; | |
| 28 | - background-color: #484848; | |
| 29 | - border-top-left-radius: 5px; | |
| 30 | - border-top-right-radius: 5px; | |
| 31 | - overflow: hidden; | |
| 32 | - } | |
| 33 | - | |
| 34 | - | |
| 35 | - .category-list--group { | |
| 36 | - } | |
| 37 | - | |
| 38 | - .category-list--item { | |
| 39 | - position: relative; | |
| 40 | - text-transform: uppercase; | |
| 41 | - font-weight: bold; | |
| 42 | - padding: 0; | |
| 43 | - height: 68px; | |
| 44 | - overflow: hidden; | |
| 45 | - } | |
| 46 | - | |
| 47 | - .category-list--label { | |
| 48 | - margin-left: 70px; | |
| 49 | - margin-right: 30px; | |
| 50 | - display: inline-block; | |
| 51 | - z-index: 99999; | |
| 52 | - } | |
| 53 | - | |
| 54 | - &--icon-circle { | |
| 55 | - width: 48px; | |
| 56 | - height: 48px; | |
| 57 | - position: absolute; | |
| 58 | - top: 10px; | |
| 59 | - left: 10px; | |
| 60 | - // border: 1px solid #fff; | |
| 61 | - border-radius: 48px; | |
| 62 | - | |
| 63 | - -webkit-transition: -webkit-transform 0.2s ease-in-out; | |
| 64 | - -moz-transition: -moz-transform 0.2s ease-in-out; | |
| 65 | - -o-transition: -o-transform 0.2s ease-in-out; | |
| 66 | - transition: transform 0.2s ease-in-out; | |
| 67 | - | |
| 68 | - // -webkit-transition: all 0.2s ease-in-out; | |
| 69 | - // -moz-transition: all 0.2s ease-in-out; | |
| 70 | - // -o-transition: all 0.2s ease-in-out; | |
| 71 | - // transition: all 0.2s ease-in-out; | |
| 72 | - | |
| 73 | - z-index: 0; | |
| 74 | - | |
| 75 | - .active & { | |
| 76 | - z-index: -1; | |
| 77 | - | |
| 78 | - @media (max-width: $screen-xs) { | |
| 79 | - transform: scale(20); | |
| 80 | - } | |
| 81 | - | |
| 82 | - @media (min-width: $screen-xs + 1) { | |
| 83 | - transform: scale(40); | |
| 84 | - } | |
| 85 | - | |
| 86 | - @media (min-width: $screen-sm + 1) { | |
| 87 | - transform: scale(20); | |
| 88 | - } | |
| 89 | - | |
| 90 | - // @media (min-width: $screen-md + 1) { | |
| 91 | - // transform: scale(20); | |
| 92 | - // } | |
| 93 | - } | |
| 94 | - | |
| 95 | - @each $category, $color in $categories { | |
| 96 | - &.#{$category} { | |
| 97 | - background-color: $color; | |
| 98 | - } | |
| 99 | - } | |
| 100 | - } | |
| 101 | - | |
| 102 | - .category-list--icon { | |
| 103 | - position: absolute; | |
| 104 | - top: -16px; | |
| 105 | - left: -14px; | |
| 106 | - transform: scale(0.35); | |
| 107 | - } | |
| 108 | - | |
| 109 | - .category-list--icon--right { | |
| 110 | - position: absolute; | |
| 111 | - right: 9px; | |
| 112 | - top: 50%; | |
| 113 | - margin-top: -9px; | |
| 114 | - transform: scale(1.4); | |
| 115 | - } | |
| 116 | - | |
| 117 | - .list-group-item.active, | |
| 118 | - .list-group-item.active:hover, | |
| 119 | - .list-group-item.active:focus { | |
| 120 | - background-color: #f5f5f5; | |
| 121 | - } | |
| 122 | - | |
| 123 | - // @each $category, $color in $categories { | |
| 124 | - // &.#{$category} { | |
| 125 | - // .list-group-item.active, | |
| 126 | - // .list-group-item.active:hover, | |
| 127 | - // .list-group-item.active:focus { | |
| 128 | - // background-color: $color; | |
| 129 | - // } | |
| 130 | - // } | |
| 131 | - // } | |
| 132 | -} |
src/app/index.route.js
| ... | ... | @@ -57,7 +57,7 @@ |
| 57 | 57 | 'footer': { templateUrl: 'app/pages/footer/footer.html' } |
| 58 | 58 | } |
| 59 | 59 | }) |
| 60 | - .state('programa-conheca', { | |
| 60 | + .state('conheca-o-programa', { | |
| 61 | 61 | url: '/programa/:slug/conheca-o-programa', |
| 62 | 62 | views: { |
| 63 | 63 | 'header': { templateUrl: 'app/pages/header/header.html' }, | ... | ... |
src/app/index.run.js
| ... | ... | @@ -18,7 +18,7 @@ |
| 18 | 18 | $rootScope.$on('$stateChangeStart', function(event, next) { |
| 19 | 19 | |
| 20 | 20 | if (!next.data || !next.data.authorizedRoles) { |
| 21 | - $log.debug('runAuth: public url/state'); | |
| 21 | + $log.debug('[RUN] Auth: public url/state'); | |
| 22 | 22 | return; |
| 23 | 23 | } |
| 24 | 24 | |
| ... | ... | @@ -37,7 +37,7 @@ |
| 37 | 37 | } |
| 38 | 38 | }); |
| 39 | 39 | |
| 40 | - $log.debug('runAuth end.'); | |
| 40 | + $log.debug('[RUN] Auth end.'); | |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | 43 | /** @ngInject */ |
| ... | ... | @@ -75,7 +75,7 @@ |
| 75 | 75 | } |
| 76 | 76 | }; |
| 77 | 77 | |
| 78 | - $log.debug('runAccessibility end.'); | |
| 78 | + $log.debug('[RUN] Accessibility end.'); | |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | /** @ngInject */ |
| ... | ... | @@ -86,11 +86,11 @@ |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | 88 | /** @ngInject */ |
| 89 | - function runPath($rootScope, api, $window, $log) { | |
| 89 | + function runPath($rootScope, API, $window, $log) { | |
| 90 | 90 | var isProduction = (/^http:\/\/dialoga\.gov\.br\//.test($window.location.href)); |
| 91 | - $rootScope.basePath = isProduction ? api.hostProd : api.hostHom; | |
| 91 | + $rootScope.basePath = isProduction ? API.hostProd : API.hostHom; | |
| 92 | 92 | |
| 93 | - $log.debug('runPath end.'); | |
| 93 | + $log.debug('[RUN] Path end.'); | |
| 94 | 94 | } |
| 95 | 95 | |
| 96 | 96 | /** @ngInject */ |
| ... | ... | @@ -122,7 +122,7 @@ |
| 122 | 122 | |
| 123 | 123 | /** @ngInject */ |
| 124 | 124 | function runBlock($log) { |
| 125 | - $log.debug('runBlock end.'); | |
| 125 | + $log.debug('[RUN] Block end.'); | |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | 128 | })(); | ... | ... |
src/app/index.scss
| ... | ... | @@ -25,6 +25,12 @@ $gray: #f1f1f1; |
| 25 | 25 | $categories: (saude: #3449b7, seguranca-publica: #e34748, educacao: #f39720, reducao-da-pobreza: #3ebb8f, cultura: #a63738); |
| 26 | 26 | $categories-descriptions: (saude: "Saúde é direito de todos e dever do Estado. O Sistema Único de Saúde (SUS) é universal, integral e de responsabilidade do Governo Federal, estados e municípios. Atende a todos os brasileiros.", seguranca-publica: "A segurança pública é um direito fundamental dos cidadãos. A proteção da vida, a disseminação da cultura da paz e a integração dos órgãos e instituições municipais, estaduais e federais são os maiores compromissos dessa política pública.", educacao: "Uma pátria educadora se faz com oportunidades para todos. Nos últimos anos, o Brasil criou esse caminho de oportunidades. Ampliamos o acesso à educação em todos os níveis de ensino – da creche à pós-graduação – e para todos os brasileiros, independentemente de sua classe social. E ainda há muito a fazer. O Plano Nacional de Educação (PNE) estabelece novas metas para que o governo federal trabalhe em parceria com a sociedade, com os estados e os municípios na construção de um futuro melhor. Queremos agora um salto na qualidade do ensino.", reducao-da-pobreza: "Com o esforço do Brasil para reduzir a pobreza e a desigualdade, 36 milhões de pessoas superaram a miséria na última década e o país saiu do Mapa da Fome das Nações Unidas.", cultura: "O que nos singulariza no conjunto das nações é, em última instância, nossa cultura. É por ela que nos identificamos como brasileiros de norte a sul deste país. Uma grande nação precisa ter um desenvolvimento cultural à altura de sua grandeza, contemplando as dimensões simbólica, econômica e cidadã da cultura, que são parte central do projeto de um país democrático e plural. A pluralidade é nossa singularidade."); |
| 27 | 27 | |
| 28 | +// Programs | |
| 29 | +$scale: 1.1; | |
| 30 | +$time: .2s; | |
| 31 | +$darken: 15%; | |
| 32 | + | |
| 33 | + | |
| 28 | 34 | // ------------- |
| 29 | 35 | |
| 30 | 36 | body { |
| ... | ... | @@ -53,11 +59,89 @@ body { |
| 53 | 59 | z-index: 2; |
| 54 | 60 | } |
| 55 | 61 | |
| 56 | -.browsehappy { | |
| 57 | - margin: 0.2em 0; | |
| 58 | - background: #ccc; | |
| 59 | - color: #000; | |
| 60 | - padding: 0.2em 0; | |
| 62 | +// Commons | |
| 63 | +.button--themed { | |
| 64 | + padding: 20px; | |
| 65 | + .btn { | |
| 66 | + color: #fff; | |
| 67 | + font-weight: bold; | |
| 68 | + padding: 15px 0; | |
| 69 | + border-left: 0; | |
| 70 | + border-right: 0; | |
| 71 | + border-top: 0; | |
| 72 | + border-radius: 6px; | |
| 73 | + | |
| 74 | + -webkit-transition: all $time ease-in-out; | |
| 75 | + -moz-transition: all $time ease-in-out; | |
| 76 | + -o-transition: all $time ease-in-out; | |
| 77 | + transition: all $time ease-in-out; | |
| 78 | + | |
| 79 | + @each $category, $color in $categories { | |
| 80 | + .#{$category} & { | |
| 81 | + background-color: $color; | |
| 82 | + border-bottom: 3px solid darken($color, $darken); | |
| 83 | + } | |
| 84 | + } | |
| 85 | + | |
| 86 | + &:hover, | |
| 87 | + &:focus { | |
| 88 | + @each $category, $color in $categories { | |
| 89 | + .#{$category} & { | |
| 90 | + background-color: darken($color, $darken); | |
| 91 | + } | |
| 92 | + } | |
| 93 | + } | |
| 94 | + | |
| 95 | + .contraste & { | |
| 96 | + color: #262626; | |
| 97 | + background-color: #fff; | |
| 98 | + } | |
| 99 | + } | |
| 100 | + | |
| 101 | + .btn-circle { | |
| 102 | + width: 64px; | |
| 103 | + height: 64px; | |
| 104 | + border-radius: 100%; | |
| 105 | + } | |
| 106 | + | |
| 107 | + // &.vote-buttons { | |
| 108 | + // padding-bottom: 40px; | |
| 109 | + // } | |
| 110 | + | |
| 111 | + .btn.vote-buttons-up { | |
| 112 | + float: right; | |
| 113 | + margin-right: 10px; | |
| 114 | + background-color: #32dbb5; | |
| 115 | + border-bottom: 3px solid #1da485; | |
| 116 | + | |
| 117 | + &:hover, | |
| 118 | + &:focus { | |
| 119 | + background-color: #1da485; | |
| 120 | + } | |
| 121 | + } | |
| 122 | + | |
| 123 | + .btn.vote-buttons-down { | |
| 124 | + float: left; | |
| 125 | + margin-left: 10px; | |
| 126 | + background-color: #db4127; | |
| 127 | + border-bottom: 3px solid #9c2d1a; | |
| 128 | + | |
| 129 | + &:hover, | |
| 130 | + &:focus { | |
| 131 | + background-color: #9c2d1a; | |
| 132 | + } | |
| 133 | + | |
| 134 | + | |
| 135 | + // @media (max-width: $screen-sm) { | |
| 136 | + // margin-left: | |
| 137 | + // } | |
| 138 | + } | |
| 139 | + | |
| 140 | + .vote-buttons-up, | |
| 141 | + .vote-buttons-down { | |
| 142 | + font-size: 30px; | |
| 143 | + margin-bottom: 20px; | |
| 144 | + } | |
| 61 | 145 | } |
| 62 | 146 | |
| 63 | 147 | // Hack to fix "Barra do Brasil" | ... | ... |
| ... | ... | @@ -0,0 +1,65 @@ |
| 1 | +.row-height { | |
| 2 | + display: table; | |
| 3 | + table-layout: fixed; | |
| 4 | + height: 100%; | |
| 5 | + width: 100%; | |
| 6 | + border-spacing: 20px; | |
| 7 | + | |
| 8 | + @media (max-width: $screen-sm) { | |
| 9 | + display: block; | |
| 10 | + } | |
| 11 | + | |
| 12 | + // @media (min-width: $screen-sm + 1) { | |
| 13 | + // height: $hLine * 2; | |
| 14 | + // } | |
| 15 | + | |
| 16 | + // @media (min-width: $screen-md + 1) { | |
| 17 | + // height: $hLine * 2; | |
| 18 | + // } | |
| 19 | +} | |
| 20 | + | |
| 21 | +.col-height { | |
| 22 | + display: table-cell; | |
| 23 | + float: none; | |
| 24 | + height: 100%; | |
| 25 | + vertical-align: top; | |
| 26 | + | |
| 27 | + border: 1px solid #000; | |
| 28 | + border-radius: 3px; | |
| 29 | + | |
| 30 | + @each $category, $color in $categories { | |
| 31 | + .#{$category} & { | |
| 32 | + border-color: $color; | |
| 33 | + } | |
| 34 | + } | |
| 35 | + | |
| 36 | + @media (max-width: $screen-sm){ | |
| 37 | + display: block; | |
| 38 | + border: none; | |
| 39 | + } | |
| 40 | +} | |
| 41 | + | |
| 42 | +.inside { | |
| 43 | + margin-top: 20px; | |
| 44 | + margin-bottom: 20px; | |
| 45 | +} | |
| 46 | + | |
| 47 | +.inside-full-height { | |
| 48 | + height: 100%; | |
| 49 | + margin-top: 0; | |
| 50 | + margin-bottom: 0; | |
| 51 | + | |
| 52 | + | |
| 53 | + @media (max-width: $screen-sm) { | |
| 54 | + border: 1px solid; | |
| 55 | + border-radius: 3px; | |
| 56 | + padding: 20px; | |
| 57 | + margin: 10px 0; | |
| 58 | + | |
| 59 | + @each $category, $color in $categories { | |
| 60 | + .#{$category} & { | |
| 61 | + border-color: $color; | |
| 62 | + } | |
| 63 | + } | |
| 64 | + } | |
| 65 | +} | ... | ... |
src/app/pages/article/article.service.js
| ... | ... | @@ -6,12 +6,12 @@ |
| 6 | 6 | .factory('ArticleService', ArticleService); |
| 7 | 7 | |
| 8 | 8 | /** @ngInject */ |
| 9 | - function ArticleService($http, $q, $rootScope, UtilService, Slug, $log) { | |
| 9 | + function ArticleService($http, $q, $rootScope, API, UtilService, Slug, $log) { | |
| 10 | 10 | $log.debug('ArticleService'); |
| 11 | 11 | |
| 12 | - var idArticleHome = '103358'; | |
| 13 | - var idArticleAbout = '108073'; | |
| 14 | - var idArticleTerms = '107880'; | |
| 12 | + var idArticleHome = API.articleId.home; | |
| 13 | + var idArticleAbout = API.articleId.about; | |
| 14 | + var idArticleTerms = API.articleId.terms; | |
| 15 | 15 | |
| 16 | 16 | var _savedAbstract = null; |
| 17 | 17 | |
| ... | ... | @@ -22,6 +22,9 @@ |
| 22 | 22 | getTerms: getTerms, |
| 23 | 23 | getArticleById: getArticleById, |
| 24 | 24 | getArticleBySlug: getArticleBySlug, |
| 25 | + getCategories: getCategories, | |
| 26 | + getCategoryBySlug: getCategoryBySlug, | |
| 27 | + getPrograms: getPrograms, | |
| 25 | 28 | getContentById: getContentById, |
| 26 | 29 | setHomeAbstract: setHomeAbstract, |
| 27 | 30 | getHomeAbstract: getHomeAbstract |
| ... | ... | @@ -89,6 +92,34 @@ |
| 89 | 92 | }, cbError); |
| 90 | 93 | } |
| 91 | 94 | |
| 95 | + function getCategories (cbSuccess, cbError) { | |
| 96 | + return getHome(function(data){ | |
| 97 | + cbSuccess(data.article.categories); | |
| 98 | + }, cbError); | |
| 99 | + } | |
| 100 | + | |
| 101 | + function getCategoryBySlug (slug, cbSuccess, cbError) { | |
| 102 | + return getHome(function (data){ | |
| 103 | + var result = null; | |
| 104 | + | |
| 105 | + for (var i = data.article.categories.length - 1; i >= 0; i--) { | |
| 106 | + var category = data.article.categories[i]; | |
| 107 | + if (category.slug === slug) { | |
| 108 | + result = category; | |
| 109 | + break; | |
| 110 | + } | |
| 111 | + } | |
| 112 | + | |
| 113 | + cbSuccess(result); | |
| 114 | + }, cbError); | |
| 115 | + } | |
| 116 | + | |
| 117 | + function getPrograms (cbSuccess, cbError) { | |
| 118 | + return getHome(function(data){ | |
| 119 | + cbSuccess(data.article.children); | |
| 120 | + }, cbError); | |
| 121 | + } | |
| 122 | + | |
| 92 | 123 | function getContentById (contentId, cbSuccess, cbError) { |
| 93 | 124 | return getArticleById(contentId, { |
| 94 | 125 | fields: 'id,body&content_type=ProposalsDiscussionPlugin::Topic' |
| ... | ... | @@ -99,7 +130,7 @@ |
| 99 | 130 | return getArticleById(idArticleHome, { |
| 100 | 131 | fields: 'id,children,categories,abstract,title,image,url,setting,position', |
| 101 | 132 | private_token: 'null' |
| 102 | - }, _handleCategoryColors(cbSuccess), cbError); | |
| 133 | + }, _handleCategory(cbSuccess), cbError); | |
| 103 | 134 | } |
| 104 | 135 | |
| 105 | 136 | function getAbout (cbSuccess, cbError) { |
| ... | ... | @@ -110,20 +141,23 @@ |
| 110 | 141 | return getArticleById(idArticleTerms, {}, cbSuccess, cbError); |
| 111 | 142 | } |
| 112 | 143 | |
| 113 | - function _handleCategoryColors (cbSuccess) { | |
| 144 | + function _handleCategory (cbSuccess) { | |
| 114 | 145 | // var darkFactor = 0.15; |
| 115 | 146 | |
| 116 | 147 | return function (data) { |
| 117 | - // if(data.article.categories){ | |
| 118 | - // var categories = data.article.categories; | |
| 148 | + if(data.article.categories){ | |
| 149 | + // var categories = data.article.categories; | |
| 119 | 150 | |
| 151 | + // Handle Category Data | |
| 152 | + | |
| 153 | + // Handle Category Colors | |
| 120 | 154 | // for (var i = categories.length - 1; i >= 0; i--) { |
| 121 | 155 | // var category = categories[i]; |
| 122 | 156 | // if(category.color && !category.bgColor){ |
| 123 | 157 | // category.colorDarker = $window.ColorLuminance(category.color, 0.15); |
| 124 | 158 | // } |
| 125 | 159 | // }; |
| 126 | - // } | |
| 160 | + } | |
| 127 | 161 | cbSuccess(data); |
| 128 | 162 | }; |
| 129 | 163 | } | ... | ... |
src/app/pages/inicio/inicio.html
| ... | ... | @@ -28,6 +28,13 @@ |
| 28 | 28 | |
| 29 | 29 | <section class="section-gray section-space-up" ng-if="pageInicio.article"> |
| 30 | 30 | <div class="container"> |
| 31 | - <programa-list article="pageInicio.article"></programa-list> | |
| 31 | + <div id="lista-de-programas" class="row"> | |
| 32 | + <div class="col-sm-4 col-md-3"> | |
| 33 | + <category-list></category-list> | |
| 34 | + </div> | |
| 35 | + <div class="col-sm-8 col-md-9"> | |
| 36 | + <article-grid></article-grid> | |
| 37 | + </div> | |
| 38 | + </div> | |
| 32 | 39 | </div> |
| 33 | 40 | </section> | ... | ... |
src/app/pages/programas/conheca-o-programa.html
| 1 | 1 | <div class="container page--conheca-o-programa"> |
| 2 | - <div ng-if="pageProgramaContent.program && pageProgramaContent.categories"> | |
| 3 | - <article-bar category="pageProgramaContent.program.categories[0]" categories="pageProgramaContent.categories"></article-bar> | |
| 2 | + <div ng-if="pageProgramaContent.article && pageProgramaContent.categories"> | |
| 3 | + <article-bar category="pageProgramaContent.article.categories[0]" categories="pageProgramaContent.categories"></article-bar> | |
| 4 | 4 | </div> |
| 5 | 5 | |
| 6 | - <div ng-if="!pageProgramaContent.program.body"> | |
| 6 | + <div ng-if="!pageProgramaContent.article.body"> | |
| 7 | 7 | <div ng-if="!pageProgramaContent.error" class="alert alert-info" role="alert">Carregando detalhes sobre o progama...</div> |
| 8 | 8 | <div ng-if="pageProgramaContent.error" class="alert alert-warning" role="alert">{{pageProgramaContent}}</div> |
| 9 | 9 | </div> |
| 10 | 10 | |
| 11 | - <div ng-if="pageProgramaContent.program.body"> | |
| 11 | + <div ng-if="pageProgramaContent.article.body"> | |
| 12 | 12 | <article class="program-content"> |
| 13 | 13 | <div> |
| 14 | - <section ng-bind-html="pageProgramaContent.program.body"></section> | |
| 14 | + <section ng-bind-html="pageProgramaContent.article.body"></section> | |
| 15 | 15 | </div> |
| 16 | 16 | </article> |
| 17 | - <aside class="program--aside"ng-class="pageProgramaContent.program.categories[0].slug"> | |
| 17 | + <aside class="program--aside"ng-class="pageProgramaContent.article.categories[0].slug"> | |
| 18 | 18 | <div class="col-sm-6" > |
| 19 | 19 | <div class="button--themed"> |
| 20 | 20 | <button class="btn btn-block" ng-click="pageProgramaContent.goToPreview()"> | ... | ... |
| ... | ... | @@ -0,0 +1,81 @@ |
| 1 | +(function() { | |
| 2 | + 'use strict'; | |
| 3 | + | |
| 4 | + angular | |
| 5 | + .module('dialoga') | |
| 6 | + .controller('ProgramaContentPageController', ProgramaContentPageController); | |
| 7 | + | |
| 8 | + /** @ngInject */ | |
| 9 | + function ProgramaContentPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { | |
| 10 | + $log.debug('ProgramaContentPageController'); | |
| 11 | + | |
| 12 | + var vm = this; | |
| 13 | + | |
| 14 | + vm.ArticleService = ArticleService; | |
| 15 | + vm.$state = $state; | |
| 16 | + vm.$location = $location; | |
| 17 | + vm.$scope = $scope; | |
| 18 | + vm.$rootScope = $rootScope; | |
| 19 | + vm.$log = $log; | |
| 20 | + | |
| 21 | + vm.init(); | |
| 22 | + } | |
| 23 | + | |
| 24 | + ProgramaContentPageController.prototype.init = function () { | |
| 25 | + var vm = this; | |
| 26 | + | |
| 27 | + var params = vm.$state.params; | |
| 28 | + var slug = params.slug; | |
| 29 | + | |
| 30 | + vm.article = null; | |
| 31 | + vm.categories = null; | |
| 32 | + vm.currentCategory = null; | |
| 33 | + vm.loading = true; | |
| 34 | + vm.error = false; | |
| 35 | + | |
| 36 | + vm.ArticleService.getCategories(function(categories){ | |
| 37 | + vm.categories = categories; | |
| 38 | + }, function (error) { | |
| 39 | + vm.error = error; | |
| 40 | + vm.$log.error(error); | |
| 41 | + }); | |
| 42 | + | |
| 43 | + vm.ArticleService.getArticleBySlug(slug, function(article){ | |
| 44 | + vm.article = article; | |
| 45 | + vm.currentCategory = vm.article.categories[0]; | |
| 46 | + | |
| 47 | + vm.loadContent(); | |
| 48 | + | |
| 49 | + }, function (error) { | |
| 50 | + vm.$log.error(error); | |
| 51 | + vm.$log.info('Rollback to home page.'); | |
| 52 | + vm.$state.go('inicio', {}, {location: true}); | |
| 53 | + }); | |
| 54 | + }; | |
| 55 | + | |
| 56 | + ProgramaContentPageController.prototype.loadContent = function () { | |
| 57 | + var vm = this; | |
| 58 | + | |
| 59 | + vm.loading = true; | |
| 60 | + if(!vm.article.body){ | |
| 61 | + vm.ArticleService.getContentById(vm.article.id, function (data) { | |
| 62 | + vm.article.body = data.article.body; | |
| 63 | + vm.loading = false; | |
| 64 | + }, function (error) { | |
| 65 | + vm.loading = false; | |
| 66 | + vm.error = error; | |
| 67 | + }); | |
| 68 | + } | |
| 69 | + vm.loading = false; | |
| 70 | + }; | |
| 71 | + | |
| 72 | + ProgramaContentPageController.prototype.goToPreview = function () { | |
| 73 | + var vm = this; | |
| 74 | + | |
| 75 | + vm.$state.go('programa', { | |
| 76 | + slug: vm.article.slug | |
| 77 | + }, { | |
| 78 | + location: true | |
| 79 | + }); | |
| 80 | + }; | |
| 81 | +})(); | ... | ... |
src/app/pages/programas/programa.content.controller.js
| ... | ... | @@ -1,81 +0,0 @@ |
| 1 | -(function() { | |
| 2 | - 'use strict'; | |
| 3 | - | |
| 4 | - angular | |
| 5 | - .module('dialoga') | |
| 6 | - .controller('ProgramaContentPageController', ProgramaContentPageController); | |
| 7 | - | |
| 8 | - /** @ngInject */ | |
| 9 | - function ProgramaContentPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { | |
| 10 | - $log.debug('ProgramaContentPageController'); | |
| 11 | - | |
| 12 | - var vm = this; | |
| 13 | - | |
| 14 | - vm.ArticleService = ArticleService; | |
| 15 | - vm.$state = $state; | |
| 16 | - vm.$location = $location; | |
| 17 | - vm.$scope = $scope; | |
| 18 | - vm.$rootScope = $rootScope; | |
| 19 | - vm.$log = $log; | |
| 20 | - | |
| 21 | - vm.init(); | |
| 22 | - } | |
| 23 | - | |
| 24 | - ProgramaContentPageController.prototype.init = function () { | |
| 25 | - var vm = this; | |
| 26 | - | |
| 27 | - var params = vm.$state.params; | |
| 28 | - var slug = params.slug; | |
| 29 | - | |
| 30 | - vm.program = null; | |
| 31 | - vm.categories = null; | |
| 32 | - vm.currentCategory = null; | |
| 33 | - vm.loading = true; | |
| 34 | - vm.error = false; | |
| 35 | - | |
| 36 | - vm.ArticleService.getHome(function(data){ | |
| 37 | - vm.categories = data.article.categories; | |
| 38 | - }, function (error) { | |
| 39 | - vm.error = error; | |
| 40 | - vm.$log.error(error); | |
| 41 | - }); | |
| 42 | - | |
| 43 | - vm.ArticleService.getArticleBySlug(slug, function(program){ | |
| 44 | - vm.program = program; | |
| 45 | - vm.currentCategory = vm.program.categories[0]; | |
| 46 | - | |
| 47 | - vm.loadContent(); | |
| 48 | - | |
| 49 | - }, function (error) { | |
| 50 | - vm.$log.error(error); | |
| 51 | - vm.$log.info('Rollback to home page.'); | |
| 52 | - vm.$state.go('inicio', {}, {location: true}); | |
| 53 | - }); | |
| 54 | - }; | |
| 55 | - | |
| 56 | - ProgramaContentPageController.prototype.loadContent = function () { | |
| 57 | - var vm = this; | |
| 58 | - | |
| 59 | - vm.loading = true; | |
| 60 | - if(!vm.program.body){ | |
| 61 | - vm.ArticleService.getContentById(vm.program.id, function (data) { | |
| 62 | - vm.program.body = data.article.body; | |
| 63 | - vm.loading = false; | |
| 64 | - }, function (error) { | |
| 65 | - vm.loading = false; | |
| 66 | - vm.error = error; | |
| 67 | - }); | |
| 68 | - } | |
| 69 | - vm.loading = false; | |
| 70 | - }; | |
| 71 | - | |
| 72 | - ProgramaContentPageController.prototype.goToPreview = function () { | |
| 73 | - var vm = this; | |
| 74 | - | |
| 75 | - vm.$state.go('programa', { | |
| 76 | - slug: vm.program.slug | |
| 77 | - }, { | |
| 78 | - location: true | |
| 79 | - }); | |
| 80 | - }; | |
| 81 | -})(); |
src/app/pages/programas/programa.controller.js
| ... | ... | @@ -27,33 +27,33 @@ |
| 27 | 27 | var params = vm.$state.params; |
| 28 | 28 | var slug = params.slug; |
| 29 | 29 | |
| 30 | - vm.program = null; | |
| 30 | + vm.article = null; | |
| 31 | 31 | vm.categories = null; |
| 32 | 32 | vm.currentCategory = null; |
| 33 | 33 | vm.loading = true; |
| 34 | 34 | vm.error = false; |
| 35 | 35 | |
| 36 | - vm.ArticleService.getHome(function(data){ | |
| 37 | - vm.categories = data.article.categories; | |
| 36 | + vm.ArticleService.getCategories(function(categories){ | |
| 37 | + vm.categories = categories; | |
| 38 | 38 | }, function (error) { |
| 39 | 39 | vm.error = error; |
| 40 | 40 | vm.$log.error(error); |
| 41 | 41 | }); |
| 42 | 42 | |
| 43 | - vm.ArticleService.getArticleBySlug(slug, function(program){ | |
| 44 | - vm.program = program; | |
| 45 | - vm.currentCategory = vm.program.categories[0]; | |
| 43 | + vm.ArticleService.getArticleBySlug(slug, function(article){ | |
| 44 | + vm.article = article; | |
| 45 | + vm.currentCategory = vm.article.categories[0]; | |
| 46 | 46 | |
| 47 | 47 | // load proposals |
| 48 | 48 | // vm.ArticleService.getRandomProposal(program.id, function(proposal){ |
| 49 | - // vm.program.proposal = proposal; | |
| 49 | + // vm.article.proposal = proposal; | |
| 50 | 50 | // }, function (error){ |
| 51 | 51 | // vm.$log.error(error); |
| 52 | 52 | // }); |
| 53 | 53 | |
| 54 | 54 | // load events |
| 55 | 55 | // vm.ArticleService.getEvents(program.id, function(proposal){ |
| 56 | - // vm.program.proposal = proposal; | |
| 56 | + // vm.article.proposal = proposal; | |
| 57 | 57 | // }, function (error){ |
| 58 | 58 | // vm.$log.error(error); |
| 59 | 59 | // }); | ... | ... |
src/app/pages/programas/programa.html
| 1 | 1 | <div class="container"> |
| 2 | 2 | |
| 3 | - <div ng-if="pagePrograma.program && pagePrograma.categories"> | |
| 4 | - <article-bar category="pagePrograma.program.categories[0]" categories="pagePrograma.categories"></article-bar> | |
| 3 | + <div ng-if="pagePrograma.article && pagePrograma.categories"> | |
| 4 | + <article-bar category="pagePrograma.article.categories[0]" categories="pagePrograma.categories"></article-bar> | |
| 5 | 5 | </div> |
| 6 | 6 | |
| 7 | - <div ng-if="!pagePrograma.program"> | |
| 7 | + <div ng-if="!pagePrograma.article"> | |
| 8 | 8 | <div class="alert alert-info" role="alert">Carregando informações sobre o progama</div> |
| 9 | 9 | </div> |
| 10 | 10 | |
| 11 | - <div ng-if="pagePrograma.program && pagePrograma.categories"> | |
| 12 | - <programa-box program="pagePrograma.program" display="'preview'"></programa-box> | |
| 11 | + <div ng-if="pagePrograma.article && pagePrograma.categories"> | |
| 12 | + <article-preview article="pagePrograma.article"></article-preview> | |
| 13 | 13 | </div> |
| 14 | 14 | </div> |
| 15 | 15 | ... | ... |