Index: third_party/polymer/v0_8/components-chromium/polymer/src/lib/async-extracted.js |
diff --git a/third_party/polymer/v0_8/components-chromium/polymer/src/lib/async-extracted.js b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/async-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..71126c8b141952eb493d3a4965648f85fdb9ec00 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/async-extracted.js |
@@ -0,0 +1,58 @@ |
+ |
+ |
+Polymer.Async = (function() { |
+ |
+ var currVal = 0; |
+ var lastVal = 0; |
+ var callbacks = []; |
+ var twiddle = document.createTextNode(''); |
+ |
+ function runAsync(callback, waitTime) { |
+ if (waitTime > 0) { |
+ return ~setTimeout(callback, waitTime); |
+ } else { |
+ twiddle.textContent = currVal++; |
+ callbacks.push(callback); |
+ return currVal - 1; |
+ } |
+ } |
+ |
+ function cancelAsync(handle) { |
+ if (handle < 0) { |
+ clearTimeout(~handle); |
+ } else { |
+ var idx = handle - lastVal; |
+ if (idx >= 0) { |
+ if (!callbacks[idx]) { |
+ throw 'invalid async handle: ' + handle; |
+ } |
+ callbacks[idx] = null; |
+ } |
+ } |
+ } |
+ |
+ function atEndOfMicrotask() { |
+ var len = callbacks.length; |
+ for (var i=0; i<len; i++) { |
+ var cb = callbacks[i]; |
+ if (cb) { |
+ cb(); |
+ } |
+ } |
+ callbacks.splice(0, len); |
+ lastVal += len; |
+ } |
+ |
+ new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask) |
+ .observe(twiddle, {characterData: true}) |
+ ; |
+ |
+ // exports |
+ |
+ return { |
+ run: runAsync, |
+ cancel: cancelAsync |
+ }; |
+ |
+})(); |
+ |