Messaging - Back to the Future
by ifandelse
HTML
<script src="https://raw.github.com/gist/3195889/9d58e1d0b1b89d974e28feac8c76ee08844259c2/bind.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://raw.github.com/creationix/eventemitter-browser/master/EventEmitter.js"></script>
<script src="https://raw.github.com/ifandelse/postal.js/master/lib/standard/postal.js"></script>
<script src="https://raw.github.com/ifandelse/postal.when/master/lib/browser/postal.when.js"></script>
<script src="https://gist.github.com/raw/abfc968348a187a4ff41/79128b5b2cef37d93b0c5b62e552551247f0e480/messagingSetup.js"></script>
<script id="tmpl" type="text/html">
<% _.each(messages, function(msg) { %>
<div><%= msg %></div>
<% }) %>
</script>
CSS
div {
font-family: arial;
font-size: 1.75em;
margin: .5em;
}
JavaScript
var bus = {
scientist : postal.channel("scientist", "*"),
timeTraveler : postal.channel("timeTraveler", "*"),
timeMachine : postal.channel("timeMachine", "*"),
lightning : postal.channel("lightning", "*")
};
postal.when([
{ channel: "timeTraveler", topic: "traveler.ready" },
{ channel: "timeMachine", topic: "machine.ready" }
], function( travelerInfo, machineInfo ) {
postal.publish({
channel: "timeMachine",
topic: "add.driver",
data: travelerInfo
});
postal.publish({
channel: "timeTraveler",
topic: "add.machine",
data: machineInfo
});
});
postal.when([
{ channel: "timeTraveler", topic: "Driver.in.Time.Machine" },
{ channel: "scientist", topic: "Cable.Attached.To.ClockTower" }
], function(travelerInfo, machineInfo) {
postal.publish({
channel: "timeMachine",
topic: "floor.it",
data: {}
});
});
var lightning = new Lightning();
var doc = new Scientist("Doc Brown");
var delorean = new TimeMachine("Delorean", 1985);
var marty = new TimeTraveler("Marty McFly");
var results = new Results(bus);
scientistBusAdapter(doc, bus);
timeTravelerBusAdapter(marty, bus);
timeMachineBusAdapter(delorean, bus);
lightningBusAdapter(lightning, bus);
doc.hangCableOnClockTower();