CookieProvider.html
4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>The source code</title>
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
<style type="text/css">
.highlight { display: block; background-color: #ddd; }
</style>
<script type="text/javascript">
function highlight() {
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
}
</script>
</head>
<body onload="prettyPrint(); highlight();">
<pre class="prettyprint lang-js"><span id='Ext-state-CookieProvider'>/**
</span> * A Provider implementation which saves and retrieves state via cookies. The CookieProvider supports the usual cookie
* options, such as:
*
* - {@link #path}
* - {@link #expires}
* - {@link #domain}
* - {@link #secure}
*
* Example:
*
* var cp = Ext.create('Ext.state.CookieProvider', {
* path: "/cgi-bin/",
* expires: new Date(new Date().getTime()+(1000*60*60*24*30)), //30 days
* domain: "sencha.com"
* });
*
* Ext.state.Manager.setProvider(cp);
*
*/
Ext.define('Ext.state.CookieProvider', {
extend: 'Ext.state.Provider',
<span id='Ext-state-CookieProvider-cfg-path'> /**
</span> * @cfg {String} path
* The path for which the cookie is active. Defaults to root '/' which makes it active for all pages in the site.
*/
<span id='Ext-state-CookieProvider-cfg-expires'> /**
</span> * @cfg {Date} expires
* The cookie expiration date. Defaults to 7 days from now.
*/
<span id='Ext-state-CookieProvider-cfg-domain'> /**
</span> * @cfg {String} domain
* The domain to save the cookie for. Note that you cannot specify a different domain than your page is on, but you can
* specify a sub-domain, or simply the domain itself like 'sencha.com' to include all sub-domains if you need to access
* cookies across different sub-domains. Defaults to null which uses the same domain the page is running on including
* the 'www' like 'www.sencha.com'.
*/
<span id='Ext-state-CookieProvider-cfg-secure'> /**
</span> * @cfg {Boolean} [secure=false]
* True if the site is using SSL
*/
<span id='Ext-state-CookieProvider-method-constructor'> /**
</span> * Creates a new CookieProvider.
* @param {Object} [config] Config object.
*/
constructor : function(config){
var me = this;
me.path = "/";
me.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); //7 days
me.domain = null;
me.secure = false;
me.callParent(arguments);
me.state = me.readCookies();
},
// private
set : function(name, value){
var me = this;
if(typeof value == "undefined" || value === null){
me.clear(name);
return;
}
me.setCookie(name, value);
me.callParent(arguments);
},
// private
clear : function(name){
this.clearCookie(name);
this.callParent(arguments);
},
// private
readCookies : function(){
var cookies = {},
c = document.cookie + ";",
re = /\s?(.*?)=(.*?);/g,
prefix = this.prefix,
len = prefix.length,
matches,
name,
value;
while((matches = re.exec(c)) != null){
name = matches[1];
value = matches[2];
if (name && name.substring(0, len) == prefix){
cookies[name.substr(len)] = this.decodeValue(value);
}
}
return cookies;
},
// private
setCookie : function(name, value){
var me = this;
document.cookie = me.prefix + name + "=" + me.encodeValue(value) +
((me.expires == null) ? "" : ("; expires=" + me.expires.toGMTString())) +
((me.path == null) ? "" : ("; path=" + me.path)) +
((me.domain == null) ? "" : ("; domain=" + me.domain)) +
((me.secure == true) ? "; secure" : "");
},
// private
clearCookie : function(name){
var me = this;
document.cookie = me.prefix + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
((me.path == null) ? "" : ("; path=" + me.path)) +
((me.domain == null) ? "" : ("; domain=" + me.domain)) +
((me.secure == true) ? "; secure" : "");
}
});
</pre>
</body>
</html>