UNPKG

spincycle

Version:

A reactive message router and object manager that lets clients subscribe to object property changes on the server

90 lines (83 loc) 2.5 kB
<!-- @license 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="../polymer/polymer.html"> <script> 'use strict'; Polymer({ is: 'iron-query-params', properties: { paramsString: { type: String, notify: true, observer: 'paramsStringChanged', }, paramsObject: { type: Object, notify: true, value: function() { return {}; } }, _dontReact: { type: Boolean, value: false } }, hostAttributes: { hidden: true }, observers: [ 'paramsObjectChanged(paramsObject.*)' ], paramsStringChanged: function() { this._dontReact = true; this.paramsObject = this._decodeParams(this.paramsString); this._dontReact = false; }, paramsObjectChanged: function() { if (this._dontReact) { return; } this.paramsString = this._encodeParams(this.paramsObject) .replace(/%3F/g, '?').replace(/%2F/g, '/'); }, _encodeParams: function(params) { var encodedParams = []; for (var key in params) { var value = params[key]; if (value === '') { encodedParams.push(encodeURIComponent(key)); } else if (value) { encodedParams.push( encodeURIComponent(key) + '=' + encodeURIComponent(value.toString()) ); } } return encodedParams.join('&'); }, _decodeParams: function(paramString) { var params = {}; // Work around a bug in decodeURIComponent where + is not // converted to spaces: paramString = (paramString || '').replace(/\+/g, '%20'); var paramList = paramString.split('&'); for (var i = 0; i < paramList.length; i++) { var param = paramList[i].split('='); if (param[0]) { params[decodeURIComponent(param[0])] = decodeURIComponent(param[1] || ''); } } return params; } }); </script>