corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 "use strict";
2 var util = require("./util");
3 var schedule;
4 var noAsyncScheduler = function() {
5 throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
6 };
7 var NativePromise = util.getNativePromise();
8 if (util.isNode && typeof MutationObserver === "undefined") {
9 var GlobalSetImmediate = global.setImmediate;
10 var ProcessNextTick = process.nextTick;
11 schedule = util.isRecentNode
12 ? function(fn) { GlobalSetImmediate.call(global, fn); }
13 : function(fn) { ProcessNextTick.call(process, fn); };
14 } else if (typeof NativePromise === "function" &&
15 typeof NativePromise.resolve === "function") {
16 var nativePromise = NativePromise.resolve();
17 schedule = function(fn) {
18 nativePromise.then(fn);
19 };
20 } else if ((typeof MutationObserver !== "undefined") &&
21 !(typeof window !== "undefined" &&
22 window.navigator &&
23 (window.navigator.standalone || window.cordova))) {
24 schedule = (function() {
25 var div = document.createElement("div");
26 var opts = {attributes: true};
27 var toggleScheduled = false;
28 var div2 = document.createElement("div");
29 var o2 = new MutationObserver(function() {
30 div.classList.toggle("foo");
31 toggleScheduled = false;
32 });
33 o2.observe(div2, opts);
34  
35 var scheduleToggle = function() {
36 if (toggleScheduled) return;
37 toggleScheduled = true;
38 div2.classList.toggle("foo");
39 };
40  
41 return function schedule(fn) {
42 var o = new MutationObserver(function() {
43 o.disconnect();
44 fn();
45 });
46 o.observe(div, opts);
47 scheduleToggle();
48 };
49 })();
50 } else if (typeof setImmediate !== "undefined") {
51 schedule = function (fn) {
52 setImmediate(fn);
53 };
54 } else if (typeof setTimeout !== "undefined") {
55 schedule = function (fn) {
56 setTimeout(fn, 0);
57 };
58 } else {
59 schedule = noAsyncScheduler;
60 }
61 module.exports = schedule;