/**
* @class Ext.state.LocalStorageProvider
* @extends Ext.state.Provider
* A Provider implementation which saves and retrieves state via the HTML5 localStorage object.
* If the browser does not support local storage, an exception will be thrown upon instantiating
* this class.
*/
Ext.define('Ext.state.LocalStorageProvider', {
/* Begin Definitions */
extend: 'Ext.state.Provider',
alias: 'state.localstorage',
/* End Definitions */
constructor: function(){
var me = this;
me.callParent(arguments);
me.store = me.getStorageObject();
me.state = me.readLocalStorage();
},
readLocalStorage: function(){
var store = this.store,
i = 0,
len = store.length,
prefix = this.prefix,
prefixLen = prefix.length,
data = {},
key;
for (; i < len; ++i) {
key = store.key(i);
if (key.substring(0, prefixLen) == prefix) {
data[key.substr(prefixLen)] = this.decodeValue(store.getItem(key));
}
}
return data;
},
set : function(name, value){
var me = this;
me.clear(name);
if (typeof value == "undefined" || value === null) {
return;
}
me.store.setItem(me.prefix + name, me.encodeValue(value));
me.callParent(arguments);
},
// private
clear : function(name){
this.store.removeItem(this.prefix + name);
this.callParent(arguments);
},
getStorageObject: function(){
try {
var supports = 'localStorage' in window && window['localStorage'] !== null;
if (supports) {
return window.localStorage;
}
} catch (e) {
return false;
}
//<debug>
Ext.Error.raise('LocalStorage is not supported by the current browser');
//</debug>
}
});