Skip to content

Commit a483067

Browse files
added ability to ignore breadcrumbs by setting false
1 parent ffa1513 commit a483067

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

src/directives/uiBreadcrumbs/uiBreadcrumbs.js

+24-12
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ angular.module('angularUtils.directives.uiBreadcrumbs', ['ui.router', 'templates
1111
scope: {
1212
displaynameProperty: '@'
1313
},
14-
link: function(scope, element) {
14+
link: function(scope) {
1515
scope.breadcrumbs = [];
1616
if ($state.$current.name !== '') {
1717
updateBreadcrumbsArray();
@@ -29,10 +29,13 @@ angular.module('angularUtils.directives.uiBreadcrumbs', ['ui.router', 'templates
2929
var currentState = $state.$current;
3030

3131
while(currentState && currentState.name !== '') {
32-
breadcrumbs.push({
33-
displayName: getDisplayName(currentState),
34-
route: currentState.name
35-
});
32+
var displayName = getDisplayName(currentState);
33+
if (displayName !== false) {
34+
breadcrumbs.push({
35+
displayName: displayName,
36+
route: currentState.name
37+
});
38+
}
3639
currentState = currentState.parent;
3740
}
3841

@@ -48,25 +51,34 @@ angular.module('angularUtils.directives.uiBreadcrumbs', ['ui.router', 'templates
4851
* @returns {*}
4952
*/
5053
function getDisplayName(currentState) {
54+
var resolveProperty;
55+
var i;
56+
var propertyReference;
57+
var propertyArray;
58+
var displayName;
59+
5160
if (!scope.displaynameProperty) {
5261
// if the displayname-property attribute was not specified, default to the state's name
5362
return currentState.name;
5463
}
55-
var displayName;
56-
var propertyArray = scope.displaynameProperty.split('.');
57-
var propertyReference = currentState;
64+
propertyArray = scope.displaynameProperty.split('.');
65+
propertyReference = currentState;
5866

59-
for (var i = 0; i < propertyArray.length; i ++) {
60-
if (propertyReference[propertyArray[i]]) {
61-
propertyReference = propertyReference[propertyArray[i]];
67+
for (i = 0; i < propertyArray.length; i ++) {
68+
if (angular.isDefined(propertyReference[propertyArray[i]])) {
69+
if (propertyReference[propertyArray[i]] === false) {
70+
return false;
71+
} else {
72+
propertyReference = propertyReference[propertyArray[i]];
73+
}
6274
} else {
6375
// if the specified property was not foundm default to the state's name
6476
return currentState.name;
6577
}
6678
}
6779
if (propertyReference.indexOf(':') === 0) {
6880
// the : syntax indicates a reference to a resolved property, so use that instead
69-
var resolveProperty = propertyReference.substr(1);
81+
resolveProperty = propertyReference.substr(1);
7082
displayName = currentState.locals.globals[resolveProperty];
7183
} else {
7284
displayName = propertyReference;

src/directives/uiBreadcrumbs/uiBreadcrumbs.spec.js

+14-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ describe('uiBreadcrumbs directive', function() {
3838
displayName: 'Subsection'
3939
}
4040
})
41+
.state('root.section.subsection.nobreadcrumb', {
42+
url: 'subsection/bit',
43+
data: {
44+
displayName: false
45+
}
46+
})
4147
.state('async1', {
4248
url: 'aync1/',
4349
data: {
@@ -111,14 +117,21 @@ describe('uiBreadcrumbs directive', function() {
111117
expect(element[0].querySelectorAll('li').length).toBe(1);
112118
});
113119

120+
it('should not make a breadcrumb if displayName is set to false', function() {
121+
$state.go('root.section.subsection.nobreadcrumb');
122+
$scope.$apply();
123+
124+
expect(element[0].querySelectorAll('li').length).toBe(3);
125+
expect(angular.element(element[0].querySelectorAll('li')[2]).hasClass("active")).toBe(true);
126+
});
127+
114128
it('should show correct displayName for alternative directive attribute', function() {
115129
var element2 = $compile('<ui-breadcrumbs displayname-property="custom.alternateDisplayName"></ui-breadcrumbs>')($scope);
116130
$scope.$apply();
117131

118132
$state.go('root');
119133
$scope.$apply();
120134

121-
122135
expect(element2[0].querySelectorAll('li')[0].innerHTML).toContain('Other Home');
123136
});
124137

0 commit comments

Comments
 (0)