1 <html><head><title>../roojs1/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">/*
4 * Copyright(c) 2006-2007, Ext JS, LLC.
6 * Originally Released Under LGPL - original licence link has changed is not relivant.
9 * <script type="text/javascript">
13 * @class Roo.state.Provider
14 * Abstract base class for state provider implementations. This class provides methods
15 * for encoding and decoding <b>typed</b> variables including dates and defines the
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">/**
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
26 </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
27 </span><span class="jsdoc-string">"statechange"</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">);
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
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">"undefined" </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">];
44 </span><span class="jsdoc-comment">/**
45 * Clears a value from the state
46 * @param {String} name The key name
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">"statechange"</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">);
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
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">"statechange"</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">);
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
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]) </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// non state cookie
72 </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];
73 </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];
74 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">){
75 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">"n"</span><span class="jsdoc-syntax">:
76 </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">);
77 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">"d"</span><span class="jsdoc-syntax">:
78 </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">));
79 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">"b"</span><span class="jsdoc-syntax">:
80 </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">"1"</span><span class="jsdoc-syntax">);
81 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">"a"</span><span class="jsdoc-syntax">:
82 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">all </span><span class="jsdoc-syntax">= [];
83 </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">"^"</span><span class="jsdoc-syntax">);
84 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
85 </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">]));
87 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">all</span><span class="jsdoc-syntax">;
88 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">"o"</span><span class="jsdoc-syntax">:
89 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">all </span><span class="jsdoc-syntax">= {};
90 </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">"^"</span><span class="jsdoc-syntax">);
91 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
92 </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">"="</span><span class="jsdoc-syntax">);
93 </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]);
95 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">all</span><span class="jsdoc-syntax">;
96 </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
97 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
101 </span><span class="jsdoc-comment">/**
102 * Encodes a value including type information. Decode with {@link #decodeValue}.
103 * @param {Mixed} value The value to encode
104 * @return {String} The encoded value
106 </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">){
107 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">enc</span><span class="jsdoc-syntax">;
108 </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">"number"</span><span class="jsdoc-syntax">){
109 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"n:" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
110 }</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">"boolean"</span><span class="jsdoc-syntax">){
111 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"b:" </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">"1" </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"0"</span><span class="jsdoc-syntax">);
112 }</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">){
113 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"d:" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">v.toGMTString</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">Array</span><span class="jsdoc-syntax">){
115 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">flat </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">;
116 </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">< </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
117 </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">]);
118 </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) </span><span class="jsdoc-var">flat </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">"^"</span><span class="jsdoc-syntax">;
120 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"a:" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">flat</span><span class="jsdoc-syntax">;
121 }</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">"object"</span><span class="jsdoc-syntax">){
122 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">flat </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">;
123 </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">){
124 </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">"function"</span><span class="jsdoc-syntax">){
125 </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">"=" </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">"^"</span><span class="jsdoc-syntax">;
128 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"o:" </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);
129 }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
130 </span><span class="jsdoc-var">enc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"s:" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
132 </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">);
136 </span></code></body></html>