Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(832)

Side by Side Diff: third_party/polymer/v0_8/components-chromium/iron-localstorage/iron-localstorage-extracted.js

Issue 1162563004: Upgrade to 1.0 and switch clients to dom-repeat where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a layout import and remove the gzipped webanimation in reproduce.sh Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1
2
3 Polymer({
4 is: 'iron-localstorage',
5
6 /**
7 * Fired when value loads from localStorage.
8 *
9 * @param {Object} detail
10 * @param {Boolean} detail.externalChange true if change occured in differen t window
11 * @event iron-localstorage-load
12 */
13
14 /**
15 * Fired when loaded value is null.
16 * You can use event handler to initialize default value.
17 *
18 * @event iron-localstorage-load-empty
19 */
20 properties: {
21 /**
22 * The key to the data stored in localStorage.
23 */
24 name: {
25 type: String,
26 value: ''
27 },
28 /**
29 * The data associated with this storage.
30 * If value is set to null, and storage is in useRaw mode, item will be de leted
31 */
32 value: {
33 type: Object,
34 notify: true
35 },
36
37 /**
38 * Value is stored and retrieved without JSON parse if true
39 */
40 useRaw: {
41 type: Boolean,
42 value: false
43 },
44
45 /**
46 * Auto save is disabled if true. Default to false.
47 */
48 autoSaveDisabled: {
49 type: Boolean,
50 value: false
51 },
52 /**
53 * Last error encountered while saving/loading items. Null otherwise
54 */
55 errorMessage: {
56 type: String,
57 notify: true
58 },
59 /*
60 * True if value was loaded
61 */
62 _loaded: {
63 type: Boolean,
64 value: false
65 }
66 },
67
68 observers: [
69 'reload(name,useRaw)',
70 '_trySaveValue(value, _loaded, autoSaveDisabled)'
71 ],
72
73 ready: function() {
74 this._boundHandleStorage = this._handleStorage.bind(this);
75 },
76
77 attached: function() {
78 window.addEventListener('storage', this._boundHandleStorage);
79 },
80
81 detached: function() {
82 window.removeEventListener('storage', this._boundHandleStorage);
83 },
84
85 _handleStorage: function(ev) {
86 if (ev.key == this.name) {
87 this._load(true);
88 }
89 },
90
91 _trySaveValue: function(value, _loaded, autoSaveDisabled) {
92 if (this._justLoaded) { // guard against saving after _load()
93 this._justLoaded = false;
94 return;
95 }
96 if (_loaded && !autoSaveDisabled) {
97 this.save();
98 }
99 },
100
101 /**
102 * Loads the value again. Use if you modify
103 * localStorage using DOM calls, and want to
104 * keep this element in sync.
105 */
106 reload: function() {
107 this._load();
108 },
109
110 /**
111 * loads value from local storage
112 * @param {Boolean} externalChange true if loading changes from a different window
113 */
114 _load: function(externalChange) {
115 var v = localStorage.getItem(this.name);
116
117 if (v === null) {
118 this.fire('iron-localstorage-load-empty');
119 } else if (!this.useRaw) {
120 try {
121 v = JSON.parse(v);
122 } catch(x) {
123 this.errorMessage = "Could not parse local storage value";
124 console.error("could not parse local storage value", v);
125 }
126 }
127
128 this._justLoaded = true;
129 this._loaded = true;
130 this.value = v;
131 this.fire('iron-localstorage-load', { externalChange: externalChange});
132 },
133
134 /**
135 * Saves the value to localStorage. Call to save if autoSaveDisabled is set.
136 * If `value` is null, deletes localStorage.
137 */
138 save: function() {
139 var v = this.useRaw ? this.value : JSON.stringify(this.value);
140 try {
141 if (this.value === null) {
142 localStorage.removeItem(this.name);
143 } else {
144 localStorage.setItem(this.name, v);
145 }
146 }
147 catch(ex) {
148 // Happens in Safari incognito mode,
149 this.errorMessage = ex.message;
150 console.error("localStorage could not be saved. Safari incoginito mode?" , ex);
151 }
152 }
153
154 });
155
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698