|
/** |
|
* @author Maxime Haineault (max@centdessin.com) |
|
* @version 0.3 |
|
* @desc JavaScript cookie manipulation class |
|
* |
|
* @modifications github.com/adoc |
|
* patch 0.3.1 - adoc (nowhere to submit) |
|
*/ |
|
|
|
Cookie = { |
|
|
|
/** Get a cookie's value |
|
* |
|
* @param integer key The token used to create the cookie |
|
* @return void |
|
*/ |
|
get: function(key) { |
|
// Still not sure that "[a-zA-Z0-9.()=|%/]+($|;)" match *all* allowed characters in cookies |
|
// @ adoc - update regeg to include at least '_' and '-'. This is not right either way. |
|
var tmp = document.cookie.match((new RegExp(key +'=[a-zA-Z0-9.()=|%/_-]+($|;)','g'))); |
|
if(!tmp || !tmp[0]) return null; |
|
else return unescape(tmp[0].substring(key.length+1,tmp[0].length).replace(';','')) || null; |
|
|
|
}, |
|
|
|
/** Set a cookie |
|
* |
|
* @param integer key The token that will be used to retrieve the cookie |
|
* @param string value The string to be stored |
|
* @param integer ttl Time To Live (hours) |
|
* @param string path Path in which the cookie is effective, default is "/" (optional) |
|
* @param string domain Domain where the cookie is effective, default is window.location.hostname (optional) |
|
* @param boolean secure Use SSL or not, default false (optional) |
|
* |
|
* @return setted cookie |
|
*/ |
|
set: function(key, value, ttl, path, domain, secure) { |
|
cookie = [key+'='+ encodeURIComponent(value), |
|
'path='+ ((!path || path=='') ? '/' : path), |
|
'domain='+ ((!domain || domain=='')? window.location.hostname : domain)]; |
|
// @adoc - added "expires=" |
|
if (ttl) cookie.push('expires=' + Cookie.hoursToExpireDate(ttl)); |
|
if (secure) cookie.push('secure'); |
|
|
|
// @adoc - added ';' at end of cookie string. |
|
return document.cookie = cookie.join('; ') + ';'; |
|
}, |
|
|
|
/** Unset a cookie |
|
* |
|
* @param integer key The token that will be used to retrieve the cookie |
|
* @param string path Path used to create the cookie (optional) |
|
* @param string domain Domain used to create the cookie, default is null (optional) |
|
* @return void |
|
*/ |
|
unset: function(key, path, domain) { |
|
path = (!path || typeof path != 'string') ? '' : path; |
|
domain = (!domain || typeof domain != 'string') ? '' : domain; |
|
// @adoc - removed timestamp here and simply use "-1" for ttl. |
|
if (Cookie.get(key)) Cookie.set(key, '', -1, path, domain); |
|
}, |
|
|
|
/** Return GTM date string of "now" + time to live |
|
* |
|
* @param integer ttl Time To Live (hours) |
|
* @return string |
|
*/ |
|
hoursToExpireDate: function(ttl) { |
|
if (parseInt(ttl) == 'NaN' ) return ''; |
|
else { |
|
now = new Date(); |
|
now.setTime(now.getTime() + (parseInt(ttl) * 60 * 60 * 1000)); |
|
return now.toGMTString(); |
|
} |
|
}, |
|
|
|
/** Return true if cookie functionnalities are available |
|
* |
|
* @return boolean |
|
*/ |
|
test: function() { |
|
Cookie.set('b49f729efde9b2578ea9f00563d06e57', 'true'); |
|
if (Cookie.get('b49f729efde9b2578ea9f00563d06e57') == 'true') { |
|
Cookie.unset('b49f729efde9b2578ea9f00563d06e57'); |
|
return true; |
|
} |
|
return false; |
|
}, |
|
|
|
/** If Firebug JavaScript console is present, it will dump cookie string to console. |
|
* |
|
* @return void |
|
*/ |
|
dump: function() { |
|
if (typeof console != 'undefined') { |
|
console.log(document.cookie.split(';')); |
|
} |
|
} |
|
} |