elm/core-js/runtime/Dispatcher.js

58 lines
1.6 KiB
JavaScript
Raw Normal View History

2012-04-20 03:10:25 +00:00
var Dispatcher = function() {
var program = null;
var inputs = [];
2012-08-31 06:42:33 +00:00
var currentElement = null;
2012-04-20 03:10:25 +00:00
var initialize = function() {
program = Elm.main();
if (!program.hasOwnProperty('recv')) {
program = Elm.Signal.constant(program);
2012-04-20 03:10:25 +00:00
}
2012-08-31 06:42:33 +00:00
currentElement = program.value;
filterDeadInputs();
2012-04-20 03:10:25 +00:00
var content = document.getElementById('content');
2012-08-31 06:42:33 +00:00
content.appendChild(Render.render(currentElement));
2012-04-20 03:10:25 +00:00
var w = document.getElementById('widthChecker').offsetWidth;
if (w !== window.innerWidth) {
Dispatcher.notify(Elm.Window.dimensions.id, Value.Tuple(w, window.innerHeight));
2012-04-20 03:10:25 +00:00
}
program = Elm.Signal.lift(function(value) {
var content = document.getElementById('content');
2012-08-31 06:42:33 +00:00
Render.update(content.firstChild,currentElement,value);
currentElement = value;
return value;
})(program);
2012-04-20 03:10:25 +00:00
};
var notify = function(id, v) {
var timestep = (new window.Date).getTime();
2012-08-31 06:42:33 +00:00
var hasListener = false;
for (var i = inputs.length; i--; ) {
2012-08-31 06:42:33 +00:00
hasListener = inputs[i].recv(timestep, id, v) || hasListener;
2012-04-20 03:10:25 +00:00
}
2012-08-31 06:42:33 +00:00
return hasListener;
2012-04-20 03:10:25 +00:00
};
2012-08-31 06:42:33 +00:00
function isAlive(input) {
if (!input.hasOwnProperty('defaultNumberOfKids')) return true;
var len = input.kids.length;
if (len == 0) return false;
if (len > input.defaultNumberOfKids) return true;
var alive = false;
for (var i = len; i--; ) {
alive = alive || isAlive(input.kids[i]);
}
return alive;
}
function filterDeadInputs() {
var temp = [];
for (var i = inputs.length; i--; ) {
if (isAlive(inputs[i])) temp.push(inputs[i]);
}
inputs = temp;
}
return {initialize:initialize, notify:notify, inputs:inputs};
2012-04-20 03:10:25 +00:00
}();