UNPKG

molstar

Version:

A comprehensive macromolecular library.

194 lines 7.43 kB
"use strict"; /** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Scheduler = void 0; var tslib_1 = require("tslib"); function createImmediateActions() { var global = (function () { var _window = typeof window !== 'undefined' && window; var _self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && self; var _global = typeof global !== 'undefined' && global; return _window || _global || _self; })(); var tasksByHandle = {}; var doc = typeof document !== 'undefined' ? document : void 0; var nextHandle = 1; // Spec says greater than zero var registerImmediate; function setImmediate(callback) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } // Callback can either be a function or a string if (typeof callback !== 'function') { callback = new Function('' + callback); } // Store and register the task var task = { callback: callback, args: args }; tasksByHandle[nextHandle] = task; registerImmediate(nextHandle); return nextHandle++; } function clearImmediate(handle) { delete tasksByHandle[handle]; } function run(task) { var callback = task.callback; var args = task.args; switch (args.length) { case 0: callback(); break; case 1: callback(args[0]); break; case 2: callback(args[0], args[1]); break; case 3: callback(args[0], args[1], args[2]); break; default: callback.apply(undefined, args); break; } } function runIfPresent(handle) { var task = tasksByHandle[handle]; clearImmediate(handle); run(task); } function installNextTickImplementation() { registerImmediate = function (handle) { process.nextTick(function () { runIfPresent(handle); }); }; } function canUsePostMessage() { if (global && global.postMessage && !global.importScripts) { var postMessageIsAsynchronous_1 = true; var oldOnMessage = global.onmessage; global.onmessage = function () { postMessageIsAsynchronous_1 = false; }; global.postMessage('', '*'); global.onmessage = oldOnMessage; return postMessageIsAsynchronous_1; } } function installPostMessageImplementation() { // Installs an event handler on `global` for the `message` event: see // * https://developer.mozilla.org/en/DOM/window.postMessage // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages var messagePrefix = 'setImmediate$' + Math.random() + '$'; var onGlobalMessage = function (event) { if (event.source === global && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) { runIfPresent(+event.data.slice(messagePrefix.length)); } }; if (window.addEventListener) { window.addEventListener('message', onGlobalMessage, false); } else { window.attachEvent('onmessage', onGlobalMessage); } registerImmediate = function (handle) { window.postMessage(messagePrefix + handle, '*'); }; } function installMessageChannelImplementation() { var channel = new MessageChannel(); channel.port1.onmessage = function (event) { var handle = event.data; runIfPresent(handle); }; registerImmediate = function (handle) { channel.port2.postMessage(handle); }; } function installReadyStateChangeImplementation() { var html = doc.documentElement; registerImmediate = function (handle) { // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. var script = doc.createElement('script'); script.onreadystatechange = function () { runIfPresent(handle); script.onreadystatechange = null; html.removeChild(script); script = null; }; html.appendChild(script); }; } function installSetTimeoutImplementation() { registerImmediate = function (handle) { setTimeout(runIfPresent, 0, handle); }; } // Don't get fooled by e.g. browserify environments. if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { // For Node.js before 0.9 installNextTickImplementation(); } else if (canUsePostMessage()) { // For non-IE10 modern browsers installPostMessageImplementation(); } else if (typeof MessageChannel !== 'undefined') { // For web workers, where supported installMessageChannelImplementation(); } else if (doc && 'onreadystatechange' in doc.createElement('script')) { // For IE 6–8 installReadyStateChangeImplementation(); } else { // For older browsers installSetTimeoutImplementation(); } return { setImmediate: setImmediate, clearImmediate: clearImmediate }; } var immediateActions = (function () { if (typeof setImmediate !== 'undefined') { if (typeof window !== 'undefined') { return { setImmediate: function (handler) { var _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return (_a = window).setImmediate.apply(_a, (0, tslib_1.__spreadArray)([handler], args, false)); }, clearImmediate: function (handle) { return window.clearImmediate(handle); } }; } else { return { setImmediate: setImmediate, clearImmediate: clearImmediate }; } } return createImmediateActions(); }()); function resolveImmediate(res) { immediateActions.setImmediate(res); } var Scheduler = { setImmediate: immediateActions.setImmediate, clearImmediate: immediateActions.clearImmediate, immediatePromise: function () { return new Promise(resolveImmediate); }, delay: function (timeout, value) { if (value === void 0) { value = void 0; } return new Promise(function (r) { return setTimeout(r, timeout, value); }); } }; exports.Scheduler = Scheduler; //# sourceMappingURL=scheduler.js.map