Service workers: Allow HTTPS pages arrived at via HTTP redirect to use SW
[chromium-blink-merge.git] / third_party / polymer / v1_0 / components-chromium / more-routing / params-extracted.js
blobb23dc4bcaef0d5049f4bc3bdafd5c0c38d2604b5
1 (function(scope) {
2 var MoreRouting = scope.MoreRouting = scope.MoreRouting || {};
3 MoreRouting.Params = Params;
5 /**
6  * A collection of route parameters and their values, with nofications.
7  *
8  * Params prefixed by `__` are reserved.
9  *
10  * @param {!Array<string>} params The keys of the params being managed.
11  * @param {Params=} parent A parent route's params to inherit.
12  * @return {Params}
13  */
14 function Params(params, parent) {
15   var model = Object.create(parent || Params.prototype);
16   // We have a different set of listeners at every level of the hierarchy.
17   Object.defineProperty(model, '__listeners', {value: []});
19   // We keep all state enclosed within this closure so that inheritance stays
20   // relatively straightfoward.
21   var state = {};
22   _compile(model, params, state);
24   return model;
26 Params.prototype = Object.create(MoreRouting.Emitter);
28 // Utility
30 function _compile(model, params, state) {
31   params.forEach(function(param) {
32     Object.defineProperty(model, param, {
33       get: function() {
34         return state[param];
35       },
36       set: function(value) {
37         if (state[param] === value) return;
38         state[param] = value;
39         model.__notify(param, value);
40       },
41     });
42   });
45 })(window);