Commit 8142d9361d422d34fa72abc8ebb2c070e324c18e

Authored by Leonardo Merlin
1 parent 6eac388a

Add breadcrumb

bower.json
... ... @@ -2,19 +2,20 @@
2 2 "name": "dialoga",
3 3 "version": "0.0.0",
4 4 "dependencies": {
  5 + "angular": "~1.4.0",
5 6 "angular-animate": "~1.4.0",
  7 + "angular-breadcrumb": "~0.4.1",
6 8 "angular-cookies": "~1.4.0",
7   - "angular-touch": "~1.4.0",
8 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 13 "angular-ui-router": "~0.2.15",
10   - "jquery": "~2.1.4",
11   - "bootstrap-sass-official": "~3.3.4",
12 14 "animate.css": "~3.3.0",
13   - "angular": "~1.4.0",
  15 + "bootstrap-sass-official": "~3.3.4",
  16 + "jquery": "~2.1.4",
14 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 20 "devDependencies": {
20 21 "angular-mocks": "~1.4.0"
... ...
src/app/components/breadcrumb/breadcrumb.scss 0 → 100644
... ... @@ -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 @@
  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 5 .module('dialoga')
6 6 .config(configAuthInterceptor)
7 7 .config(configLocationProvider)
  8 + .config(configBreadcrumbProvider)
8 9 .config(config);
9 10  
10 11 /** @ngInject */
... ... @@ -38,6 +39,14 @@
38 39 }
39 40  
40 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 50 function config($logProvider) {
42 51  
43 52 // Enable log
... ...
src/app/index.module.js
... ... @@ -2,6 +2,6 @@
2 2 'use strict';
3 3  
4 4 angular
5   - .module('dialoga', ['ngAnimate', 'ngCookies', 'ngTouch', 'ngSanitize', 'ui.router', '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 10 $stateProvider
11 11 .state('inicio', {
12 12 url: '/?limite&tema',
  13 + ncyBreadcrumb: {label: 'Home'},
13 14 reloadOnSearch: false,
14 15 views: {
15 16 'header': { templateUrl: 'app/pages/header/header.html' },
... ... @@ -23,6 +24,7 @@
23 24 })
24 25 .state('entrar', {
25 26 url: '/entrar',
  27 + ncyBreadcrumb: {label: 'Entrar'},
26 28 views: {
27 29 'header': { templateUrl: 'app/pages/header/header.html' },
28 30 'main': {
... ... @@ -35,6 +37,7 @@
35 37 })
36 38 .state('cadastrar', {
37 39 url: '/cadastrar',
  40 + ncyBreadcrumb: {label: 'Cadastrar'},
38 41 views: {
39 42 'header': { templateUrl: 'app/pages/header/header.html' },
40 43 'main': {
... ... @@ -47,6 +50,7 @@
47 50 })
48 51 .state('programas', {
49 52 url: '/programas',
  53 + ncyBreadcrumb: {label: 'Programas'},
50 54 views: {
51 55 'header': { templateUrl: 'app/pages/header/header.html' },
52 56 'main': {
... ... @@ -59,6 +63,10 @@
59 63 })
60 64 .state('programa-conteudo', {
61 65 url: '/programa/:slug',
  66 + ncyBreadcrumb: {
  67 + label: '{{$parent.$root.contentTitle}}',
  68 + parent: 'programas'
  69 + },
62 70 views: {
63 71 'header': { templateUrl: 'app/pages/header/header.html' },
64 72 'main': {
... ... @@ -71,6 +79,7 @@
71 79 })
72 80 .state('propostas', {
73 81 url: '/propostas',
  82 + ncyBreadcrumb: {label: 'Propostas'},
74 83 views: {
75 84 'header': { templateUrl: 'app/pages/header/header.html' },
76 85 'main': {
... ... @@ -81,9 +90,25 @@
81 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 109 .state('duvidas', {
86 110 url: '/duvidas',
  111 + ncyBreadcrumb: {label: 'Dúvidas'},
87 112 views: {
88 113 'header': { templateUrl: 'app/pages/header/header.html' },
89 114 'main': {
... ... @@ -96,6 +121,7 @@
96 121 })
97 122 .state('sobre', {
98 123 url: '/sobre',
  124 + ncyBreadcrumb: {label: 'Sobre'},
99 125 views: {
100 126 'header': { templateUrl: 'app/pages/header/header.html' },
101 127 'main': {
... ... @@ -108,6 +134,7 @@
108 134 })
109 135 .state('termos-de-uso', {
110 136 url: '/termos-de-uso',
  137 + ncyBreadcrumb: {label: 'Termos de Uso'},
111 138 controller: 'ArticlePageController',
112 139 views: {
113 140 'header': { templateUrl: 'app/pages/header/header.html' },
... ... @@ -121,6 +148,7 @@
121 148 })
122 149 .state('mapa-do-site', {
123 150 url: '/mapa-do-site',
  151 + ncyBreadcrumb: {label: 'Mapa do Site'},
124 152 views: {
125 153 'header': { templateUrl: 'app/pages/header/header.html' },
126 154 'main': { templateUrl: 'app/pages/sitemap/sitemap.html' },
... ...
src/app/index.run.js
... ... @@ -98,9 +98,16 @@
98 98  
99 99 /** @ngInject */
100 100 function runHistory($rootScope) {
  101 + var MAX_HISTORY = 20;
  102 + $rootScope.$previousState = $rootScope.$previousState || [];
101 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 113 /** @ngInject */
... ...
src/app/pages/programas/programa-content.controller.js
... ... @@ -42,6 +42,7 @@
42 42  
43 43 vm.ArticleService.getArticleBySlug(slug, function(article){
44 44 vm.article = article;
  45 + vm.$rootScope.contentTitle = vm.article.title;
45 46 vm.currentCategory = vm.article.categories[0];
46 47  
47 48 vm.loadContent();
... ...
src/app/pages/programas/programa.html
1 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 4 </div>
5 5  
6 6 <div ng-if="!pageProgramaContent.article.body">
... ...
src/app/pages/propostas/proposta.html 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +<div class="container page--propostas">
  2 + <h1>TODO: Home > Proposta</h1>
  3 +</div>
... ...