wp/wp-includes/js/dist/priority-queue.js
changeset 9 177826044cd9
child 16 a86126ab1dd4
equal deleted inserted replaced
8:c7c34916027a 9:177826044cd9
       
     1 this["wp"] = this["wp"] || {}; this["wp"]["priorityQueue"] =
       
     2 /******/ (function(modules) { // webpackBootstrap
       
     3 /******/ 	// The module cache
       
     4 /******/ 	var installedModules = {};
       
     5 /******/
       
     6 /******/ 	// The require function
       
     7 /******/ 	function __webpack_require__(moduleId) {
       
     8 /******/
       
     9 /******/ 		// Check if module is in cache
       
    10 /******/ 		if(installedModules[moduleId]) {
       
    11 /******/ 			return installedModules[moduleId].exports;
       
    12 /******/ 		}
       
    13 /******/ 		// Create a new module (and put it into the cache)
       
    14 /******/ 		var module = installedModules[moduleId] = {
       
    15 /******/ 			i: moduleId,
       
    16 /******/ 			l: false,
       
    17 /******/ 			exports: {}
       
    18 /******/ 		};
       
    19 /******/
       
    20 /******/ 		// Execute the module function
       
    21 /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
       
    22 /******/
       
    23 /******/ 		// Flag the module as loaded
       
    24 /******/ 		module.l = true;
       
    25 /******/
       
    26 /******/ 		// Return the exports of the module
       
    27 /******/ 		return module.exports;
       
    28 /******/ 	}
       
    29 /******/
       
    30 /******/
       
    31 /******/ 	// expose the modules object (__webpack_modules__)
       
    32 /******/ 	__webpack_require__.m = modules;
       
    33 /******/
       
    34 /******/ 	// expose the module cache
       
    35 /******/ 	__webpack_require__.c = installedModules;
       
    36 /******/
       
    37 /******/ 	// define getter function for harmony exports
       
    38 /******/ 	__webpack_require__.d = function(exports, name, getter) {
       
    39 /******/ 		if(!__webpack_require__.o(exports, name)) {
       
    40 /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
       
    41 /******/ 		}
       
    42 /******/ 	};
       
    43 /******/
       
    44 /******/ 	// define __esModule on exports
       
    45 /******/ 	__webpack_require__.r = function(exports) {
       
    46 /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
       
    47 /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
       
    48 /******/ 		}
       
    49 /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
       
    50 /******/ 	};
       
    51 /******/
       
    52 /******/ 	// create a fake namespace object
       
    53 /******/ 	// mode & 1: value is a module id, require it
       
    54 /******/ 	// mode & 2: merge all properties of value into the ns
       
    55 /******/ 	// mode & 4: return value when already ns object
       
    56 /******/ 	// mode & 8|1: behave like require
       
    57 /******/ 	__webpack_require__.t = function(value, mode) {
       
    58 /******/ 		if(mode & 1) value = __webpack_require__(value);
       
    59 /******/ 		if(mode & 8) return value;
       
    60 /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
       
    61 /******/ 		var ns = Object.create(null);
       
    62 /******/ 		__webpack_require__.r(ns);
       
    63 /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
       
    64 /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
       
    65 /******/ 		return ns;
       
    66 /******/ 	};
       
    67 /******/
       
    68 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
       
    69 /******/ 	__webpack_require__.n = function(module) {
       
    70 /******/ 		var getter = module && module.__esModule ?
       
    71 /******/ 			function getDefault() { return module['default']; } :
       
    72 /******/ 			function getModuleExports() { return module; };
       
    73 /******/ 		__webpack_require__.d(getter, 'a', getter);
       
    74 /******/ 		return getter;
       
    75 /******/ 	};
       
    76 /******/
       
    77 /******/ 	// Object.prototype.hasOwnProperty.call
       
    78 /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
       
    79 /******/
       
    80 /******/ 	// __webpack_public_path__
       
    81 /******/ 	__webpack_require__.p = "";
       
    82 /******/
       
    83 /******/
       
    84 /******/ 	// Load entry module and return exports
       
    85 /******/ 	return __webpack_require__(__webpack_require__.s = 346);
       
    86 /******/ })
       
    87 /************************************************************************/
       
    88 /******/ ({
       
    89 
       
    90 /***/ 346:
       
    91 /***/ (function(module, __webpack_exports__, __webpack_require__) {
       
    92 
       
    93 "use strict";
       
    94 __webpack_require__.r(__webpack_exports__);
       
    95 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createQueue", function() { return createQueue; });
       
    96 var requestIdleCallback = window.requestIdleCallback ? window.requestIdleCallback : window.requestAnimationFrame;
       
    97 /**
       
    98  * Creates a context-aware queue that only executes
       
    99  * the last task of a given context.
       
   100  *
       
   101  * @example
       
   102  *```js
       
   103  * import { createQueue } from '@wordpress/priority-queue';
       
   104  *
       
   105  * const queue = createQueue();
       
   106  *
       
   107  * // Context objects.
       
   108  * const ctx1 = {};
       
   109  * const ctx2 = {};
       
   110  *
       
   111  * // For a given context in the queue, only the last callback is executed.
       
   112  * queue.add( ctx1, () => console.log( 'This will be printed first' ) );
       
   113  * queue.add( ctx2, () => console.log( 'This won\'t be printed' ) );
       
   114  * queue.add( ctx2, () => console.log( 'This will be printed second' ) );
       
   115  *```
       
   116  *
       
   117  * @return {Object} Queue object with `add` and `flush` methods.
       
   118  */
       
   119 
       
   120 var createQueue = function createQueue() {
       
   121   var waitingList = [];
       
   122   var elementsMap = new WeakMap();
       
   123   var isRunning = false;
       
   124 
       
   125   var runWaitingList = function runWaitingList(deadline) {
       
   126     do {
       
   127       if (waitingList.length === 0) {
       
   128         isRunning = false;
       
   129         return;
       
   130       }
       
   131 
       
   132       var nextElement = waitingList.shift();
       
   133       elementsMap.get(nextElement)();
       
   134       elementsMap.delete(nextElement);
       
   135     } while (deadline && deadline.timeRemaining && deadline.timeRemaining() > 0);
       
   136 
       
   137     requestIdleCallback(runWaitingList);
       
   138   };
       
   139 
       
   140   var add = function add(element, item) {
       
   141     if (!elementsMap.has(element)) {
       
   142       waitingList.push(element);
       
   143     }
       
   144 
       
   145     elementsMap.set(element, item);
       
   146 
       
   147     if (!isRunning) {
       
   148       isRunning = true;
       
   149       requestIdleCallback(runWaitingList);
       
   150     }
       
   151   };
       
   152 
       
   153   var flush = function flush(element) {
       
   154     if (!elementsMap.has(element)) {
       
   155       return false;
       
   156     }
       
   157 
       
   158     elementsMap.delete(element);
       
   159     var index = waitingList.indexOf(element);
       
   160     waitingList.splice(index, 1);
       
   161     return true;
       
   162   };
       
   163 
       
   164   return {
       
   165     add: add,
       
   166     flush: flush
       
   167   };
       
   168 };
       
   169 
       
   170 
       
   171 /***/ })
       
   172 
       
   173 /******/ });