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