| /** |
| * Copyright (c) 2014 Petka Antonov |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions:</p> |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| * |
| */ |
| "use strict"; |
| var global = require("./global.js"); |
| var schedule; |
| if (typeof process !== "undefined" && process !== null && |
| typeof process.cwd === "function" && |
| typeof process.nextTick === "function" && |
| typeof process.version === "string") { |
| schedule = function Promise$_Scheduler(fn) { |
| process.nextTick(fn); |
| }; |
| } |
| else if ((typeof global.MutationObserver === "function" || |
| typeof global.WebkitMutationObserver === "function" || |
| typeof global.WebKitMutationObserver === "function") && |
| typeof document !== "undefined" && |
| typeof document.createElement === "function") { |
| |
| |
| schedule = (function(){ |
| var MutationObserver = global.MutationObserver || |
| global.WebkitMutationObserver || |
| global.WebKitMutationObserver; |
| var div = document.createElement("div"); |
| var queuedFn = void 0; |
| var observer = new MutationObserver( |
| function Promise$_Scheduler() { |
| var fn = queuedFn; |
| queuedFn = void 0; |
| fn(); |
| } |
| ); |
| observer.observe(div, { |
| attributes: true |
| }); |
| return function Promise$_Scheduler(fn) { |
| queuedFn = fn; |
| div.setAttribute("class", "foo"); |
| }; |
| |
| })(); |
| } |
| else if (typeof global.postMessage === "function" && |
| typeof global.importScripts !== "function" && |
| typeof global.addEventListener === "function" && |
| typeof global.removeEventListener === "function") { |
| |
| var MESSAGE_KEY = "bluebird_message_key_" + Math.random(); |
| schedule = (function(){ |
| var queuedFn = void 0; |
| |
| function Promise$_Scheduler(e) { |
| if (e.source === global && |
| e.data === MESSAGE_KEY) { |
| var fn = queuedFn; |
| queuedFn = void 0; |
| fn(); |
| } |
| } |
| |
| global.addEventListener("message", Promise$_Scheduler, false); |
| |
| return function Promise$_Scheduler(fn) { |
| queuedFn = fn; |
| global.postMessage( |
| MESSAGE_KEY, "*" |
| ); |
| }; |
| |
| })(); |
| } |
| else if (typeof global.MessageChannel === "function") { |
| schedule = (function(){ |
| var queuedFn = void 0; |
| |
| var channel = new global.MessageChannel(); |
| channel.port1.onmessage = function Promise$_Scheduler() { |
| var fn = queuedFn; |
| queuedFn = void 0; |
| fn(); |
| }; |
| |
| return function Promise$_Scheduler(fn) { |
| queuedFn = fn; |
| channel.port2.postMessage(null); |
| }; |
| })(); |
| } |
| else if (global.setTimeout) { |
| schedule = function Promise$_Scheduler(fn) { |
| setTimeout(fn, 4); |
| }; |
| } |
| else { |
| schedule = function Promise$_Scheduler(fn) { |
| fn(); |
| }; |
| } |
| |
| module.exports = schedule; |