]> git.ipfire.org Git - thirdparty/git.git/blame - gitweb/static/js/lib/cookies.js
correct a few doubled-word nits in comments and documentation
[thirdparty/git.git] / gitweb / static / js / lib / cookies.js
CommitLineData
fcce886b
JN
1/**
2 * @fileOverview Accessing cookies from JavaScript
3 * @license GPLv2 or later
4 */
5
6/*
7 * Based on subsection "Cookies in JavaScript" of "Professional
8 * JavaScript for Web Developers" by Nicholas C. Zakas and cookie
9 * plugin from jQuery (dual licensed under the MIT and GPL licenses)
10 */
11
12
13/**
14 * Create a cookie with the given name and value,
15 * and other optional parameters.
16 *
17 * @example
18 * setCookie('foo', 'bar'); // will be deleted when browser exits
19 * setCookie('foo', 'bar', { expires: new Date(Date.parse('Jan 1, 2012')) });
20 * setCookie('foo', 'bar', { expires: 7 }); // 7 days = 1 week
21 * setCookie('foo', 'bar', { expires: 14, path: '/' });
22 *
23 * @param {String} sName: Unique name of a cookie (letters, numbers, underscores).
24 * @param {String} sValue: The string value stored in a cookie.
25 * @param {Object} [options] An object literal containing key/value pairs
26 * to provide optional cookie attributes.
27 * @param {String|Number|Date} [options.expires] Either literal string to be used as cookie expires,
28 * or an integer specifying the expiration date from now on in days,
29 * or a Date object to be used as cookie expiration date.
30 * If a negative value is specified or a date in the past),
31 * the cookie will be deleted.
32 * If set to null or omitted, the cookie will be a session cookie
65c2b2b5 33 * and will not be retained when the browser exits.
fcce886b
JN
34 * @param {String} [options.path] Restrict access of a cookie to particular directory
35 * (default: path of page that created the cookie).
36 * @param {String} [options.domain] Override what web sites are allowed to access cookie
37 * (default: domain of page that created the cookie).
38 * @param {Boolean} [options.secure] If true, the secure attribute of the cookie will be set
39 * and the cookie would be accessible only from secure sites
40 * (cookie transmission will require secure protocol like HTTPS).
41 */
42function setCookie(sName, sValue, options) {
43 options = options || {};
44 if (sValue === null) {
45 sValue = '';
46 option.expires = 'delete';
47 }
48
49 var sCookie = sName + '=' + encodeURIComponent(sValue);
50
51 if (options.expires) {
52 var oExpires = options.expires, sDate;
53 if (oExpires === 'delete') {
54 sDate = 'Thu, 01 Jan 1970 00:00:00 GMT';
55 } else if (typeof oExpires === 'string') {
56 sDate = oExpires;
57 } else {
58 var oDate;
59 if (typeof oExpires === 'number') {
60 oDate = new Date();
61 oDate.setTime(oDate.getTime() + (oExpires * 24 * 60 * 60 * 1000)); // days to ms
62 } else {
63 oDate = oExpires;
64 }
65 sDate = oDate.toGMTString();
66 }
67 sCookie += '; expires=' + sDate;
68 }
69
70 if (options.path) {
71 sCookie += '; path=' + (options.path);
72 }
73 if (options.domain) {
74 sCookie += '; domain=' + (options.domain);
75 }
76 if (options.secure) {
77 sCookie += '; secure';
78 }
79 document.cookie = sCookie;
80}
81
82/**
83 * Get the value of a cookie with the given name.
84 *
85 * @param {String} sName: Unique name of a cookie (letters, numbers, underscores)
86 * @returns {String|null} The string value stored in a cookie
87 */
88function getCookie(sName) {
89 var sRE = '(?:; )?' + sName + '=([^;]*);?';
90 var oRE = new RegExp(sRE);
91 if (oRE.test(document.cookie)) {
92 return decodeURIComponent(RegExp['$1']);
93 } else {
94 return null;
95 }
96}
97
98/**
99 * Delete cookie with given name
100 *
101 * @param {String} sName: Unique name of a cookie (letters, numbers, underscores)
102 * @param {Object} [options] An object literal containing key/value pairs
103 * to provide optional cookie attributes.
104 * @param {String} [options.path] Must be the same as when setting a cookie
105 * @param {String} [options.domain] Must be the same as when setting a cookie
106 */
107function deleteCookie(sName, options) {
108 options = options || {};
109 options.expires = 'delete';
110
111 setCookie(sName, '', options);
112}
113
114/* end of cookies.js */