Index: third_party/polymer/v0_8/components-chromium/more-routing/emitter-extracted.js |
diff --git a/third_party/polymer/v0_8/components-chromium/more-routing/emitter-extracted.js b/third_party/polymer/v0_8/components-chromium/more-routing/emitter-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..48461026da06b49bf7ddad91d10418f1ef3c5fe5 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components-chromium/more-routing/emitter-extracted.js |
@@ -0,0 +1,68 @@ |
+ |
+(function(scope) { |
+var MoreRouting = scope.MoreRouting = scope.MoreRouting || {}; |
+MoreRouting.Emitter = Object.create(null); // Minimal set of properties. |
+ |
+/** |
+ * A dumb prototype that provides very simple event subscription. |
+ * |
+ * You are responsible for initializing `__listeners` as an array on objects |
+ * that make use of this. |
+ */ |
+Object.defineProperties(MoreRouting.Emitter, { |
+ |
+ /** |
+ * Registers a callback that will be called each time any parameter managed by |
+ * this object (or its parents) have changed. |
+ * |
+ * @param {!Function} callback |
+ * @return {{close: function()}} |
+ */ |
+ __subscribe: { |
+ value: function __subscribe(callback) { |
+ this.__listeners.push(callback); |
+ |
+ return { |
+ close: this.__unsubscribe.bind(this, callback), |
+ }; |
+ }, |
+ }, |
+ |
+ /** |
+ * Unsubscribes a previously registered callback. |
+ * |
+ * @param {!Function} callback |
+ */ |
+ __unsubscribe: { |
+ value: function __unsubscribe(callback) { |
+ var index = this.__listeners.indexOf(callback); |
+ if (index < 0) { |
+ console.warn(this, 'attempted unsubscribe of unregistered listener:', callback); |
+ return; |
+ } |
+ this.__listeners.splice(index, 1); |
+ }, |
+ }, |
+ |
+ /** |
+ * Notifies subscribed callbacks. |
+ */ |
+ __notify: { |
+ value: function __notify(key, value) { |
+ if (this.__silent) return; |
+ var args = Array.prototype.slice.call(arguments); |
+ // Notify listeners on parents first. |
+ var parent = Object.getPrototypeOf(this); |
+ if (parent && parent.__notify && parent.__listeners) { |
+ parent.__notify.apply(parent, args); |
+ } |
+ |
+ this.__listeners.forEach(function(listener) { |
+ listener.apply(null, args); |
+ }.bind(this)); |
+ }, |
+ }, |
+ |
+}); |
+ |
+})(window); |