Mercurial > pub > ImplabJs
view src/implab/components/StateMachine.js @ 5:3d124d0b9078
improved declare/override, added override.before, override.after, override.hide,
inherited.arguments.
author | cin |
---|---|
date | Fri, 16 Jun 2017 02:14:25 +0300 |
parents | 7d7059d2a810 |
children |
line wrap: on
line source
define([ "dojo/_base/declare", "../safe", "../text/format" ], function(declare, safe, format) { return declare(null, { states : null, current : null, constructor : function(opts) { safe.argumentNotNull(opts, "opts"); safe.argumentNotNull(opts.states, "opts.states"); safe.argumentNotNull(opts.initial, "opts.initial"); this.states = opts.states; this.current = opts.initial; if (safe.isNull(this.states[this.current])) throw new Error("Invalid initial state " + this.current); }, move : function(input, noThrow) { safe.argumentNotNull(input, "input"); var next = this.states[this.current][input]; if(safe.isNull(next)) { if (noThrow) return false; else throw new Error(format("Invalid transition {0}-{1}->?", this.current, input)); } else { this.current = next; return true; } } }); });