on 2ffc73d help sign in
elk/runtime/Utils.js
62 lines 1.8 kB history raw
2(function() {
3'use strict';
5ElmRuntime.Display = { FULLSCREEN: 0, COMPONENT: 1, NONE: 2 };
7ElmRuntime.counter = 0;
8ElmRuntime.guid = function() { return ElmRuntime.counter++; }
10ElmRuntime.use = function(M) {
11 if (typeof M === 'function') M = M();
12 return M;
13};
15function isAlive(input) {
16 if (!('defaultNumberOfKids' in input)) return true;
17 var len = input.kids.length;
18 if (len === 0) return false;
19 if (len > input.defaultNumberOfKids) return true;
20 var alive = false;
21 for (var i = len; i--; ) {
22 alive = alive || isAlive(input.kids[i]);
23 }
24 return alive;
27ElmRuntime.filterDeadInputs = function(inputs) {
28 var temp = [];
29 for (var i = inputs.length; i--; ) {
30 if (isAlive(inputs[i])) temp.push(inputs[i]);
31 }
32 return temp;
33};
35// define function for drawing efficiently
36//
37// draw : RequestID -> (() -> ()) -> RequestID
38//
39// Takes a "RequestID" allowing you to cancel old requests if possible.
40// Returns a "RequestID" so you can refer to past requests.
41//
42var vendors = ['ms', 'moz', 'webkit', 'o'];
43var win = typeof window !== 'undefined' ? window : {};
44for (var i = 0; i < vendors.length && !win.requestAnimationFrame; ++i) {
45 win.requestAnimationFrame = win[vendors[i]+'RequestAnimationFrame'];
46 win.cancelAnimationFrame = win[vendors[i]+'CancelAnimationFrame'] ||
47 win[vendors[i]+'CancelRequestAnimationFrame'];
50if (win.requestAnimationFrame && win.cancelAnimationFrame) {
51 ElmRuntime.draw = function(previousRequestID, callback) {
52 win.cancelAnimationFrame(previousRequestID);
53 return win.requestAnimationFrame(callback);
54 };
55} else {
56 ElmRuntime.draw = function(previousRequestID, callback) {
57 callback();
58 return previousRequestID;
59 };
62}());