-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gitweb.js: Introduce code to handle cookies from JavaScript
Introduced gitweb/static/js/cookies.js file provides functions for setting, getting and deleting cookies. Code taken from subsection "Cookies in JavaScript" of "Professional JavaScript for Web Developers" by Nicholas C. Zakas and from cookie plugin for jQuery (dual licensed under the MIT and GPL licenses). Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Jakub Narebski
authored and
Junio C Hamano
committed
May 24, 2011
1 parent
54b1479
commit fcce886
Showing
2 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
/** | ||
* @fileOverview Accessing cookies from JavaScript | ||
* @license GPLv2 or later | ||
*/ | ||
|
||
/* | ||
* Based on subsection "Cookies in JavaScript" of "Professional | ||
* JavaScript for Web Developers" by Nicholas C. Zakas and cookie | ||
* plugin from jQuery (dual licensed under the MIT and GPL licenses) | ||
*/ | ||
|
||
|
||
/** | ||
* Create a cookie with the given name and value, | ||
* and other optional parameters. | ||
* | ||
* @example | ||
* setCookie('foo', 'bar'); // will be deleted when browser exits | ||
* setCookie('foo', 'bar', { expires: new Date(Date.parse('Jan 1, 2012')) }); | ||
* setCookie('foo', 'bar', { expires: 7 }); // 7 days = 1 week | ||
* setCookie('foo', 'bar', { expires: 14, path: '/' }); | ||
* | ||
* @param {String} sName: Unique name of a cookie (letters, numbers, underscores). | ||
* @param {String} sValue: The string value stored in a cookie. | ||
* @param {Object} [options] An object literal containing key/value pairs | ||
* to provide optional cookie attributes. | ||
* @param {String|Number|Date} [options.expires] Either literal string to be used as cookie expires, | ||
* or an integer specifying the expiration date from now on in days, | ||
* or a Date object to be used as cookie expiration date. | ||
* If a negative value is specified or a date in the past), | ||
* the cookie will be deleted. | ||
* If set to null or omitted, the cookie will be a session cookie | ||
* and will not be retained when the the browser exits. | ||
* @param {String} [options.path] Restrict access of a cookie to particular directory | ||
* (default: path of page that created the cookie). | ||
* @param {String} [options.domain] Override what web sites are allowed to access cookie | ||
* (default: domain of page that created the cookie). | ||
* @param {Boolean} [options.secure] If true, the secure attribute of the cookie will be set | ||
* and the cookie would be accessible only from secure sites | ||
* (cookie transmission will require secure protocol like HTTPS). | ||
*/ | ||
function setCookie(sName, sValue, options) { | ||
options = options || {}; | ||
if (sValue === null) { | ||
sValue = ''; | ||
option.expires = 'delete'; | ||
} | ||
|
||
var sCookie = sName + '=' + encodeURIComponent(sValue); | ||
|
||
if (options.expires) { | ||
var oExpires = options.expires, sDate; | ||
if (oExpires === 'delete') { | ||
sDate = 'Thu, 01 Jan 1970 00:00:00 GMT'; | ||
} else if (typeof oExpires === 'string') { | ||
sDate = oExpires; | ||
} else { | ||
var oDate; | ||
if (typeof oExpires === 'number') { | ||
oDate = new Date(); | ||
oDate.setTime(oDate.getTime() + (oExpires * 24 * 60 * 60 * 1000)); // days to ms | ||
} else { | ||
oDate = oExpires; | ||
} | ||
sDate = oDate.toGMTString(); | ||
} | ||
sCookie += '; expires=' + sDate; | ||
} | ||
|
||
if (options.path) { | ||
sCookie += '; path=' + (options.path); | ||
} | ||
if (options.domain) { | ||
sCookie += '; domain=' + (options.domain); | ||
} | ||
if (options.secure) { | ||
sCookie += '; secure'; | ||
} | ||
document.cookie = sCookie; | ||
} | ||
|
||
/** | ||
* Get the value of a cookie with the given name. | ||
* | ||
* @param {String} sName: Unique name of a cookie (letters, numbers, underscores) | ||
* @returns {String|null} The string value stored in a cookie | ||
*/ | ||
function getCookie(sName) { | ||
var sRE = '(?:; )?' + sName + '=([^;]*);?'; | ||
var oRE = new RegExp(sRE); | ||
if (oRE.test(document.cookie)) { | ||
return decodeURIComponent(RegExp['$1']); | ||
} else { | ||
return null; | ||
} | ||
} | ||
|
||
/** | ||
* Delete cookie with given name | ||
* | ||
* @param {String} sName: Unique name of a cookie (letters, numbers, underscores) | ||
* @param {Object} [options] An object literal containing key/value pairs | ||
* to provide optional cookie attributes. | ||
* @param {String} [options.path] Must be the same as when setting a cookie | ||
* @param {String} [options.domain] Must be the same as when setting a cookie | ||
*/ | ||
function deleteCookie(sName, options) { | ||
options = options || {}; | ||
options.expires = 'delete'; | ||
|
||
setCookie(sName, '', options); | ||
} | ||
|
||
/* end of cookies.js */ |