on 104faf1 help sign in
elk/runtime/Utils.js
51 lines 1.4 kB history raw
2(function() {
3'use strict';
5ElmRuntime.counter = 0;
6ElmRuntime.guid = function() { return ElmRuntime.counter++; }
8ElmRuntime.use = function(M) {
9 if (typeof M === 'function') M = M();
10 return M;
11};
13function isAlive(input) {
14 if (!('defaultNumberOfKids' in input)) return true;
15 var len = input.kids.length;
16 if (len == 0) return false;
17 if (len > input.defaultNumberOfKids) return true;
18 var alive = false;
19 for (var i = len; i--; ) {
20 alive = alive || isAlive(input.kids[i]);
21 }
22 return alive;
25ElmRuntime.filterDeadInputs = function(inputs) {
26 var temp = [];
27 for (var i = inputs.length; i--; ) {
28 if (isAlive(inputs[i])) temp.push(inputs[i]);
29 }
30 return temp;
31};
33// define the draw function
34var vendors = ['ms', 'moz', 'webkit', 'o'];
35for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
36 window.requestAnimationFrame = window[vendors[i]+'RequestAnimationFrame'];
37 window.cancelAnimationFrame = window[vendors[i]+'CancelAnimationFrame']
38 || window[vendors[i]+'CancelRequestAnimationFrame'];
41if (window.requestAnimationFrame && window.cancelAnimationFrame) {
42 var previous = 0;
43 ElmRuntime.draw = function(callback) {
44 window.cancelAnimationFrame(previous);
45 previous = window.requestAnimationFrame(callback);
46 };
47} else {
48 ElmRuntime.draw = function(callback) { callback(); };
51}());