// // Mediator // function Mediator() { var mediator = {channels: []}; mediator.on = function(ch, fn) { if (!mediator.channels[ch]) mediator.channels[ch] = []; mediator.channels[ch].push(fn); return mediator; }; mediator.trigger = function(ch, data) { if (typeof data != 'undefined') { console.log('triggering', ch, 'with', data); } else { console.log('triggering', ch); } if (!mediator.channels[ch]) { console.log('no receivers found'); return false; } mediator.channels[ch].forEach(function(fn) {fn(data);}); return mediator; }; return mediator; } function State(ctx) { } function Options(ctx, container) { container = d3.select(container); var orig = container.append('input') .attr('type', 'text') .attr('id', 'orig-stn'); container.append('span') .text('to'); var dest = container.append('input') .attr('type', 'text') .attr('id', 'dest-stn'); orig.on('blur', function() { ctx.trigger('set-route-start', orig.property('value').toUpperCase()); }); dest.on('blur', function() { ctx.trigger('set-route-end', dest.property('value').toUpperCase()); }); ctx.on('set-route-start', function(data) { orig.property('value', data); }); ctx.on('set-route-end', function(data) { dest.property('value', data); }); } window.onload = function() { var ctx = Mediator(), state = State(ctx), options = Options(ctx, '#options'), api = TrainData(ctx), diagram = TrainDiagram(ctx, '#container'); ctx.trigger('refresh-train-data'); ctx.trigger('refresh-station-data'); ctx.trigger('set-route-start', 'WAS'); ctx.trigger('set-route-end', 'RVR'); };