macoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-services
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
/** |
|
* A Provider implementation which saves and retrieves state via the HTML5 localStorage API |
|
* or IE `userData` storage. For details see `Ext.util.LocalStorage`. |
|
* |
|
* If the browser does not support local storage, there will be no attempt to read the state. |
|
* Before creating this class, check {@link Ext.util.LocalStorage#supported}. |
|
*/ |
|
Ext.define('Ext.state.LocalStorageProvider', { |
|
extend: 'Ext.state.Provider', |
|
requires: [ |
|
'Ext.util.LocalStorage' |
|
], |
|
|
|
alias: 'state.localstorage', |
|
|
|
constructor: function () { |
|
var me = this; |
|
|
|
me.callParent(arguments); |
|
|
|
me.store = me.getStorageObject(); |
|
if (me.store) { |
|
me.state = me.readLocalStorage(); |
|
} else { |
|
me.state = {}; |
|
} |
|
}, |
|
|
|
readLocalStorage: function () { |
|
var store = this.store, |
|
data = {}, |
|
keys = store.getKeys(), |
|
i = keys.length, |
|
key; |
|
|
|
while (i--) { |
|
key = keys[i]; |
|
data[key] = this.decodeValue(store.getItem(key)); |
|
} |
|
|
|
return data; |
|
}, |
|
|
|
set: function (name, value) { |
|
var me = this; |
|
|
|
me.clear(name); |
|
if (value != null) { // !== undefined && !== null |
|
me.store.setItem(name, me.encodeValue(value)); |
|
me.callParent(arguments); |
|
} |
|
}, |
|
|
|
// private |
|
clear: function (name) { |
|
this.store.removeItem(name); |
|
this.callParent(arguments); |
|
}, |
|
|
|
getStorageObject: function () { |
|
var prefix = this.prefix, |
|
id = prefix, |
|
n = id.length - 1; |
|
|
|
if (id.charAt(n) === '-') { |
|
id = id.substring(0, n); |
|
} |
|
|
|
return new Ext.util.LocalStorage({ |
|
id: id, |
|
prefix: prefix |
|
}); |
|
} |
|
});
|
|
|