Commit 8142d9361d422d34fa72abc8ebb2c070e324c18e

Authored by Leonardo Merlin
1 parent 6eac388a

Add breadcrumb

@@ -2,19 +2,20 @@ @@ -2,19 +2,20 @@
2 "name": "dialoga", 2 "name": "dialoga",
3 "version": "0.0.0", 3 "version": "0.0.0",
4 "dependencies": { 4 "dependencies": {
  5 + "angular": "~1.4.0",
5 "angular-animate": "~1.4.0", 6 "angular-animate": "~1.4.0",
  7 + "angular-breadcrumb": "~0.4.1",
6 "angular-cookies": "~1.4.0", 8 "angular-cookies": "~1.4.0",
7 - "angular-touch": "~1.4.0",  
8 "angular-sanitize": "~1.4.0", 9 "angular-sanitize": "~1.4.0",
  10 + "angular-slugify": "~1.0.1",
  11 + "angular-social-links": "~0.0.19",
  12 + "angular-touch": "~1.4.0",
9 "angular-ui-router": "~0.2.15", 13 "angular-ui-router": "~0.2.15",
10 - "jquery": "~2.1.4",  
11 - "bootstrap-sass-official": "~3.3.4",  
12 "animate.css": "~3.3.0", 14 "animate.css": "~3.3.0",
13 - "angular": "~1.4.0", 15 + "bootstrap-sass-official": "~3.3.4",
  16 + "jquery": "~2.1.4",
14 "modernizr": "~2.8.3", 17 "modernizr": "~2.8.3",
15 - "angular-slugify": "~1.0.1",  
16 - "open-sans-fontface": "~1.4.2",  
17 - "angular-social-links": "~0.0.19" 18 + "open-sans-fontface": "~1.4.2"
18 }, 19 },
19 "devDependencies": { 20 "devDependencies": {
20 "angular-mocks": "~1.4.0" 21 "angular-mocks": "~1.4.0"
src/app/components/breadcrumb/breadcrumb.scss 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +.custom-breadcrumb {
  2 + .breadcrumb > li + li:before {
  3 + content: '>';
  4 + }
  5 +}
src/app/components/breadcrumb/template.html 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +<div class="custom-breadcrumb">
  2 + <ol class="breadcrumb">
  3 + <li ng-repeat="step in steps | limitTo:(steps.length-1)">
  4 + <a href="{{step.ncyBreadcrumbLink}}" ng-bind-html="step.ncyBreadcrumbLabel"></a>
  5 + </li>
  6 + <li ng-repeat="step in steps | limitTo:-1" class="active">
  7 + <span ng-bind-html="step.ncyBreadcrumbLabel"></span>
  8 + </li>
  9 + </ol>
  10 +</div>
src/app/index.config.js
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 .module('dialoga') 5 .module('dialoga')
6 .config(configAuthInterceptor) 6 .config(configAuthInterceptor)
7 .config(configLocationProvider) 7 .config(configLocationProvider)
  8 + .config(configBreadcrumbProvider)
8 .config(config); 9 .config(config);
9 10
10 /** @ngInject */ 11 /** @ngInject */
@@ -38,6 +39,14 @@ @@ -38,6 +39,14 @@
38 } 39 }
39 40
40 /** @ngInject */ 41 /** @ngInject */
  42 + function configBreadcrumbProvider($breadcrumbProvider) {
  43 + $breadcrumbProvider.setOptions({
  44 + prefixStateName: 'inicio',
  45 + templateUrl: 'app/components/breadcrumb/template.html'
  46 + });
  47 + }
  48 +
  49 + /** @ngInject */
