forked from crashlytics/backbone.statemanager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
backbone.statemanager.min.js
1 lines (1 loc) · 3.26 KB
/
backbone.statemanager.min.js
1
(function(){Backbone.StateManager=(function(d,a){var c,b;c=function(e,f){this.options=f!=null?f:{};this.states=new c.States(e);return this};c.extend=d.View.extend;a.extend(c.prototype,d.Events,{getCurrentState:function(){return this.currentState},addState:function(e,f){this.states.add(e,f);return this.trigger("add:state",e)},removeState:function(e){this.states.remove(e);return this.trigger("remove:state",e)},initialize:function(f){var e;if(f==null){f={}}if(e=this.states.findInitial()){return this.triggerState(e,f)}},triggerState:function(f,e){if(e==null){e={}}if(!(f===this.currentState&&!e.reEnter)){a.extend(e,{toState:f,fromState:this.currentState});if(this.currentState){this.exitState(e)}return this.enterState(f,e)}else{return false}},enterState:function(f,e){var i,g,h;if(e==null){e={}}if(!((i=this.states.find(f))&&a.isFunction(i.enter))){return false}this.trigger("before:enter:state",f,i,e);if(typeof(g=i.findTransition("onBeforeEnterFrom",e.fromState))==="function"){g(e)}i.enter(e);if(typeof(h=i.findTransition("onEnterFrom",e.fromState))==="function"){h(e)}this.trigger("enter:state",f,i,e);this.currentState=f;return this},exitState:function(e){var h,f,g;if(e==null){e={}}if(!((h=this.states.find(this.currentState))&&a.isFunction(h.exit))){return false}this.trigger("before:exit:state",this.currentState,h,e);if(typeof(f=h.findTransition("onBeforeExitTo",e.toState))==="function"){f(e)}h.exit(e);if(typeof(g=h.findTransition("onExitTo",e.toState))==="function"){g(e)}this.trigger("exit:state",this.currentState,h,e);delete this.currentState;return this}});c.States=function(e){var f=this;this.states={};if(e&&a.isObject(e)){a.each(e,function(h,g){return f.add(g,h)})}return this};a.extend(c.States.prototype,{add:function(e,f){if(!(a.isString(e)&&a.isObject(f))){return false}return this.states[e]=new c.State(e,f)},remove:function(e){if(!a.isString(e)){return false}return delete this.states[e]},find:function(e){if(!a.isString(e)){return false}return a.chain(this.states).find(function(f){return f.matchName(e)}).value()},findInitial:function(){var e=this;return a.find(this.states,function(g,f){return g.initial})}});c.State=function(f,e){this.name=f;a.extend(this,e);this.regExpName=c.State._regExpStateConversion(this.name);return this};a.extend(c.State.prototype,{matchName:function(e){return this.regExpName.test(e)},findTransition:function(f,e){var g=this;if(!(this.transitions&&a.isString(e)&&a.isString(f))){return false}return a.find(this.transitions,function(i,h){return h.indexOf(""+f+":")===0&&c.State._regExpStateConversion(h.substring(f.length+1)).test(e)})}});c.State._regExpStateConversion=function(e){e=e.replace(/[-[\]{}()+?.,\\^$|#\s]/g,"\\$&").replace(/:\w+/g,"([^/]+)").replace(/\*\w+/g,"(.*?)");return new RegExp("^"+e+"$")};c.addStateManager=function(f,e){var g;if(e==null){e={}}if(!f){new Error("Target must be defined")}b(f.states,f);f.stateManager=g=new d.StateManager(f.states,e);f.triggerState=function(){return g.triggerState.apply(g,arguments)};f.getCurrentState=function(){return g.getCurrentState()};if(e.initialize||a.isUndefined(e.initialize)){g.initialize(e)}return delete f.states};b=function(f){var e;e=a.last(arguments);a.each(f,function(h,g){if(a.isFunction(h)){return f[g]=a.bind(h,e)}else{if(a.isObject(h)){return f[g]=b(h,e)}}});return f};return c})(Backbone,_)}).call(this);