Index: third_party/polymer/v0_8/components-chromium/iron-localstorage/iron-localstorage-extracted.js |
diff --git a/third_party/polymer/v0_8/components-chromium/iron-localstorage/iron-localstorage-extracted.js b/third_party/polymer/v0_8/components-chromium/iron-localstorage/iron-localstorage-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..86b5c506f67360bd1cb1509739043bafac262546 |
--- /dev/null |
+++ b/third_party/polymer/v0_8/components-chromium/iron-localstorage/iron-localstorage-extracted.js |
@@ -0,0 +1,155 @@ |
+ |
+ |
+ Polymer({ |
+ is: 'iron-localstorage', |
+ |
+ /** |
+ * Fired when value loads from localStorage. |
+ * |
+ * @param {Object} detail |
+ * @param {Boolean} detail.externalChange true if change occured in different window |
+ * @event iron-localstorage-load |
+ */ |
+ |
+ /** |
+ * Fired when loaded value is null. |
+ * You can use event handler to initialize default value. |
+ * |
+ * @event iron-localstorage-load-empty |
+ */ |
+ properties: { |
+ /** |
+ * The key to the data stored in localStorage. |
+ */ |
+ name: { |
+ type: String, |
+ value: '' |
+ }, |
+ /** |
+ * The data associated with this storage. |
+ * If value is set to null, and storage is in useRaw mode, item will be deleted |
+ */ |
+ value: { |
+ type: Object, |
+ notify: true |
+ }, |
+ |
+ /** |
+ * Value is stored and retrieved without JSON parse if true |
+ */ |
+ useRaw: { |
+ type: Boolean, |
+ value: false |
+ }, |
+ |
+ /** |
+ * Auto save is disabled if true. Default to false. |
+ */ |
+ autoSaveDisabled: { |
+ type: Boolean, |
+ value: false |
+ }, |
+ /** |
+ * Last error encountered while saving/loading items. Null otherwise |
+ */ |
+ errorMessage: { |
+ type: String, |
+ notify: true |
+ }, |
+ /* |
+ * True if value was loaded |
+ */ |
+ _loaded: { |
+ type: Boolean, |
+ value: false |
+ } |
+ }, |
+ |
+ observers: [ |
+ 'reload(name,useRaw)', |
+ '_trySaveValue(value, _loaded, autoSaveDisabled)' |
+ ], |
+ |
+ 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(value, _loaded, autoSaveDisabled) { |
+ if (this._justLoaded) { // guard against saving after _load() |
+ this._justLoaded = false; |
+ return; |
+ } |
+ if (_loaded && !autoSaveDisabled) { |
+ this.save(); |
+ } |
+ }, |
+ |
+ /** |
+ * Loads the value again. Use if you modify |
+ * localStorage using DOM calls, and want to |
+ * keep this element in sync. |
+ */ |
+ reload: function() { |
+ this._load(); |
+ }, |
+ |
+ /** |
+ * loads value from local storage |
+ * @param {Boolean} externalChange true if loading changes from a different window |
+ */ |
+ _load: function(externalChange) { |
+ var v = localStorage.getItem(this.name); |
+ |
+ if (v === null) { |
+ this.fire('iron-localstorage-load-empty'); |
+ } else if (!this.useRaw) { |
+ try { |
+ v = JSON.parse(v); |
+ } catch(x) { |
+ this.errorMessage = "Could not parse local storage value"; |
+ console.error("could not parse local storage value", v); |
+ } |
+ } |
+ |
+ this._justLoaded = true; |
+ this._loaded = true; |
+ this.value = v; |
+ 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) { |
+ localStorage.removeItem(this.name); |
+ } else { |
+ localStorage.setItem(this.name, v); |
+ } |
+ } |
+ catch(ex) { |
+ // Happens in Safari incognito mode, |
+ this.errorMessage = ex.message; |
+ console.error("localStorage could not be saved. Safari incoginito mode?", ex); |
+ } |
+ } |
+ |
+ }); |
+ |