| Index: appengine/config_service/ui/bower_components/polymer/lib/utils/render-status.html
|
| diff --git a/appengine/config_service/ui/bower_components/polymer/lib/utils/render-status.html b/appengine/config_service/ui/bower_components/polymer/lib/utils/render-status.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ca7175adcef73c7c75b816bdc9643b6bdfe19d64
|
| --- /dev/null
|
| +++ b/appengine/config_service/ui/bower_components/polymer/lib/utils/render-status.html
|
| @@ -0,0 +1,130 @@
|
| +<!--
|
| +@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
|
| +-->
|
| +<link rel="import" href="boot.html">
|
| +
|
| +<script>
|
| +(function() {
|
| +
|
| + 'use strict';
|
| +
|
| + let scheduled = false;
|
| + let beforeRenderQueue = [];
|
| + let afterRenderQueue = [];
|
| +
|
| + function schedule() {
|
| + scheduled = true;
|
| + // before next render
|
| + requestAnimationFrame(function() {
|
| + scheduled = false;
|
| + flushQueue(beforeRenderQueue);
|
| + // after the render
|
| + setTimeout(function() {
|
| + runQueue(afterRenderQueue);
|
| + });
|
| + });
|
| + }
|
| +
|
| + function flushQueue(queue) {
|
| + while (queue.length) {
|
| + callMethod(queue.shift());
|
| + }
|
| + }
|
| +
|
| + function runQueue(queue) {
|
| + for (let i=0, l=queue.length; i < l; i++) {
|
| + callMethod(queue.shift());
|
| + }
|
| + }
|
| +
|
| + function callMethod(info) {
|
| + const context = info[0];
|
| + const callback = info[1];
|
| + const args = info[2];
|
| + try {
|
| + callback.apply(context, args);
|
| + } catch(e) {
|
| + setTimeout(() => {
|
| + throw e;
|
| + })
|
| + }
|
| + }
|
| +
|
| + function flush() {
|
| + while (beforeRenderQueue.length || afterRenderQueue.length) {
|
| + flushQueue(beforeRenderQueue);
|
| + flushQueue(afterRenderQueue);
|
| + }
|
| + scheduled = false;
|
| + }
|
| +
|
| + /**
|
| + * Module for scheduling flushable pre-render and post-render tasks.
|
| + *
|
| + * @namespace
|
| + * @memberof Polymer
|
| + * @summary Module for scheduling flushable pre-render and post-render tasks.
|
| + */
|
| + Polymer.RenderStatus = {
|
| +
|
| + /**
|
| + * Enqueues a callback which will be run before the next render, at
|
| + * `requestAnimationFrame` timing.
|
| + *
|
| + * This method is useful for enqueuing work that requires DOM measurement,
|
| + * since measurement may not be reliable in custom element callbacks before
|
| + * the first render, as well as for batching measurement tasks in general.
|
| + *
|
| + * Tasks in this queue may be flushed by calling `Polymer.RenderStatus.flush()`.
|
| + *
|
| + * @memberof Polymer.RenderStatus
|
| + * @param {*} context Context object the callback function will be bound to
|
| + * @param {function()} callback Callback function
|
| + * @param {Array} args An array of arguments to call the callback function with
|
| + */
|
| + beforeNextRender: function(context, callback, args) {
|
| + if (!scheduled) {
|
| + schedule();
|
| + }
|
| + beforeRenderQueue.push([context, callback, args]);
|
| + },
|
| +
|
| + /**
|
| + * Enqueues a callback which will be run after the next render, equivalent
|
| + * to one task (`setTimeout`) after the next `requestAnimationFrame`.
|
| + *
|
| + * This method is useful for tuning the first-render performance of an
|
| + * element or application by deferring non-critical work until after the
|
| + * first paint. Typical non-render-critical work may include adding UI
|
| + * event listeners and aria attributes.
|
| + *
|
| + * @memberof Polymer.RenderStatus
|
| + * @param {*} context Context object the callback function will be bound to
|
| + * @param {function()} callback Callback function
|
| + * @param {Array} args An array of arguments to call the callback function with
|
| + */
|
| + afterNextRender: function(context, callback, args) {
|
| + if (!scheduled) {
|
| + schedule();
|
| + }
|
| + afterRenderQueue.push([context, callback, args]);
|
| + },
|
| +
|
| + /**
|
| + * Flushes all `beforeNextRender` tasks, followed by all `afterNextRender`
|
| + * tasks.
|
| + *
|
| + * @memberof Polymer.RenderStatus
|
| + */
|
| + flush: flush
|
| +
|
| + };
|
| +
|
| +})();
|
| +</script>
|
|
|