Commit 8142d9361d422d34fa72abc8ebb2c070e324c18e
1 parent
6eac388a
Exists in
master
and in
8 other branches
Add breadcrumb
Showing
10 changed files
with
76 additions
and
12 deletions
Show diff stats
bower.json
@@ -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" |
@@ -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"> |