Merged in feature/from-pantheon (pull request #16)
code from pantheon * code from pantheon
This commit is contained in:
509
wp/wp-includes/js/dist/priority-queue.js
vendored
Normal file
509
wp/wp-includes/js/dist/priority-queue.js
vendored
Normal file
@@ -0,0 +1,509 @@
|
||||
/******/ (function() { // webpackBootstrap
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ 3159:
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (factory) {
|
||||
if (true) {
|
||||
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||||
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||||
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||||
} else {}
|
||||
}(function(){
|
||||
'use strict';
|
||||
var scheduleStart, throttleDelay, lazytimer, lazyraf;
|
||||
var root = typeof window != 'undefined' ?
|
||||
window :
|
||||
typeof __webpack_require__.g != undefined ?
|
||||
__webpack_require__.g :
|
||||
this || {};
|
||||
var requestAnimationFrame = root.cancelRequestAnimationFrame && root.requestAnimationFrame || setTimeout;
|
||||
var cancelRequestAnimationFrame = root.cancelRequestAnimationFrame || clearTimeout;
|
||||
var tasks = [];
|
||||
var runAttempts = 0;
|
||||
var isRunning = false;
|
||||
var remainingTime = 7;
|
||||
var minThrottle = 35;
|
||||
var throttle = 125;
|
||||
var index = 0;
|
||||
var taskStart = 0;
|
||||
var tasklength = 0;
|
||||
var IdleDeadline = {
|
||||
get didTimeout(){
|
||||
return false;
|
||||
},
|
||||
timeRemaining: function(){
|
||||
var timeRemaining = remainingTime - (Date.now() - taskStart);
|
||||
return timeRemaining < 0 ? 0 : timeRemaining;
|
||||
},
|
||||
};
|
||||
var setInactive = debounce(function(){
|
||||
remainingTime = 22;
|
||||
throttle = 66;
|
||||
minThrottle = 0;
|
||||
});
|
||||
|
||||
function debounce(fn){
|
||||
var id, timestamp;
|
||||
var wait = 99;
|
||||
var check = function(){
|
||||
var last = (Date.now()) - timestamp;
|
||||
|
||||
if (last < wait) {
|
||||
id = setTimeout(check, wait - last);
|
||||
} else {
|
||||
id = null;
|
||||
fn();
|
||||
}
|
||||
};
|
||||
return function(){
|
||||
timestamp = Date.now();
|
||||
if(!id){
|
||||
id = setTimeout(check, wait);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function abortRunning(){
|
||||
if(isRunning){
|
||||
if(lazyraf){
|
||||
cancelRequestAnimationFrame(lazyraf);
|
||||
}
|
||||
if(lazytimer){
|
||||
clearTimeout(lazytimer);
|
||||
}
|
||||
isRunning = false;
|
||||
}
|
||||
}
|
||||
|
||||
function onInputorMutation(){
|
||||
if(throttle != 125){
|
||||
remainingTime = 7;
|
||||
throttle = 125;
|
||||
minThrottle = 35;
|
||||
|
||||
if(isRunning) {
|
||||
abortRunning();
|
||||
scheduleLazy();
|
||||
}
|
||||
}
|
||||
setInactive();
|
||||
}
|
||||
|
||||
function scheduleAfterRaf() {
|
||||
lazyraf = null;
|
||||
lazytimer = setTimeout(runTasks, 0);
|
||||
}
|
||||
|
||||
function scheduleRaf(){
|
||||
lazytimer = null;
|
||||
requestAnimationFrame(scheduleAfterRaf);
|
||||
}
|
||||
|
||||
function scheduleLazy(){
|
||||
|
||||
if(isRunning){return;}
|
||||
throttleDelay = throttle - (Date.now() - taskStart);
|
||||
|
||||
scheduleStart = Date.now();
|
||||
|
||||
isRunning = true;
|
||||
|
||||
if(minThrottle && throttleDelay < minThrottle){
|
||||
throttleDelay = minThrottle;
|
||||
}
|
||||
|
||||
if(throttleDelay > 9){
|
||||
lazytimer = setTimeout(scheduleRaf, throttleDelay);
|
||||
} else {
|
||||
throttleDelay = 0;
|
||||
scheduleRaf();
|
||||
}
|
||||
}
|
||||
|
||||
function runTasks(){
|
||||
var task, i, len;
|
||||
var timeThreshold = remainingTime > 9 ?
|
||||
9 :
|
||||
1
|
||||
;
|
||||
|
||||
taskStart = Date.now();
|
||||
isRunning = false;
|
||||
|
||||
lazytimer = null;
|
||||
|
||||
if(runAttempts > 2 || taskStart - throttleDelay - 50 < scheduleStart){
|
||||
for(i = 0, len = tasks.length; i < len && IdleDeadline.timeRemaining() > timeThreshold; i++){
|
||||
task = tasks.shift();
|
||||
tasklength++;
|
||||
if(task){
|
||||
task(IdleDeadline);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(tasks.length){
|
||||
scheduleLazy();
|
||||
} else {
|
||||
runAttempts = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function requestIdleCallbackShim(task){
|
||||
index++;
|
||||
tasks.push(task);
|
||||
scheduleLazy();
|
||||
return index;
|
||||
}
|
||||
|
||||
function cancelIdleCallbackShim(id){
|
||||
var index = id - 1 - tasklength;
|
||||
if(tasks[index]){
|
||||
tasks[index] = null;
|
||||
}
|
||||
}
|
||||
|
||||
if(!root.requestIdleCallback || !root.cancelIdleCallback){
|
||||
root.requestIdleCallback = requestIdleCallbackShim;
|
||||
root.cancelIdleCallback = cancelIdleCallbackShim;
|
||||
|
||||
if(root.document && document.addEventListener){
|
||||
root.addEventListener('scroll', onInputorMutation, true);
|
||||
root.addEventListener('resize', onInputorMutation);
|
||||
|
||||
document.addEventListener('focus', onInputorMutation, true);
|
||||
document.addEventListener('mouseover', onInputorMutation, true);
|
||||
['click', 'keypress', 'touchstart', 'mousedown'].forEach(function(name){
|
||||
document.addEventListener(name, onInputorMutation, {capture: true, passive: true});
|
||||
});
|
||||
|
||||
if(root.MutationObserver){
|
||||
new MutationObserver( onInputorMutation ).observe( document.documentElement, {childList: true, subtree: true, attributes: true} );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try{
|
||||
root.requestIdleCallback(function(){}, {timeout: 0});
|
||||
} catch(e){
|
||||
(function(rIC){
|
||||
var timeRemainingProto, timeRemaining;
|
||||
root.requestIdleCallback = function(fn, timeout){
|
||||
if(timeout && typeof timeout.timeout == 'number'){
|
||||
return rIC(fn, timeout.timeout);
|
||||
}
|
||||
return rIC(fn);
|
||||
};
|
||||
if(root.IdleCallbackDeadline && (timeRemainingProto = IdleCallbackDeadline.prototype)){
|
||||
timeRemaining = Object.getOwnPropertyDescriptor(timeRemainingProto, 'timeRemaining');
|
||||
if(!timeRemaining || !timeRemaining.configurable || !timeRemaining.get){return;}
|
||||
Object.defineProperty(timeRemainingProto, 'timeRemaining', {
|
||||
value: function(){
|
||||
return timeRemaining.get.call(this);
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
});
|
||||
}
|
||||
})(root.requestIdleCallback)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
request: requestIdleCallbackShim,
|
||||
cancel: cancelIdleCallbackShim,
|
||||
};
|
||||
}));
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ !function() {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = function(exports, definition) {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/global */
|
||||
/******/ !function() {
|
||||
/******/ __webpack_require__.g = (function() {
|
||||
/******/ if (typeof globalThis === 'object') return globalThis;
|
||||
/******/ try {
|
||||
/******/ return this || new Function('return this')();
|
||||
/******/ } catch (e) {
|
||||
/******/ if (typeof window === 'object') return window;
|
||||
/******/ }
|
||||
/******/ })();
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ !function() {
|
||||
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/make namespace object */
|
||||
/******/ !function() {
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function(exports) {
|
||||
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
/******/ }
|
||||
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
var __webpack_exports__ = {};
|
||||
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
||||
!function() {
|
||||
"use strict";
|
||||
// ESM COMPAT FLAG
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
|
||||
// EXPORTS
|
||||
__webpack_require__.d(__webpack_exports__, {
|
||||
createQueue: function() { return /* binding */ createQueue; }
|
||||
});
|
||||
|
||||
// EXTERNAL MODULE: ./node_modules/requestidlecallback/index.js
|
||||
var requestidlecallback = __webpack_require__(3159);
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/priority-queue/build-module/request-idle-callback.js
|
||||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @typedef {( timeOrDeadline: IdleDeadline | number ) => void} Callback
|
||||
*/
|
||||
|
||||
/**
|
||||
* @return {(callback: Callback) => void} RequestIdleCallback
|
||||
*/
|
||||
function createRequestIdleCallback() {
|
||||
if (typeof window === 'undefined') {
|
||||
return callback => {
|
||||
setTimeout(() => callback(Date.now()), 0);
|
||||
};
|
||||
}
|
||||
return window.requestIdleCallback;
|
||||
}
|
||||
/* harmony default export */ var request_idle_callback = (createRequestIdleCallback());
|
||||
|
||||
;// CONCATENATED MODULE: ./node_modules/@wordpress/priority-queue/build-module/index.js
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Enqueued callback to invoke once idle time permits.
|
||||
*
|
||||
* @typedef {()=>void} WPPriorityQueueCallback
|
||||
*/
|
||||
|
||||
/**
|
||||
* An object used to associate callbacks in a particular context grouping.
|
||||
*
|
||||
* @typedef {{}} WPPriorityQueueContext
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function to add callback to priority queue.
|
||||
*
|
||||
* @typedef {(element:WPPriorityQueueContext,item:WPPriorityQueueCallback)=>void} WPPriorityQueueAdd
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function to flush callbacks from priority queue.
|
||||
*
|
||||
* @typedef {(element:WPPriorityQueueContext)=>boolean} WPPriorityQueueFlush
|
||||
*/
|
||||
|
||||
/**
|
||||
* Reset the queue.
|
||||
*
|
||||
* @typedef {()=>void} WPPriorityQueueReset
|
||||
*/
|
||||
|
||||
/**
|
||||
* Priority queue instance.
|
||||
*
|
||||
* @typedef {Object} WPPriorityQueue
|
||||
*
|
||||
* @property {WPPriorityQueueAdd} add Add callback to queue for context.
|
||||
* @property {WPPriorityQueueFlush} flush Flush queue for context.
|
||||
* @property {WPPriorityQueueFlush} cancel Clear queue for context.
|
||||
* @property {WPPriorityQueueReset} reset Reset queue.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Creates a context-aware queue that only executes
|
||||
* the last task of a given context.
|
||||
*
|
||||
* @example
|
||||
*```js
|
||||
* import { createQueue } from '@wordpress/priority-queue';
|
||||
*
|
||||
* const queue = createQueue();
|
||||
*
|
||||
* // Context objects.
|
||||
* const ctx1 = {};
|
||||
* const ctx2 = {};
|
||||
*
|
||||
* // For a given context in the queue, only the last callback is executed.
|
||||
* queue.add( ctx1, () => console.log( 'This will be printed first' ) );
|
||||
* queue.add( ctx2, () => console.log( 'This won\'t be printed' ) );
|
||||
* queue.add( ctx2, () => console.log( 'This will be printed second' ) );
|
||||
*```
|
||||
*
|
||||
* @return {WPPriorityQueue} Queue object with `add`, `flush` and `reset` methods.
|
||||
*/
|
||||
const createQueue = () => {
|
||||
/** @type {Map<WPPriorityQueueContext, WPPriorityQueueCallback>} */
|
||||
const waitingList = new Map();
|
||||
let isRunning = false;
|
||||
|
||||
/**
|
||||
* Callback to process as much queue as time permits.
|
||||
*
|
||||
* Map Iteration follows the original insertion order. This means that here
|
||||
* we can iterate the queue and know that the first contexts which were
|
||||
* added will be run first. On the other hand, if anyone adds a new callback
|
||||
* for an existing context it will supplant the previously-set callback for
|
||||
* that context because we reassigned that map key's value.
|
||||
*
|
||||
* In the case that a callback adds a new callback to its own context then
|
||||
* the callback it adds will appear at the end of the iteration and will be
|
||||
* run only after all other existing contexts have finished executing.
|
||||
*
|
||||
* @param {IdleDeadline|number} deadline Idle callback deadline object, or
|
||||
* animation frame timestamp.
|
||||
*/
|
||||
const runWaitingList = deadline => {
|
||||
for (const [nextElement, callback] of waitingList) {
|
||||
waitingList.delete(nextElement);
|
||||
callback();
|
||||
if ('number' === typeof deadline || deadline.timeRemaining() <= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (waitingList.size === 0) {
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
request_idle_callback(runWaitingList);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a callback to the queue for a given context.
|
||||
*
|
||||
* If errors with undefined callbacks are encountered double check that
|
||||
* all of your useSelect calls have the right dependencies set correctly
|
||||
* in their second parameter. Missing dependencies can cause unexpected
|
||||
* loops and race conditions in the queue.
|
||||
*
|
||||
* @type {WPPriorityQueueAdd}
|
||||
*
|
||||
* @param {WPPriorityQueueContext} element Context object.
|
||||
* @param {WPPriorityQueueCallback} item Callback function.
|
||||
*/
|
||||
const add = (element, item) => {
|
||||
waitingList.set(element, item);
|
||||
if (!isRunning) {
|
||||
isRunning = true;
|
||||
request_idle_callback(runWaitingList);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Flushes queue for a given context, returning true if the flush was
|
||||
* performed, or false if there is no queue for the given context.
|
||||
*
|
||||
* @type {WPPriorityQueueFlush}
|
||||
*
|
||||
* @param {WPPriorityQueueContext} element Context object.
|
||||
*
|
||||
* @return {boolean} Whether flush was performed.
|
||||
*/
|
||||
const flush = element => {
|
||||
const callback = waitingList.get(element);
|
||||
if (undefined === callback) {
|
||||
return false;
|
||||
}
|
||||
waitingList.delete(element);
|
||||
callback();
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears the queue for a given context, cancelling the callbacks without
|
||||
* executing them. Returns `true` if there were scheduled callbacks to cancel,
|
||||
* or `false` if there was is no queue for the given context.
|
||||
*
|
||||
* @type {WPPriorityQueueFlush}
|
||||
*
|
||||
* @param {WPPriorityQueueContext} element Context object.
|
||||
*
|
||||
* @return {boolean} Whether any callbacks got cancelled.
|
||||
*/
|
||||
const cancel = element => {
|
||||
return waitingList.delete(element);
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset the queue without running the pending callbacks.
|
||||
*
|
||||
* @type {WPPriorityQueueReset}
|
||||
*/
|
||||
const reset = () => {
|
||||
waitingList.clear();
|
||||
isRunning = false;
|
||||
};
|
||||
return {
|
||||
add,
|
||||
flush,
|
||||
cancel,
|
||||
reset
|
||||
};
|
||||
};
|
||||
|
||||
}();
|
||||
(window.wp = window.wp || {}).priorityQueue = __webpack_exports__;
|
||||
/******/ })()
|
||||
;
|
||||
Reference in New Issue
Block a user