41 function config($logProvider) { 50 function config($logProvider) {
42 51
43 // Enable log 52 // Enable log
src/app/index.module.js
@@ -2,6 +2,6 @@ @@ -2,6 +2,6 @@
2 'use strict'; 2 'use strict';
3 3
4 angular 4 angular
5 - .module('dialoga', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ui.router', 'socialLinks', 'slugifier']); 5 + .module('dialoga', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ui.router', 'socialLinks', 'slugifier', 'ncy-angular-breadcrumb']);
6 6
7 })(); 7 })();
src/app/index.route.js
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 $stateProvider 10 $stateProvider
11 .state('inicio', { 11 .state('inicio', {
12 url: '/?limite&tema', 12 url: '/?limite&tema',
  13 + ncyBreadcrumb: {label: 'Home'},
13 reloadOnSearch: false, 14 reloadOnSearch: false,
14 views: { 15 views: {
15 'header': { templateUrl: 'app/pages/header/header.html' }, 16 'header': { templateUrl: 'app/pages/header/header.html' },
@@ -23,6 +24,7 @@ @@ -23,6 +24,7 @@
23 }) 24 })
24 .state('entrar', { 25 .state('entrar', {
25 url: '/entrar', 26 url: '/entrar',
  27 + ncyBreadcrumb: {label: 'Entrar'},
26 views: { 28 views: {
27 'header': { templateUrl: 'app/pages/header/header.html' }, 29 'header': { templateUrl: 'app/pages/header/header.html' },
28 'main': { 30 'main': {
@@ -35,6 +37,7 @@ @@ -35,6 +37,7 @@
35 }) 37 })
36 .state('cadastrar', { 38 .state('cadastrar', {
37 url: '/cadastrar', 39 url: '/cadastrar',
  40 + ncyBreadcrumb: {label: 'Cadastrar'},
38 views: { 41 views: {
39 'header': { templateUrl: 'app/pages/header/header.html' }, 42 'header': { templateUrl: 'app/pages/header/header.html' },
40 'main': { 43 'main': {
@@ -47,6 +50,7 @@ @@ -47,6 +50,7 @@
47 }) 50 })
48 .state('programas', { 51 .state('programas', {
49 url: '/programas', 52 url: '/programas',
  53 + ncyBreadcrumb: {label: 'Programas'},
50 views: { 54 views: {
51 'header': { templateUrl: 'app/pages/header/header.html' }, 55 'header': { templateUrl: 'app/pages/header/header.html' },
52 'main': { 56 'main': {
@@ -59,6 +63,10 @@ @@ -59,6 +63,10 @@
59 }) 63 })
60 .state('programa-conteudo', { 64 .state('programa-conteudo', {
61 url: '/programa/:slug', 65 url: '/programa/:slug',
  66 + ncyBreadcrumb: {
  67 + label: '{{$parent.$root.contentTitle}}',
  68 + parent: 'programas'
  69 + },
62 views: { 70 views: {
63 'header': { templateUrl: 'app/pages/header/header.html' }, 71 'header': { templateUrl: 'app/pages/header/header.html' },
64 'main': { 72 'main': {
@@ -71,6 +79,7 @@ @@ -71,6 +79,7 @@
71 }) 79 })
72 .state('propostas', { 80 .state('propostas', {
73 url: '/propostas', 81 url: '/propostas',
  82 + ncyBreadcrumb: {label: 'Propostas'},
74 views: { 83 views: {
75 'header': { templateUrl: 'app/pages/header/header.html' }, 84 'header': { templateUrl: 'app/pages/header/header.html' },
76 'main': { 85 'main': {
@@ -81,9 +90,25 @@ @@ -81,9 +90,25 @@
81 'footer': { templateUrl: 'app/pages/footer/footer.html' } 90 'footer': { templateUrl: 'app/pages/footer/footer.html' }
82 } 91 }
83 }) 92 })
84 - .state('propostas-details', {}) 93 + .state('propostas-conteudo', {
  94 + url: '/propostas/:id',
  95 + ncyBreadcrumb: {
  96 + label: '{{$parent.$root.contentTitle}}',
  97 + parent: 'propostas'
  98 + },
  99 + views: {
  100 + 'header': { templateUrl: 'app/pages/header/header.html' },
  101 + 'main': {
  102 + templateUrl: 'app/pages/propostas/proposta.html',
  103 + controller: 'PropostasPageController',
  104 + controllerAs: 'pagePropostas'
  105 + },
  106 + 'footer': { templateUrl: 'app/pages/footer/footer.html' }
  107 + }
  108 + })
85 .state('duvidas', { 109 .state('duvidas', {
86 url: '/duvidas', 110 url: '/duvidas',
  111 + ncyBreadcrumb: {label: 'Dúvidas'},
87 views: { 112 views: {
88 'header': { templateUrl: 'app/pages/header/header.html' }, 113 'header': { templateUrl: 'app/pages/header/header.html' },
89 'main': { 114 'main': {
@@ -96,6 +121,7 @@ @@ -96,6 +121,7 @@
96 }) 121 })
97 .state('sobre', { 122 .state('sobre', {
98 url: '/sobre', 123 url: '/sobre',
  124 + ncyBreadcrumb: {label: 'Sobre'},
99 views: { 125 views: {
100 'header': { templateUrl: 'app/pages/header/header.html' }, 126 'header': { templateUrl: 'app/pages/header/header.html' },
101 'main': { 127 'main': {
@@ -108,6 +134,7 @@ @@ -108,6 +134,7 @@
108 }) 134 })
109 .state('termos-de-uso', { 135 .state('termos-de-uso', {
110 url: '/termos-de-uso', 136 url: '/termos-de-uso',
  137 + ncyBreadcrumb: {label: 'Termos de Uso'},
111 controller: 'ArticlePageController', 138 controller: 'ArticlePageController',
112 views: { 139 views: {
113 'header': { templateUrl: 'app/pages/header/header.html' }, 140 'header': { templateUrl: 'app/pages/header/header.html' },
@@ -121,6 +148,7 @@ @@ -121,6 +148,7 @@
121 }) 148 })
122 .state('mapa-do-site', { 149 .state('mapa-do-site', {
123 url: '/mapa-do-site', 150 url: '/mapa-do-site',
  151 + ncyBreadcrumb: {label: 'Mapa do Site'},
124 views: { 152 views: {
125 'header': { templateUrl: 'app/pages/header/header.html' }, 153 'header': { templateUrl: 'app/pages/header/header.html' },
126 'main': { templateUrl: 'app/pages/sitemap/sitemap.html' }, 154 'main': { templateUrl: 'app/pages/sitemap/sitemap.html' },
src/app/index.run.js
@@ -98,9 +98,16 @@ @@ -98,9 +98,16 @@
98 98
99 /** @ngInject */ 99 /** @ngInject */
100 function runHistory($rootScope) { 100 function runHistory($rootScope) {
  101 + var MAX_HISTORY = 20;
  102 + $rootScope.$previousState = $rootScope.$previousState || [];
101 $rootScope.$on('$stateChangeSuccess', function(event, toState, toStateParams, fromState, fromStateParams) { 103 $rootScope.$on('$stateChangeSuccess', function(event, toState, toStateParams, fromState, fromStateParams) {
102 - $rootScope.$previousState = { state: fromState, params: fromStateParams}; 104 + $rootScope.$previousState.push({ state: fromState, params: fromStateParams});
  105 + $rootScope.$previousState.splice(-MAX_HISTORY, MAX_HISTORY);
103 }); 106 });
  107 +
  108 + $rootScope.goBack = $rootScope.goBack || function () {
  109 + return $rootScope.$previousState.pop();
  110 + };
104 } 111 }
105 112
106 /** @ngInject */ 113 /** @ngInject */
src/app/pages/programas/programa-content.controller.js
@@ -42,6 +42,7 @@ @@ -42,6 +42,7 @@
42 42
43 vm.ArticleService.getArticleBySlug(slug, function(article){ 43 vm.ArticleService.getArticleBySlug(slug, function(article){
44 vm.article = article; 44 vm.article = article;
  45 + vm.$rootScope.contentTitle = vm.article.title;
45 vm.currentCategory = vm.article.categories[0]; 46 vm.currentCategory = vm.article.categories[0];
46 47
47 vm.loadContent(); 48 vm.loadContent();
src/app/pages/programas/programa.html
1 <div class="container page--conheca-o-programa"> 1 <div class="container page--conheca-o-programa">
2 - <div ng-if="pageProgramaContent.article && pageProgramaContent.categories">  
3 - <article-bar category="pageProgramaContent.article.categories[0]" categories="pageProgramaContent.categories"></article-bar> 2 + <div ng-if="pageProgramaContent.article && pageProgramaContent.article.title">
  3 + <div ncy-breadcrumb></div>
4 </div> 4 </div>
5 5
6 <div ng-if="!pageProgramaContent.article.body"> 6 <div ng-if="!pageProgramaContent.article.body">
src/app/pages/propostas/proposta.html 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +<div class="container page--propostas">
  2 + <h1>TODO: Home > Proposta</h1>
  3 +</div>