forked from jakesgordon/javascript-state-machine
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstate-machine.min.js
More file actions
1 lines (1 loc) · 3.98 KB
/
state-machine.min.js
File metadata and controls
1 lines (1 loc) · 3.98 KB
1
!function(){var a={VERSION:"2.4.0",Result:{SUCCEEDED:1,NOTRANSITION:2,CANCELLED:3,PENDING:4},Error:{INVALID_TRANSITION:100,PENDING_TRANSITION:200,INVALID_CALLBACK:300},WILDCARD:"*",ASYNC:"async",create:function(b,c){var d="string"==typeof b.initial?{state:b.initial}:b.initial,e=b.terminal||b.final,f=c||b.target||{},g=b.events||[],h=b.callbacks||{},i={},j={},k=function(b){var c=Array.isArray(b.from)?b.from:b.from?[b.from]:[a.WILDCARD];i[b.name]=i[b.name]||{};for(var d=0;d<c.length;d++)j[c[d]]=j[c[d]]||[],j[c[d]].push(b.name),i[b.name][c[d]]=b.to||c[d];b.to&&(j[b.to]=j[b.to]||[])};d&&(d.event=d.event||"startup",k({name:d.event,from:"none",to:d.state}));for(var l=0;l<g.length;l++)k(g[l]);for(var m in i)i.hasOwnProperty(m)&&(f[m]=a.buildEvent(m,i[m]));for(var m in h)h.hasOwnProperty(m)&&(f[m]=h[m]);return f.current="none",f.is=function(a){return Array.isArray(a)?a.indexOf(this.current)>=0:this.current===a},f.can=function(b){return!this.transition&&void 0!==i[b]&&(i[b].hasOwnProperty(this.current)||i[b].hasOwnProperty(a.WILDCARD))},f.cannot=function(a){return!this.can(a)},f.transitions=function(){return(j[this.current]||[]).concat(j[a.WILDCARD]||[])},f.isFinished=function(){return this.is(e)},f.tryTo=function(a){this.can(a)&&this[a]()},f.error=b.error||function(a,b,c,d,e,f,g){throw g||f},f.states=function(){return Object.keys(j).sort()},d&&!d.defer&&f[d.event](),f},doCallback:function(b,c,d,e,f,g){if(c)try{return c.apply(b,[d,e,f].concat(g))}catch(c){return b.error(d,e,f,g,a.Error.INVALID_CALLBACK,"an exception occurred in a caller-provided callback function",c)}},beforeAnyEvent:function(b,c,d,e,f){return a.doCallback(b,b.onbeforeevent,c,d,e,f)},afterAnyEvent:function(b,c,d,e,f){return a.doCallback(b,b.onafterevent||b.onevent,c,d,e,f)},leaveAnyState:function(b,c,d,e,f){return a.doCallback(b,b.onleavestate,c,d,e,f)},enterAnyState:function(b,c,d,e,f){return a.doCallback(b,b.onenterstate||b.onstate,c,d,e,f)},changeState:function(b,c,d,e,f){return a.doCallback(b,b.onchangestate,c,d,e,f)},beforeThisEvent:function(b,c,d,e,f){return a.doCallback(b,b["onbefore"+c],c,d,e,f)},afterThisEvent:function(b,c,d,e,f){return a.doCallback(b,b["onafter"+c]||b["on"+c],c,d,e,f)},leaveThisState:function(b,c,d,e,f){return a.doCallback(b,b["onleave"+d],c,d,e,f)},enterThisState:function(b,c,d,e,f){return a.doCallback(b,b["onenter"+e]||b["on"+e],c,d,e,f)},beforeEvent:function(b,c,d,e,f){if(!1===a.beforeThisEvent(b,c,d,e,f)||!1===a.beforeAnyEvent(b,c,d,e,f))return!1},afterEvent:function(b,c,d,e,f){a.afterThisEvent(b,c,d,e,f),a.afterAnyEvent(b,c,d,e,f)},leaveState:function(b,c,d,e,f){var g=a.leaveThisState(b,c,d,e,f),h=a.leaveAnyState(b,c,d,e,f);return!1!==g&&!1!==h&&(a.ASYNC===g||a.ASYNC===h?a.ASYNC:void 0)},enterState:function(b,c,d,e,f){a.enterThisState(b,c,d,e,f),a.enterAnyState(b,c,d,e,f)},buildEvent:function(b,c){return function(){var d=this.current,e=c[d]||(c[a.WILDCARD]!=a.WILDCARD?c[a.WILDCARD]:d)||d,f=Array.prototype.slice.call(arguments);if(this.transition)return this.error(b,d,e,f,a.Error.PENDING_TRANSITION,"event "+b+" inappropriate because previous transition did not complete");if(this.cannot(b))return this.error(b,d,e,f,a.Error.INVALID_TRANSITION,"event "+b+" inappropriate in current state "+this.current);if(!1===a.beforeEvent(this,b,d,e,f))return a.Result.CANCELLED;if(d===e)return a.afterEvent(this,b,d,e,f),a.Result.NOTRANSITION;var g=this;this.transition=function(){return g.transition=null,g.current=e,a.enterState(g,b,d,e,f),a.changeState(g,b,d,e,f),a.afterEvent(g,b,d,e,f),a.Result.SUCCEEDED},this.transition.cancel=function(){g.transition=null,a.afterEvent(g,b,d,e,f)};var h=a.leaveState(this,b,d,e,f);return!1===h?(this.transition=null,a.Result.CANCELLED):a.ASYNC===h?a.Result.PENDING:this.transition?this.transition():void 0}}};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=a),exports.StateMachine=a):"function"==typeof define&&define.amd?define(function(b){return a}):"undefined"!=typeof window?window.StateMachine=a:"undefined"!=typeof self&&(self.StateMachine=a)}();