|
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 /******/ }); |