1 | define(["./_base/kernel", "./regexp"], function(dojo, regexp){ |
---|
2 | |
---|
3 | // module: |
---|
4 | // dojo/cookie |
---|
5 | |
---|
6 | /*===== |
---|
7 | var __cookieProps = { |
---|
8 | // expires: Date|String|Number? |
---|
9 | // If a number, the number of days from today at which the cookie |
---|
10 | // will expire. If a date, the date past which the cookie will expire. |
---|
11 | // If expires is in the past, the cookie will be deleted. |
---|
12 | // If expires is omitted or is 0, the cookie will expire when the browser closes. |
---|
13 | // path: String? |
---|
14 | // The path to use for the cookie. |
---|
15 | // domain: String? |
---|
16 | // The domain to use for the cookie. |
---|
17 | // secure: Boolean? |
---|
18 | // Whether to only send the cookie on secure connections |
---|
19 | }; |
---|
20 | =====*/ |
---|
21 | |
---|
22 | |
---|
23 | dojo.cookie = function(/*String*/name, /*String?*/ value, /*__cookieProps?*/ props){ |
---|
24 | // summary: |
---|
25 | // Get or set a cookie. |
---|
26 | // description: |
---|
27 | // If one argument is passed, returns the value of the cookie |
---|
28 | // For two or more arguments, acts as a setter. |
---|
29 | // name: |
---|
30 | // Name of the cookie |
---|
31 | // value: |
---|
32 | // Value for the cookie |
---|
33 | // props: |
---|
34 | // Properties for the cookie |
---|
35 | // example: |
---|
36 | // set a cookie with the JSON-serialized contents of an object which |
---|
37 | // will expire 5 days from now: |
---|
38 | // | require(["dojo/cookie", "dojo/json"], function(cookie, json){ |
---|
39 | // | cookie("configObj", json.stringify(config, {expires: 5 })); |
---|
40 | // | }); |
---|
41 | // |
---|
42 | // example: |
---|
43 | // de-serialize a cookie back into a JavaScript object: |
---|
44 | // | require(["dojo/cookie", "dojo/json"], function(cookie, json){ |
---|
45 | // | config = json.parse(cookie("configObj")); |
---|
46 | // | }); |
---|
47 | // |
---|
48 | // example: |
---|
49 | // delete a cookie: |
---|
50 | // | require(["dojo/cookie"], function(cookie){ |
---|
51 | // | cookie("configObj", null, {expires: -1}); |
---|
52 | // | }); |
---|
53 | var c = document.cookie, ret; |
---|
54 | if(arguments.length == 1){ |
---|
55 | var matches = c.match(new RegExp("(?:^|; )" + regexp.escapeString(name) + "=([^;]*)")); |
---|
56 | ret = matches ? decodeURIComponent(matches[1]) : undefined; |
---|
57 | }else{ |
---|
58 | props = props || {}; |
---|
59 | // FIXME: expires=0 seems to disappear right away, not on close? (FF3) Change docs? |
---|
60 | var exp = props.expires; |
---|
61 | if(typeof exp == "number"){ |
---|
62 | var d = new Date(); |
---|
63 | d.setTime(d.getTime() + exp*24*60*60*1000); |
---|
64 | exp = props.expires = d; |
---|
65 | } |
---|
66 | if(exp && exp.toUTCString){ props.expires = exp.toUTCString(); } |
---|
67 | |
---|
68 | value = encodeURIComponent(value); |
---|
69 | var updatedCookie = name + "=" + value, propName; |
---|
70 | for(propName in props){ |
---|
71 | updatedCookie += "; " + propName; |
---|
72 | var propValue = props[propName]; |
---|
73 | if(propValue !== true){ updatedCookie += "=" + propValue; } |
---|
74 | } |
---|
75 | document.cookie = updatedCookie; |
---|
76 | } |
---|
77 | return ret; // String|undefined |
---|
78 | }; |
---|
79 | |
---|
80 | dojo.cookie.isSupported = function(){ |
---|
81 | // summary: |
---|
82 | // Use to determine if the current browser supports cookies or not. |
---|
83 | // |
---|
84 | // Returns true if user allows cookies. |
---|
85 | // Returns false if user doesn't allow cookies. |
---|
86 | |
---|
87 | if(!("cookieEnabled" in navigator)){ |
---|
88 | this("__djCookieTest__", "CookiesAllowed"); |
---|
89 | navigator.cookieEnabled = this("__djCookieTest__") == "CookiesAllowed"; |
---|
90 | if(navigator.cookieEnabled){ |
---|
91 | this("__djCookieTest__", "", {expires: -1}); |
---|
92 | } |
---|
93 | } |
---|
94 | return navigator.cookieEnabled; |
---|
95 | }; |
---|
96 | |
---|
97 | return dojo.cookie; |
---|
98 | }); |
---|