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