Version 1
[yaffs-website] / node_modules / bluebird / js / release / schedule.js
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 if (util.isNode && typeof MutationObserver === "undefined") {
8     var GlobalSetImmediate = global.setImmediate;
9     var ProcessNextTick = process.nextTick;
10     schedule = util.isRecentNode
11                 ? function(fn) { GlobalSetImmediate.call(global, fn); }
12                 : function(fn) { ProcessNextTick.call(process, fn); };
13 } else if ((typeof MutationObserver !== "undefined") &&
14           !(typeof window !== "undefined" &&
15             window.navigator &&
16             window.navigator.standalone)) {
17     schedule = (function() {
18         var div = document.createElement("div");
19         var opts = {attributes: true};
20         var toggleScheduled = false;
21         var div2 = document.createElement("div");
22         var o2 = new MutationObserver(function() {
23             div.classList.toggle("foo");
24           toggleScheduled = false;
25         });
26         o2.observe(div2, opts);
27
28         var scheduleToggle = function() {
29             if (toggleScheduled) return;
30           toggleScheduled = true;
31           div2.classList.toggle("foo");
32         };
33
34         return function schedule(fn) {
35           var o = new MutationObserver(function() {
36             o.disconnect();
37             fn();
38           });
39           o.observe(div, opts);
40           scheduleToggle();
41         };
42     })();
43 } else if (typeof setImmediate !== "undefined") {
44     schedule = function (fn) {
45         setImmediate(fn);
46     };
47 } else if (typeof setTimeout !== "undefined") {
48     schedule = function (fn) {
49         setTimeout(fn, 0);
50     };
51 } else {
52     schedule = noAsyncScheduler;
53 }
54 module.exports = schedule;