Upgrade to ExtJS 3.1.0 - Released 12/16/2009
[extjs.git] / docs / source / Provider1.html
1 <html>\r
2 <head>\r
3   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    \r
4   <title>The source code</title>\r
5     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
6     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
7 </head>\r
8 <body  onload="prettyPrint();">\r
9     <pre class="prettyprint lang-js"><div id="cls-Ext.state.Provider"></div>/**
10  * @class Ext.state.Provider
11  * Abstract base class for state provider implementations. This class provides methods
12  * for encoding and decoding <b>typed</b> variables including dates and defines the
13  * Provider interface.
14  */
15 Ext.state.Provider = function(){
16     <div id="event-Ext.state.Provider-statechange"></div>/**
17      * @event statechange
18      * Fires when a state change occurs.
19      * @param {Provider} this This state provider
20      * @param {String} key The state key which was changed
21      * @param {String} value The encoded value for the state
22      */
23     this.addEvents("statechange");
24     this.state = {};
25     Ext.state.Provider.superclass.constructor.call(this);
26 };
27 Ext.extend(Ext.state.Provider, Ext.util.Observable, {
28     <div id="method-Ext.state.Provider-get"></div>/**
29      * Returns the current value for a key
30      * @param {String} name The key name
31      * @param {Mixed} defaultValue A default value to return if the key's value is not found
32      * @return {Mixed} The state data
33      */
34     get : function(name, defaultValue){
35         return typeof this.state[name] == "undefined" ?
36             defaultValue : this.state[name];
37     },
38
39     <div id="method-Ext.state.Provider-clear"></div>/**
40      * Clears a value from the state
41      * @param {String} name The key name
42      */
43     clear : function(name){
44         delete this.state[name];
45         this.fireEvent("statechange", this, name, null);
46     },
47
48     <div id="method-Ext.state.Provider-set"></div>/**
49      * Sets the value for a key
50      * @param {String} name The key name
51      * @param {Mixed} value The value to set
52      */
53     set : function(name, value){
54         this.state[name] = value;
55         this.fireEvent("statechange", this, name, value);
56     },
57
58     <div id="method-Ext.state.Provider-decodeValue"></div>/**
59      * Decodes a string previously encoded with {@link #encodeValue}.
60      * @param {String} value The value to decode
61      * @return {Mixed} The decoded value
62      */
63     decodeValue : function(cookie){
64         var re = /^(a|n|d|b|s|o)\:(.*)$/;
65         var matches = re.exec(unescape(cookie));
66         if(!matches || !matches[1]) return; // non state cookie
67         var type = matches[1];
68         var v = matches[2];
69         switch(type){
70             case "n":
71                 return parseFloat(v);
72             case "d":
73                 return new Date(Date.parse(v));
74             case "b":
75                 return (v == "1");
76             case "a":
77                 var all = [];
78                 if(v != ''){
79                     Ext.each(v.split('^'), function(val){
80                         all.push(this.decodeValue(val));
81                     }, this);
82                 }
83                 return all;
84            case "o":
85                 var all = {};
86                 if(v != ''){
87                     Ext.each(v.split('^'), function(val){
88                         var kv = val.split('=');
89                         all[kv[0]] = this.decodeValue(kv[1]);
90                     }, this);
91                 }
92                 return all;
93            default:
94                 return v;
95         }
96     },
97
98     <div id="method-Ext.state.Provider-encodeValue"></div>/**
99      * Encodes a value including type information.  Decode with {@link #decodeValue}.
100      * @param {Mixed} value The value to encode
101      * @return {String} The encoded value
102      */
103     encodeValue : function(v){
104         var enc;
105         if(typeof v == "number"){
106             enc = "n:" + v;
107         }else if(typeof v == "boolean"){
108             enc = "b:" + (v ? "1" : "0");
109         }else if(Ext.isDate(v)){
110             enc = "d:" + v.toGMTString();
111         }else if(Ext.isArray(v)){
112             var flat = "";
113             for(var i = 0, len = v.length; i < len; i++){
114                 flat += this.encodeValue(v[i]);
115                 if(i != len-1) flat += "^";
116             }
117             enc = "a:" + flat;
118         }else if(typeof v == "object"){
119             var flat = "";
120             for(var key in v){
121                 if(typeof v[key] != "function" && v[key] !== undefined){
122                     flat += key + "=" + this.encodeValue(v[key]) + "^";
123                 }
124             }
125             enc = "o:" + flat.substring(0, flat.length-1);
126         }else{
127             enc = "s:" + v;
128         }
129         return escape(enc);
130     }
131 });
132 </pre>    \r
133 </body>\r
134 </html>