--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>The source code</title>
+ <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript" src="../prettify/prettify.js"></script>
+ <style type="text/css">
+ .highlight { display: block; background-color: #ddd; }
+ </style>
+ <script type="text/javascript">
+ function highlight() {
+ document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
+ }
+ </script>
+</head>
+<body onload="prettyPrint(); highlight();">
+ <pre class="prettyprint lang-js">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>
+ }
+});
+</pre>
+</body>
+</html>