Skip to content

Commit

Permalink
chore: release 0.2.3
Browse files Browse the repository at this point in the history
  • Loading branch information
ncuillery committed Jul 26, 2014
1 parent 245ba02 commit 01e8528
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 61 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,12 @@
<a name="0.2.3"></a>
### 0.2.3 (2014-07-26)


#### Bug Fixes

* **$breadcrumb:** use `$stateParams` in case of unhierarchical states ([1c3c05e0](http://github.com/ncuillery/angular-breadcrumb/commit/1c3c05e0acac191fe2e76db2ef18da339caefaaa), closes [#29](http://github.com/ncuillery/angular-breadcrumb/issues/29))


<a name="0.2.2"></a>
### 0.2.2 (2014-06-23)

Expand Down
2 changes: 1 addition & 1 deletion bower.json
@@ -1,7 +1,7 @@
{
"name": "angular-breadcrumb",
"description": "AngularJS module that generates a breadcrumb from ui-router's states",
"version": "0.2.2",
"version": "0.2.3",
"main": "release/angular-breadcrumb.js",
"ignore": [
"sample",
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,7 +1,7 @@
{
"name": "angular-breadcrumb",
"description": "AngularJS module that generates a breadcrumb from ui-router's states",
"version": "0.2.2",
"version": "0.2.3",
"homepage": "https://github.com/ncuillery/angular-breadcrumb",
"author": {
"name": "Nicolas Cuillery",
Expand Down
85 changes: 30 additions & 55 deletions release/angular-breadcrumb.js
@@ -1,4 +1,4 @@
/*! angular-breadcrumb - v0.2.2
/*! angular-breadcrumb - v0.2.3
* https://github.com/ncuillery/angular-breadcrumb
* Copyright (c) 2014 Nicolas Cuillery; Licensed MIT */

Expand All @@ -23,7 +23,7 @@ function $Breadcrumb() {
angular.extend($$options, options);
};

this.$get = ['$state', '$rootScope', function($state, $rootScope) {
this.$get = ['$state', '$stateParams', '$rootScope', function($state, $stateParams, $rootScope) {

var $lastViewScope = $rootScope;

Expand All @@ -35,64 +35,45 @@ function $Breadcrumb() {
}
});

// Check if a property in state's data is inherited from the parent state
var $$isInherited = function(state, dataProperty) {
// Check if a property in state's data is its own
var $$isStateDataProperty = function(state, property) {
if(!state.data || !state.data[property]) {
return false;
}

var parentState = $$parentState(state);
return angular.isDefined(parentState) &&
angular.isDefined(parentState.data) &&
angular.isDefined(parentState.data[dataProperty]) &&
angular.equals(state.data[dataProperty], parentState.data[dataProperty]);
return !(parentState && parentState.data && parentState.data[property] && state.data[property] === parentState.data[property]);
};

// Get the parent state
var $$parentState = function(state) {
if (angular.isDefined(state.parent)) {
return $state.get(state.parent);
}

var compositeName = /^(.+)\.[^.]+$/.exec(state.name);
if(compositeName) {
return $state.get(compositeName[1]);
}
return undefined;
// Check if state has explicit parent OR we try guess parent from its name
var name = state.parent || (/^(.+)\.[^.]+$/.exec(state.name) || [])[1];
// If we were able to figure out parent name then get this state
return name && $state.get(name);
};

// Add the state in the chain if not already in and if not abstract
var $$addStateInChain = function(chain, state, prefixStateInserted) {
var stateAlreadyInChain = false;
angular.forEach(chain, function(value) {
if(!stateAlreadyInChain && angular.equals(value, state)) {
stateAlreadyInChain = true;
}
});

var skipStep = angular.isDefined(state.data) &&
state.data.ncyBreadcrumbSkip &&
!$$isInherited(state, 'ncyBreadcrumbSkip');
var $$addStateInChain = function(chain, state) {
for(var i=0, l=chain.length; i<l; i+=1) {
if (chain[i].name === state.name) {
return;
}
}

if(!stateAlreadyInChain && !state.abstract && !skipStep) {
// Insert at first or second index.
if(prefixStateInserted) {
chain.splice(1, 0, state);
} else {
chain.unshift(state);
}
return true;
if(!state.abstract && !$$isStateDataProperty(state, 'ncyBreadcrumbSkip')) {
state.ncyBreadcrumbLink = $state.href(state.name, $stateParams || {});
chain.unshift(state);
}
return false;
};

// Get the state for the parent step in the breadcrumb
var $$breadcrumbParentState = function(state) {

if(angular.isDefined(state.data) &&
angular.isDefined(state.data.ncyBreadcrumbParent) &&
!$$isInherited(state, 'ncyBreadcrumbParent')) {
if($$isStateDataProperty(state, 'ncyBreadcrumbParent')) {
return $state.get(state.data.ncyBreadcrumbParent);
}

return $$parentState(state);

};

return {
Expand All @@ -115,27 +96,21 @@ function $Breadcrumb() {

getStatesChain: function() {
var chain = [];
var prefixStateInserted = false;

// From current state to the root
for(var state = $state.$current.self; state && state.name !== ''; state=$$breadcrumbParentState(state)) {
$$addStateInChain(chain, state);
}

// Prefix state treatment
if($$options.prefixStateName) {
var prefixState = $state.get($$options.prefixStateName);
if(prefixState) {
var prefixStep = angular.extend(prefixState, {ncyBreadcrumbLink: $state.href(prefixState)});
prefixStateInserted = $$addStateInChain(chain, prefixStep, prefixStateInserted);
} else {
if(!prefixState) {
throw 'Bad configuration : prefixState "' + $$options.prefixStateName + '" unknown';
}
}

// From current state to the root
var state = $state.$current.self;
do {
var step = angular.extend(state, {ncyBreadcrumbLink: $state.href(state.name)});
$$addStateInChain(chain, step, prefixStateInserted);
state = $$breadcrumbParentState(state);
$$addStateInChain(chain, prefixState);
}
while(state && state.name !== '');

return chain;
},
Expand Down
4 changes: 2 additions & 2 deletions release/angular-breadcrumb.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file removed sample/angular-breadcrumb-0.2.2.zip
Binary file not shown.
Binary file added sample/angular-breadcrumb-0.2.3.zip
Binary file not shown.
4 changes: 2 additions & 2 deletions sample/views/home.html
Expand Up @@ -16,7 +16,7 @@ <h2>Key features</h2>
<a href="https://github.com/ncuillery/angular-breadcrumb" class="btn btn-large">
<img src="img/GitHub-Mark-24px.png" alt="GitHub"/> View on GitHub
</a>
<a href="angular-breadcrumb-0.2.2.zip" class="btn btn-large btn-primary">
<img src="img/download-24px.png" alt="Download"/> Download <small>(0.2.2)</small>
<a href="angular-breadcrumb-0.2.3.zip" class="btn btn-large btn-primary">
<img src="img/download-24px.png" alt="Download"/> Download <small>(0.2.3)</small>
</a>
</div>

0 comments on commit 01e8528

Please sign in to comment.