| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/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"><span id='Ext-state-Provider'>/**
 
- </span> * @class Ext.state.Provider
 
-  * <p>Abstract base class for state provider implementations. The provider is responsible
 
-  * for setting values  and extracting values to/from the underlying storage source. The 
 
-  * storage source can vary and the details should be implemented in a subclass. For example
 
-  * a provider could use a server side database or the browser localstorage where supported.</p>
 
-  *
 
-  * <p>This class provides methods for encoding and decoding <b>typed</b> variables including 
 
-  * dates and defines the Provider interface. By default these methods put the value and the
 
-  * type information into a delimited string that can be stored. These should be overridden in 
 
-  * a subclass if you want to change the format of the encoded value and subsequent decoding.</p>
 
-  */
 
- Ext.define('Ext.state.Provider', {
 
-     mixins: {
 
-         observable: 'Ext.util.Observable'
 
-     },
 
-     
 
- <span id='Ext-state-Provider-cfg-prefix'>    /**
 
- </span>     * @cfg {String} prefix A string to prefix to items stored in the underlying state store. 
 
-      * Defaults to <tt>'ext-'</tt>
 
-      */
 
-     prefix: 'ext-',
 
-     
 
-     constructor : function(config){
 
-         config = config || {};
 
-         var me = this;
 
-         Ext.apply(me, config);
 
- <span id='Ext-state-Provider-event-statechange'>        /**
 
- </span>         * @event statechange
 
-          * Fires when a state change occurs.
 
-          * @param {Ext.state.Provider} this This state provider
 
-          * @param {String} key The state key which was changed
 
-          * @param {String} value The encoded value for the state
 
-          */
 
-         me.addEvents("statechange");
 
-         me.state = {};
 
-         me.mixins.observable.constructor.call(me);
 
-     },
 
-     
 
- <span id='Ext-state-Provider-method-get'>    /**
 
- </span>     * Returns the current value for a key
 
-      * @param {String} name The key name
 
-      * @param {Object} defaultValue A default value to return if the key's value is not found
 
-      * @return {Object} The state data
 
-      */
 
-     get : function(name, defaultValue){
 
-         return typeof this.state[name] == "undefined" ?
 
-             defaultValue : this.state[name];
 
-     },
 
- <span id='Ext-state-Provider-method-clear'>    /**
 
- </span>     * Clears a value from the state
 
-      * @param {String} name The key name
 
-      */
 
-     clear : function(name){
 
-         var me = this;
 
-         delete me.state[name];
 
-         me.fireEvent("statechange", me, name, null);
 
-     },
 
- <span id='Ext-state-Provider-method-set'>    /**
 
- </span>     * Sets the value for a key
 
-      * @param {String} name The key name
 
-      * @param {Object} value The value to set
 
-      */
 
-     set : function(name, value){
 
-         var me = this;
 
-         me.state[name] = value;
 
-         me.fireEvent("statechange", me, name, value);
 
-     },
 
- <span id='Ext-state-Provider-method-decodeValue'>    /**
 
- </span>     * Decodes a string previously encoded with {@link #encodeValue}.
 
-      * @param {String} value The value to decode
 
-      * @return {Object} The decoded value
 
-      */
 
-     decodeValue : function(value){
 
-         // a -> Array
 
-         // n -> Number
 
-         // d -> Date
 
-         // b -> Boolean
 
-         // s -> String
 
-         // o -> Object
 
-         // -> Empty (null)
 
-         var me = this,
 
-             re = /^(a|n|d|b|s|o|e)\:(.*)$/,
 
-             matches = re.exec(unescape(value)),
 
-             all,
 
-             type,
 
-             keyValue,
 
-             values,
 
-             vLen,
 
-             v;
 
-             
 
-         if(!matches || !matches[1]){
 
-             return; // non state
 
-         }
 
-         
 
-         type = matches[1];
 
-         value = matches[2];
 
-         switch (type) {
 
-             case 'e':
 
-                 return null;
 
-             case 'n':
 
-                 return parseFloat(value);
 
-             case 'd':
 
-                 return new Date(Date.parse(value));
 
-             case 'b':
 
-                 return (value == '1');
 
-             case 'a':
 
-                 all = [];
 
-                 if(value != ''){
 
-                     values = value.split('^');
 
-                     vLen   = values.length;
 
-                     for (v = 0; v < vLen; v++) {
 
-                         value = values[v];
 
-                         all.push(me.decodeValue(value));
 
-                     }
 
-                 }
 
-                 return all;
 
-            case 'o':
 
-                 all = {};
 
-                 if(value != ''){
 
-                     values = value.split('^');
 
-                     vLen   = values.length;
 
-                     for (v = 0; v < vLen; v++) {
 
-                         value = values[v];
 
-                         keyValue         = value.split('=');
 
-                         all[keyValue[0]] = me.decodeValue(keyValue[1]);
 
-                     }
 
-                 }
 
-                 return all;
 
-            default:
 
-                 return value;
 
-         }
 
-     },
 
- <span id='Ext-state-Provider-method-encodeValue'>    /**
 
- </span>     * Encodes a value including type information.  Decode with {@link #decodeValue}.
 
-      * @param {Object} value The value to encode
 
-      * @return {String} The encoded value
 
-      */
 
-     encodeValue : function(value){
 
-         var flat = '',
 
-             i = 0,
 
-             enc,
 
-             len,
 
-             key;
 
-             
 
-         if (value == null) {
 
-             return 'e:1';    
 
-         } else if(typeof value == 'number') {
 
-             enc = 'n:' + value;
 
-         } else if(typeof value == 'boolean') {
 
-             enc = 'b:' + (value ? '1' : '0');
 
-         } else if(Ext.isDate(value)) {
 
-             enc = 'd:' + value.toGMTString();
 
-         } else if(Ext.isArray(value)) {
 
-             for (len = value.length; i < len; i++) {
 
-                 flat += this.encodeValue(value[i]);
 
-                 if (i != len - 1) {
 
-                     flat += '^';
 
-                 }
 
-             }
 
-             enc = 'a:' + flat;
 
-         } else if (typeof value == 'object') {
 
-             for (key in value) {
 
-                 if (typeof value[key] != 'function' && value[key] !== undefined) {
 
-                     flat += key + '=' + this.encodeValue(value[key]) + '^';
 
-                 }
 
-             }
 
-             enc = 'o:' + flat.substring(0, flat.length-1);
 
-         } else {
 
-             enc = 's:' + value;
 
-         }
 
-         return escape(enc);
 
-     }
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |