Spaces:
Paused
Paused
| ; | |
| var util = require("./util"); | |
| var schedule; | |
| var noAsyncScheduler = function() { | |
| throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); | |
| }; | |
| var NativePromise = util.getNativePromise(); | |
| if (util.isNode && typeof MutationObserver === "undefined") { | |
| var GlobalSetImmediate = global.setImmediate; | |
| var ProcessNextTick = process.nextTick; | |
| schedule = util.isRecentNode | |
| ? function(fn) { GlobalSetImmediate.call(global, fn); } | |
| : function(fn) { ProcessNextTick.call(process, fn); }; | |
| } else if (typeof NativePromise === "function" && | |
| typeof NativePromise.resolve === "function") { | |
| var nativePromise = NativePromise.resolve(); | |
| schedule = function(fn) { | |
| nativePromise.then(fn); | |
| }; | |
| } else if ((typeof MutationObserver !== "undefined") && | |
| !(typeof window !== "undefined" && | |
| window.navigator && | |
| (window.navigator.standalone || window.cordova)) && | |
| ("classList" in document.documentElement)) { | |
| schedule = (function() { | |
| var div = document.createElement("div"); | |
| var opts = {attributes: true}; | |
| var toggleScheduled = false; | |
| var div2 = document.createElement("div"); | |
| var o2 = new MutationObserver(function() { | |
| div.classList.toggle("foo"); | |
| toggleScheduled = false; | |
| }); | |
| o2.observe(div2, opts); | |
| var scheduleToggle = function() { | |
| if (toggleScheduled) return; | |
| toggleScheduled = true; | |
| div2.classList.toggle("foo"); | |
| }; | |
| return function schedule(fn) { | |
| var o = new MutationObserver(function() { | |
| o.disconnect(); | |
| fn(); | |
| }); | |
| o.observe(div, opts); | |
| scheduleToggle(); | |
| }; | |
| })(); | |
| } else if (typeof setImmediate !== "undefined") { | |
| schedule = function (fn) { | |
| setImmediate(fn); | |
| }; | |
| } else if (typeof setTimeout !== "undefined") { | |
| schedule = function (fn) { | |
| setTimeout(fn, 0); | |
| }; | |
| } else { | |
| schedule = noAsyncScheduler; | |
| } | |
| module.exports = schedule; | |