Index: third_party/polymer/v0_8/components/more-routing/emitter.html |
diff --git a/third_party/polymer/v0_8/components/more-routing/emitter.html b/third_party/polymer/v0_8/components/more-routing/emitter.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5c2aa0e381aa637380982f55095fa6780621fb26 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components/more-routing/emitter.html |
@@ -0,0 +1,77 @@ |
+<!-- |
+Copyright (c) 2015 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 |
+--> |
+<script> |
+(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); |
+</script> |