Machina Integration With Monologue v2
by ifandelse
HTML
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://raw.github.com/ifandelse/monologue.js/master/lib/browser/monologue.js"></script>
<script src="https://raw.github.com/ifandelse/machina.js/mono/lib/browser/machina.js"></script>
JavaScript
(function(Monologue, machina) {
var slice = Array.prototype.slice;
Monologue.makeEmitter(machina.Fsm);
var oldEmit = machina.Fsm.prototype.emit;
machina.Fsm.prototype.emit = function() {
var args = slice.call(arguments, 1);
var topic = arguments[0];
var mapper = this.payloadMapper && this.payloadMapper[topic];
var payload = args;
if (mapper) {
payload = mapper.apply(this, args);
}
oldEmit.call(this, topic, payload);
};
}(Monologue, machina));
var Fsm = machina.Fsm.extend({
states: {
uninitialized: {
start: function() {
this.transition("started");
}
},
started: {
finish: function() {
this.transition("finished");
}
},
finished: {
_onEnter: function() {
this.emit("custom.event", "Hai", new Date());
this.handle("doMoreStuff", 1, true, "hai");
},
doMoreStuff: function() {
this.deferUntilTransition("started");
}
}
}
});
var instance = new Fsm();
instance.on("#", function(d, e) {
$('body').append("<div><pre>" + JSON.stringify(e, null, 4) + "</pre></div>");
});
instance.handle("start");
instance.handle("finish");