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