Index: pkg/template_binding/lib/js/microtask.js |
diff --git a/pkg/template_binding/lib/js/microtask.js b/pkg/template_binding/lib/js/microtask.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..827f2fe221868115734a37c6e26a58ee5883c4d8 |
--- /dev/null |
+++ b/pkg/template_binding/lib/js/microtask.js |
@@ -0,0 +1,36 @@ |
+/* |
+ * 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) { |
+ |
+var iterations = 0; |
+var callbacks = []; |
+var twiddle = document.createTextNode(''); |
+ |
+function endOfMicrotask(callback) { |
+ twiddle.textContent = iterations++; |
+ callbacks.push(callback); |
+} |
+ |
+function atEndOfMicrotask() { |
+ while (callbacks.length) { |
+ callbacks.shift()(); |
+ } |
+} |
+ |
+new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask) |
+ .observe(twiddle, {characterData: true}) |
+ ; |
+ |
+// exports |
+ |
+scope.endOfMicrotask = endOfMicrotask; |
+ |
+})(Platform); |
+ |