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); |
+ |