You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					70 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					70 lines
				
				1.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								var Mutation = global.MutationObserver || global.WebKitMutationObserver;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var scheduleDrain;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  if (Mutation) {
							 | 
						||
| 
								 | 
							
								    var called = 0;
							 | 
						||
| 
								 | 
							
								    var observer = new Mutation(nextTick);
							 | 
						||
| 
								 | 
							
								    var element = global.document.createTextNode('');
							 | 
						||
| 
								 | 
							
								    observer.observe(element, {
							 | 
						||
| 
								 | 
							
								      characterData: true
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    scheduleDrain = function () {
							 | 
						||
| 
								 | 
							
								      element.data = (called = ++called % 2);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
							 | 
						||
| 
								 | 
							
								    var channel = new global.MessageChannel();
							 | 
						||
| 
								 | 
							
								    channel.port1.onmessage = nextTick;
							 | 
						||
| 
								 | 
							
								    scheduleDrain = function () {
							 | 
						||
| 
								 | 
							
								      channel.port2.postMessage(0);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
							 | 
						||
| 
								 | 
							
								    scheduleDrain = function () {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // 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 scriptEl = global.document.createElement('script');
							 | 
						||
| 
								 | 
							
								      scriptEl.onreadystatechange = function () {
							 | 
						||
| 
								 | 
							
								        nextTick();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        scriptEl.onreadystatechange = null;
							 | 
						||
| 
								 | 
							
								        scriptEl.parentNode.removeChild(scriptEl);
							 | 
						||
| 
								 | 
							
								        scriptEl = null;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      global.document.documentElement.appendChild(scriptEl);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    scheduleDrain = function () {
							 | 
						||
| 
								 | 
							
								      setTimeout(nextTick, 0);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var draining;
							 | 
						||
| 
								 | 
							
								var queue = [];
							 | 
						||
| 
								 | 
							
								//named nextTick for less confusing stack traces
							 | 
						||
| 
								 | 
							
								function nextTick() {
							 | 
						||
| 
								 | 
							
								  draining = true;
							 | 
						||
| 
								 | 
							
								  var i, oldQueue;
							 | 
						||
| 
								 | 
							
								  var len = queue.length;
							 | 
						||
| 
								 | 
							
								  while (len) {
							 | 
						||
| 
								 | 
							
								    oldQueue = queue;
							 | 
						||
| 
								 | 
							
								    queue = [];
							 | 
						||
| 
								 | 
							
								    i = -1;
							 | 
						||
| 
								 | 
							
								    while (++i < len) {
							 | 
						||
| 
								 | 
							
								      oldQueue[i]();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    len = queue.length;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  draining = false;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = immediate;
							 | 
						||
| 
								 | 
							
								function immediate(task) {
							 | 
						||
| 
								 | 
							
								  if (queue.push(task) === 1 && !draining) {
							 | 
						||
| 
								 | 
							
								    scheduleDrain();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |