mirror of
https://github.com/Polymer/polymer.git
synced 2025-02-25 18:55:30 -06:00
58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
/**
|
|
@license
|
|
Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
Code distributed by Google as part of the polymer project is also
|
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
*/
|
|
import './boot.js';
|
|
/* eslint-disable no-unused-vars */
|
|
import { Debouncer } from '../utils/debounce.js'; // used in type annotations
|
|
/* eslint-enable no-unused-vars */
|
|
|
|
let debouncerQueue = [];
|
|
|
|
/**
|
|
* Adds a `Debouncer` to a list of globally flushable tasks.
|
|
*
|
|
* @param {!Debouncer} debouncer Debouncer to enqueue
|
|
* @return {void}
|
|
*/
|
|
export const enqueueDebouncer = function(debouncer) {
|
|
debouncerQueue.push(debouncer);
|
|
};
|
|
|
|
function flushDebouncers() {
|
|
const didFlush = Boolean(debouncerQueue.length);
|
|
while (debouncerQueue.length) {
|
|
try {
|
|
debouncerQueue.shift().flush();
|
|
} catch(e) {
|
|
setTimeout(() => {
|
|
throw e;
|
|
});
|
|
}
|
|
}
|
|
return didFlush;
|
|
}
|
|
|
|
/**
|
|
* Forces several classes of asynchronously queued tasks to flush:
|
|
* - Debouncers added via `enqueueDebouncer`
|
|
* - ShadyDOM distribution
|
|
*
|
|
* @return {void}
|
|
*/
|
|
export const flush = function() {
|
|
let shadyDOM, debouncers;
|
|
do {
|
|
shadyDOM = window.ShadyDOM && ShadyDOM.flush();
|
|
if (window.ShadyCSS && window.ShadyCSS.ScopingShim) {
|
|
window.ShadyCSS.ScopingShim.flush();
|
|
}
|
|
debouncers = flushDebouncers();
|
|
} while (shadyDOM || debouncers);
|
|
};
|