Index: third_party/polymer/v0_8/components-chromium/more-routing/params-extracted.js |
diff --git a/third_party/polymer/v0_8/components-chromium/more-routing/params-extracted.js b/third_party/polymer/v0_8/components-chromium/more-routing/params-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9a9a1ee3d3cf494f19843f91a7dbdeb4c1e0b6d5 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components-chromium/more-routing/params-extracted.js |
@@ -0,0 +1,46 @@ |
+ |
+(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); |