| Index: runtime/bin/vmservice/observatory/deployed/web/packages/template_binding/js/flush.js
|
| diff --git a/runtime/bin/vmservice/observatory/deployed/web/packages/template_binding/js/flush.js b/runtime/bin/vmservice/observatory/deployed/web/packages/template_binding/js/flush.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61da3a8fb23a3e562a281b9817b7b5394aca1898
|
| --- /dev/null
|
| +++ b/runtime/bin/vmservice/observatory/deployed/web/packages/template_binding/js/flush.js
|
| @@ -0,0 +1,97 @@
|
| +/*
|
| + * Copyright (c) 2014 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
|
| + */
|
| +
|
| +(function(scope) {
|
| +
|
| +/**
|
| + * @class Polymer
|
| + */
|
| +
|
| +// imports
|
| +var endOfMicrotask = scope.endOfMicrotask;
|
| +
|
| +// logging
|
| +var log = window.WebComponents ? WebComponents.flags.log : {};
|
| +
|
| +// inject style sheet
|
| +var style = document.createElement('style');
|
| +style.textContent = 'template {display: none !important;} /* injected by platform.js */';
|
| +var head = document.querySelector('head');
|
| +head.insertBefore(style, head.firstChild);
|
| +
|
| +
|
| +/**
|
| + * Force any pending data changes to be observed before
|
| + * the next task. Data changes are processed asynchronously but are guaranteed
|
| + * to be processed, for example, before paintin. This method should rarely be
|
| + * needed. It does nothing when Object.observe is available;
|
| + * when Object.observe is not available, Polymer automatically flushes data
|
| + * changes approximately every 1/10 second.
|
| + * Therefore, `flush` should only be used when a data mutation should be
|
| + * observed sooner than this.
|
| + *
|
| + * @method flush
|
| + */
|
| +// flush (with logging)
|
| +var flushing;
|
| +function flush() {
|
| + if (!flushing) {
|
| + flushing = true;
|
| + endOfMicrotask(function() {
|
| + flushing = false;
|
| + log.data && console.group('flush');
|
| + Platform.performMicrotaskCheckpoint();
|
| + log.data && console.groupEnd();
|
| + });
|
| + }
|
| +};
|
| +
|
| +// polling dirty checker
|
| +// flush periodically if platform does not have object observe.
|
| +if (!Observer.hasObjectObserve) {
|
| + var FLUSH_POLL_INTERVAL = 125;
|
| + window.addEventListener('WebComponentsReady', function() {
|
| + flush();
|
| + // watch document visiblity to toggle dirty-checking
|
| + var visibilityHandler = function() {
|
| + // only flush if the page is visibile
|
| + if (document.visibilityState === 'hidden') {
|
| + if (scope.flushPoll) {
|
| + clearInterval(scope.flushPoll);
|
| + }
|
| + } else {
|
| + scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);
|
| + }
|
| + };
|
| + if (typeof document.visibilityState === 'string') {
|
| + document.addEventListener('visibilitychange', visibilityHandler);
|
| + }
|
| + visibilityHandler();
|
| + });
|
| +} else {
|
| + // make flush a no-op when we have Object.observe
|
| + flush = function() {};
|
| +}
|
| +
|
| +if (window.CustomElements && !CustomElements.useNative) {
|
| + var originalImportNode = Document.prototype.importNode;
|
| + Document.prototype.importNode = function(node, deep) {
|
| + var imported = originalImportNode.call(this, node, deep);
|
| + CustomElements.upgradeAll(imported);
|
| + return imported;
|
| + };
|
| +}
|
| +
|
| +// exports
|
| +scope.flush = flush;
|
| +// bc
|
| +Platform.flush = flush;
|
| +
|
| +})(window.Polymer);
|
| +
|
|
|