Index: polymer_1.0.4/bower_components/iron-localstorage/iron-localstorage.html |
diff --git a/polymer_1.0.4/bower_components/iron-localstorage/iron-localstorage.html b/polymer_1.0.4/bower_components/iron-localstorage/iron-localstorage.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d231a6bf9ddbc8adfac4846b3bed6e4e6f9206da |
--- /dev/null |
+++ b/polymer_1.0.4/bower_components/iron-localstorage/iron-localstorage.html |
@@ -0,0 +1,245 @@ |
+<!-- |
+@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"> |
+ |
+<!-- |
+Element access to Web Storage API (window.localStorage). |
+ |
+Keeps `value` property in sync with localStorage. |
+ |
+Value is saved as json by default. |
+ |
+###Usage: |
+ |
+`ls-sample` will automatically save changes to its value. |
+ |
+ <dom-module id="ls-sample"> |
+ <iron-localstorage name="my-app-storage" |
+ value="{{cartoon}}" |
+ on-iron-localstorage-load-empty="initializeDefaultCartoon" |
+ ></iron-localstorage> |
+ </dom-module> |
+ |
+ <script> |
+ Polymer({ |
+ is: 'ls-sample', |
+ properties: { |
+ cartoon: { |
+ type: Object |
+ } |
+ }, |
+ // initializes default if nothing has been stored |
+ initializeDefaultCartoon: function() { |
+ this.cartoon = { |
+ name: "Mickey", |
+ hasEars: true |
+ } |
+ }, |
+ // use path set api to propagate changes to localstorage |
+ makeModifications: function() { |
+ this.set('cartoon.name', "Minions"); |
+ this.set('cartoon.hasEars', false); |
+ } |
+ }); |
+ </script> |
+ |
+###Tech notes: |
+ |
+* * `value.*` is observed, and saved on modifications. You must use |
+property notification methods to modify value for changes to be observed. |
+ |
+* * Set `auto-save-disabled` to prevent automatic saving. |
+ |
+* * Value is saved as JSON by default. |
+ |
+* * To delete a key, set value to null |
+ |
+* Element listens to StorageAPI `storage` event, and will reload upon receiving it. |
+ |
+* **Warning**: do not bind value to sub-properties until Polymer |
+[bug 1550](https://github.com/Polymer/polymer/issues/1550) |
+is resolved. Local storage will be blown away. |
+`<iron-localstorage value="{{foo.bar}}"` will cause **data loss**. |
+ |
+@demo demo/index.html |
+@hero hero.svg |
+--> |
+<dom-module id="iron-localstorage"></dom-module> |
+<script> |
+ |
+ Polymer({ |
+ is: 'iron-localstorage', |
+ |
+ /** |
+ * Fired when value loads from localStorage. |
+ * |
+ * @event iron-localstorage-load |
+ * @param {{externalChange:boolean}} detail - |
+ * externalChange: true if change occured in different window. |
+ */ |
+ |
+ /** |
+ * Fired when loaded value does not exist. |
+ * Event handler can be used to initialize default value. |
+ * |
+ * @event iron-localstorage-load-empty |
+ * @param {{externalChange:boolean}} detail - |
+ * externalChange: true if change occured in different window. |
+ */ |
+ properties: { |
+ /** |
+ * localStorage item key |
+ */ |
+ name: { |
+ type: String, |
+ value: '' |
+ }, |
+ /** |
+ * The data associated with this storage. |
+ * If set to null item will be deleted. |
+ * @type {*} |
+ */ |
+ value: { |
+ type: Object, |
+ notify: true |
+ }, |
+ |
+ /** |
+ * If true: do not convert value to JSON on save/load |
+ */ |
+ useRaw: { |
+ type: Boolean, |
+ value: false |
+ }, |
+ |
+ /** |
+ * Value will not be saved automatically if true. You'll have to do it manually with `save()` |
+ */ |
+ autoSaveDisabled: { |
+ type: Boolean, |
+ value: false |
+ }, |
+ /** |
+ * Last error encountered while saving/loading items |
+ */ |
+ errorMessage: { |
+ type: String, |
+ notify: true |
+ }, |
+ |
+ /** True if value has been loaded */ |
+ _loaded: { |
+ type: Boolean, |
+ value: false |
+ } |
+ }, |
+ |
+ observers: [ |
+ '_debounceReload(name,useRaw)', |
+ '_trySaveValue(autoSaveDisabled)', |
+ '_trySaveValue(value.*)' |
+ ], |
+ |
+ ready: function() { |
+ this._boundHandleStorage = this._handleStorage.bind(this); |
+ }, |
+ |
+ attached: function() { |
+ window.addEventListener('storage', this._boundHandleStorage); |
+ }, |
+ |
+ detached: function() { |
+ window.removeEventListener('storage', this._boundHandleStorage); |
+ }, |
+ |
+ _handleStorage: function(ev) { |
+ if (ev.key == this.name) { |
+ this._load(true); |
+ } |
+ }, |
+ |
+ _trySaveValue: function() { |
+ if (this._doNotSave) { |
+ return; |
+ } |
+ if (this._loaded && !this.autoSaveDisabled) { |
+ this.debounce('save', this.save); |
+ } |
+ }, |
+ |
+ _debounceReload: function() { |
+ this.debounce('reload', this.reload); |
+ }, |
+ |
+ /** |
+ * Loads the value again. Use if you modify |
+ * localStorage using DOM calls, and want to |
+ * keep this element in sync. |
+ */ |
+ reload: function() { |
+ this._loaded = false; |
+ this._load(); |
+ }, |
+ |
+ /** |
+ * loads value from local storage |
+ * @param {boolean=} externalChange true if loading changes from a different window |
+ */ |
+ _load: function(externalChange) { |
+ var v = window.localStorage.getItem(this.name); |
+ |
+ if (v === null) { |
+ this._loaded = true; |
+ this._doNotSave = true; // guard for save watchers |
+ this.value = null; |
+ this._doNotSave = false; |
+ this.fire('iron-localstorage-load-empty', { externalChange: externalChange}); |
+ } else { |
+ if (!this.useRaw) { |
+ try { // parse value as JSON |
+ v = JSON.parse(v); |
+ } catch(x) { |
+ this.errorMessage = "Could not parse local storage value"; |
+ console.error("could not parse local storage value", v); |
+ v = null; |
+ } |
+ } |
+ this._loaded = true; |
+ this._doNotSave = true; |
+ this.value = v; |
+ this._doNotSave = false; |
+ this.fire('iron-localstorage-load', { externalChange: externalChange}); |
+ } |
+ }, |
+ |
+ /** |
+ * Saves the value to localStorage. Call to save if autoSaveDisabled is set. |
+ * If `value` is null, deletes localStorage. |
+ */ |
+ save: function() { |
+ var v = this.useRaw ? this.value : JSON.stringify(this.value); |
+ try { |
+ if (this.value === null) { |
+ window.localStorage.removeItem(this.name); |
+ } else { |
+ window.localStorage.setItem(this.name, /** @type {string} */ (v)); |
+ } |
+ } |
+ catch(ex) { |
+ // Happens in Safari incognito mode, |
+ this.errorMessage = ex.message; |
+ console.error("localStorage could not be saved. Safari incoginito mode?", ex); |
+ } |
+ } |
+ |
+ }); |
+ |
+</script> |