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