forked from jakesgordon/javascript-state-machine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstate-machine.min.js
More file actions
1 lines (1 loc) · 2.64 KB
/
state-machine.min.js
File metadata and controls
1 lines (1 loc) · 2.64 KB
1
(function(b){var a={VERSION:"2.2.0",Result:{SUCCEEDED:1,NOTRANSITION:2,CANCELLED:3,ASYNC:4},Error:{INVALID_TRANSITION:100,PENDING_TRANSITION:200,INVALID_CALLBACK:300},WILDCARD:"*",ASYNC:"async",create:function(g,h){var j=(typeof g.initial=="string")?{state:g.initial}:g.initial;var f=h||g.target||{};var l=g.events||[];var i=g.callbacks||{};var d={};var k=function(m){var p=(m.from instanceof Array)?m.from:(m.from?[m.from]:[a.WILDCARD]);d[m.name]=d[m.name]||{};for(var o=0;o<p.length;o++){d[m.name][p[o]]=m.to||p[o]}};if(j){j.event=j.event||"startup";k({name:j.event,from:"none",to:j.state})}for(var e=0;e<l.length;e++){k(l[e])}for(var c in d){if(d.hasOwnProperty(c)){f[c]=a.buildEvent(c,d[c])}}for(var c in i){if(i.hasOwnProperty(c)){f[c]=i[c]}}f.current="none";f.is=function(m){return this.current==m};f.can=function(m){return !this.transition&&(d[m].hasOwnProperty(this.current)||d[m].hasOwnProperty(a.WILDCARD))};f.cannot=function(m){return !this.can(m)};f.error=g.error||function(o,s,r,n,m,q,p){throw p||q};if(j&&!j.defer){f[j.event]()}return f},doCallback:function(h,f,d,j,i,c){if(f){try{return f.apply(h,[d,j,i].concat(c))}catch(g){return h.error(d,j,i,c,a.Error.INVALID_CALLBACK,"an exception occurred in a caller-provided callback function",g)}}},beforeEvent:function(e,d,g,f,c){return a.doCallback(e,e["onbefore"+d],d,g,f,c)},afterEvent:function(e,d,g,f,c){return a.doCallback(e,e["onafter"+d]||e["on"+d],d,g,f,c)},leaveState:function(e,d,g,f,c){return a.doCallback(e,e["onleave"+g],d,g,f,c)},enterState:function(e,d,g,f,c){return a.doCallback(e,e["onenter"+f]||e["on"+f],d,g,f,c)},changeState:function(e,d,g,f,c){return a.doCallback(e,e.onchangestate,d,g,f,c)},buildEvent:function(c,d){return function(){var i=this.current;var h=d[i]||d[a.WILDCARD]||i;var f=Array.prototype.slice.call(arguments);if(this.transition){return this.error(c,i,h,f,a.Error.PENDING_TRANSITION,"event "+c+" inappropriate because previous transition did not complete")}if(this.cannot(c)){return this.error(c,i,h,f,a.Error.INVALID_TRANSITION,"event "+c+" inappropriate in current state "+this.current)}if(false===a.beforeEvent(this,c,i,h,f)){return a.CANCELLED}if(i===h){a.afterEvent(this,c,i,h,f);return a.NOTRANSITION}var g=this;this.transition=function(){g.transition=null;g.current=h;a.enterState(g,c,i,h,f);a.changeState(g,c,i,h,f);a.afterEvent(g,c,i,h,f)};this.transition.cancel=function(){g.transition=null;a.afterEvent(g,c,i,h,f)};var e=a.leaveState(this,c,i,h,f);if(false===e){this.transition=null;return a.CANCELLED}else{if("async"===e){return a.ASYNC}else{if(this.transition){this.transition()}return a.SUCCEEDED}}}}};if("function"===typeof define){define(function(c){return a})}else{b.StateMachine=a}}(this));