Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / src / state / LocalStorageProvider.js
1 Ext.define('Ext.state.LocalStorageProvider', {
2     /* Begin Definitions */
3     
4     extend: 'Ext.state.Provider',
5     
6     alias: 'state.localstorage',
7     
8     /* End Definitions */
9    
10     constructor: function(){
11         var me = this;
12         me.callParent(arguments);
13         me.store = me.getStorageObject();
14         me.state = me.readLocalStorage();
15     },
16     
17     readLocalStorage: function(){
18         var store = this.store,
19             i = 0,
20             len = store.length,
21             prefix = this.prefix,
22             prefixLen = prefix.length,
23             data = {},
24             key;
25             
26         for (; i < len; ++i) {
27             key = store.key(i);
28             if (key.substring(0, prefixLen) == prefix) {
29                 data[key.substr(prefixLen)] = this.decodeValue(store.getItem(key));
30             }            
31         }
32         return data;
33     },
34     
35     set : function(name, value){
36         var me = this;
37         
38         me.clear(name);
39         if (typeof value == "undefined" || value === null) {
40             return;
41         }
42         me.store.setItem(me.prefix + name, me.encodeValue(value));
43         me.callParent(arguments);
44     },
45
46     // private
47     clear : function(name){
48         this.store.removeItem(this.prefix + name);
49         this.callParent(arguments);
50     },
51     
52     getStorageObject: function(){
53         try {
54             var supports = 'localStorage' in window && window['localStorage'] !== null;
55             if (supports) {
56                 return window.localStorage;
57             }
58         } catch (e) {
59             return false;
60         }
61         //<debug>
62         Ext.Error.raise('LocalStorage is not supported by the current browser');
63         //</debug>
64     }    
65 });