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
						
					
					
				| '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();
 | |
|   }
 | |
| }
 |