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();