Index: third_party/polymer/v0_8/components/more-routing/params.html |
diff --git a/third_party/polymer/v0_8/components/more-routing/params.html b/third_party/polymer/v0_8/components/more-routing/params.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..71b3d53a619bd46d6cb810162feefc18f93e0e67 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components/more-routing/params.html |
@@ -0,0 +1,57 @@ |
+<!-- |
+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 |
+--> |
+<link rel="import" href="emitter.html"> |
+ |
+<script> |
+(function(scope) { |
+var MoreRouting = scope.MoreRouting = scope.MoreRouting || {}; |
+MoreRouting.Params = Params; |
+ |
+/** |
+ * A collection of route parameters and their values, with nofications. |
+ * |
+ * Params prefixed by `__` are reserved. |
+ * |
+ * @param {!Array<string>} params The keys of the params being managed. |
+ * @param {Params=} parent A parent route's params to inherit. |
+ * @return {Params} |
+ */ |
+function Params(params, parent) { |
+ var model = Object.create(parent || Params.prototype); |
+ // We have a different set of listeners at every level of the hierarchy. |
+ Object.defineProperty(model, '__listeners', {value: []}); |
+ |
+ // We keep all state enclosed within this closure so that inheritance stays |
+ // relatively straightfoward. |
+ var state = {}; |
+ _compile(model, params, state); |
+ |
+ return model; |
+} |
+Params.prototype = Object.create(MoreRouting.Emitter); |
+ |
+// Utility |
+ |
+function _compile(model, params, state) { |
+ params.forEach(function(param) { |
+ Object.defineProperty(model, param, { |
+ get: function() { |
+ return state[param]; |
+ }, |
+ set: function(value) { |
+ if (state[param] === value) return; |
+ state[param] = value; |
+ model.__notify(param, value); |
+ }, |
+ }); |
+ }); |
+} |
+ |
+})(window); |
+</script> |