elm/runtime/Utils.js

55 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2013-03-21 09:35:36 +00:00
(function() {
'use strict';
ElmRuntime.Display = { FULLSCREEN: 0, COMPONENT: 1, NONE: 2 };
2013-03-21 09:35:36 +00:00
ElmRuntime.counter = 0;
ElmRuntime.guid = function() { return ElmRuntime.counter++; }
ElmRuntime.use = function(M) {
if (typeof M === 'function') M = M();
return M;
};
function isAlive(input) {
if (!('defaultNumberOfKids' in input)) return true;
var len = input.kids.length;
if (len === 0) return false;
2013-03-21 09:35:36 +00:00
if (len > input.defaultNumberOfKids) return true;
var alive = false;
for (var i = len; i--; ) {
alive = alive || isAlive(input.kids[i]);
2013-03-21 09:35:36 +00:00
}
return alive;
}
ElmRuntime.filterDeadInputs = function(inputs) {
var temp = [];
for (var i = inputs.length; i--; ) {
if (isAlive(inputs[i])) temp.push(inputs[i]);
2013-03-21 09:35:36 +00:00
}
return temp;
};
2013-04-19 05:25:18 +00:00
// define the draw function
var vendors = ['ms', 'moz', 'webkit', 'o'];
var win = typeof window !== 'undefined' ? window : {};
for (var i = 0; i < vendors.length && !win.requestAnimationFrame; ++i) {
win.requestAnimationFrame = win[vendors[i]+'RequestAnimationFrame'];
win.cancelAnimationFrame = win[vendors[i]+'CancelAnimationFrame'] ||
win[vendors[i]+'CancelRequestAnimationFrame'];
2013-04-19 05:25:18 +00:00
}
if (win.requestAnimationFrame && win.cancelAnimationFrame) {
2013-04-19 05:25:18 +00:00
var previous = 0;
ElmRuntime.draw = function(callback) {
win.cancelAnimationFrame(previous);
previous = win.requestAnimationFrame(callback);
2013-04-19 05:25:18 +00:00
};
} else {
ElmRuntime.draw = function(callback) { callback(); };
}
2013-03-21 09:35:36 +00:00
}());