whitesource
Version:
whitesource node module
59 lines (53 loc) • 2.08 kB
JavaScript
/**
* UI-Router Extras: Sticky states, Future States, Deep State Redirect, Transition promise
* Module: previous
* @version 0.0.14
* @link http://christopherthielen.github.io/ui-router-extras/
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
(function(angular, undefined){
;
angular.module('ct.ui.router.extras.previous', [ 'ct.ui.router.extras.core', 'ct.ui.router.extras.transition' ]).service("$previousState",
[ '$rootScope', '$state',
function ($rootScope, $state) {
var previous = null, lastPrevious = null, memos = {};
$rootScope.$on("$transitionStart", function(evt, $transition$) {
var from = $transition$.from;
// Check if the fromState is navigable before tracking it.
// Root state doesn't get decorated with $$state(). Doh.
var fromState = from.state && from.state.$$state && from.state.$$state();
function commit() { lastPrevious = null; }
function revert() { previous = lastPrevious; }
if (fromState) {
lastPrevious = previous;
previous = $transition$.from;
$transition$.promise.then(commit)['catch'](revert);
}
});
var $previousState = {
get: function (memoName) {
return memoName ? memos[memoName] : previous;
},
go: function (memoName, options) {
var to = $previousState.get(memoName);
return $state.go(to.state, to.params, options);
},
memo: function (memoName, defaultStateName, defaultStateParams) {
memos[memoName] = previous || { state: $state.get(defaultStateName), params: defaultStateParams };
},
forget: function (memoName) {
if (memoName) {
delete memos[memoName];
} else {
previous = undefined;
}
}
};
return $previousState;
}
]
);
angular.module('ct.ui.router.extras.previous').run(['$previousState', function ($previousState) {
// Inject $previousState so it can register $rootScope events
}]);
})(angular);