Форк Rambox
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

/**
* 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
});
}
});