108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
dojo.provide("dojo.io.cookie");
|
|
|
|
dojo.io.cookie.setCookie = function(name, value, days, path, domain, secure) {
|
|
var expires = -1;
|
|
if(typeof days == "number" && days >= 0) {
|
|
var d = new Date();
|
|
d.setTime(d.getTime()+(days*24*60*60*1000));
|
|
expires = d.toGMTString();
|
|
}
|
|
value = escape(value);
|
|
document.cookie = name + "=" + value + ";"
|
|
+ (expires != -1 ? " expires=" + expires + ";" : "")
|
|
+ (path ? "path=" + path : "")
|
|
+ (domain ? "; domain=" + domain : "")
|
|
+ (secure ? "; secure" : "");
|
|
}
|
|
|
|
dojo.io.cookie.set = dojo.io.cookie.setCookie;
|
|
|
|
dojo.io.cookie.getCookie = function(name) {
|
|
// FIXME: Which cookie should we return?
|
|
// If there are cookies set for different sub domains in the current
|
|
// scope there could be more than one cookie with the same name.
|
|
// I think taking the last one in the list takes the one from the
|
|
// deepest subdomain, which is what we're doing here.
|
|
var idx = document.cookie.lastIndexOf(name+'=');
|
|
if(idx == -1) { return null; }
|
|
var value = document.cookie.substring(idx+name.length+1);
|
|
var end = value.indexOf(';');
|
|
if(end == -1) { end = value.length; }
|
|
value = value.substring(0, end);
|
|
value = unescape(value);
|
|
return value;
|
|
}
|
|
|
|
dojo.io.cookie.get = dojo.io.cookie.getCookie;
|
|
|
|
dojo.io.cookie.deleteCookie = function(name) {
|
|
dojo.io.cookie.setCookie(name, "-", 0);
|
|
}
|
|
|
|
dojo.io.cookie.setObjectCookie = function(name, obj, days, path, domain, secure, clearCurrent) {
|
|
if(arguments.length == 5) { // for backwards compat
|
|
clearCurrent = domain;
|
|
domain = null;
|
|
secure = null;
|
|
}
|
|
var pairs = [], cookie, value = "";
|
|
if(!clearCurrent) { cookie = dojo.io.cookie.getObjectCookie(name); }
|
|
if(days >= 0) {
|
|
if(!cookie) { cookie = {}; }
|
|
for(var prop in obj) {
|
|
if(prop == null) {
|
|
delete cookie[prop];
|
|
} else if(typeof obj[prop] == "string" || typeof obj[prop] == "number") {
|
|
cookie[prop] = obj[prop];
|
|
}
|
|
}
|
|
prop = null;
|
|
for(var prop in cookie) {
|
|
pairs.push(escape(prop) + "=" + escape(cookie[prop]));
|
|
}
|
|
value = pairs.join("&");
|
|
}
|
|
dojo.io.cookie.setCookie(name, value, days, path, domain, secure);
|
|
}
|
|
|
|
dojo.io.cookie.getObjectCookie = function(name) {
|
|
var values = null, cookie = dojo.io.cookie.getCookie(name);
|
|
if(cookie) {
|
|
values = {};
|
|
var pairs = cookie.split("&");
|
|
for(var i = 0; i < pairs.length; i++) {
|
|
var pair = pairs[i].split("=");
|
|
var value = pair[1];
|
|
if( isNaN(value) ) { value = unescape(pair[1]); }
|
|
values[ unescape(pair[0]) ] = value;
|
|
}
|
|
}
|
|
return values;
|
|
}
|
|
|
|
dojo.io.cookie.isSupported = function() {
|
|
if(typeof navigator.cookieEnabled != "boolean") {
|
|
dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__",
|
|
"CookiesAllowed", 90, null);
|
|
var cookieVal = dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
|
|
navigator.cookieEnabled = (cookieVal == "CookiesAllowed");
|
|
if(navigator.cookieEnabled) {
|
|
// FIXME: should we leave this around?
|
|
this.deleteCookie("__TestingYourBrowserForCookieSupport__");
|
|
}
|
|
}
|
|
return navigator.cookieEnabled;
|
|
}
|
|
|
|
// need to leave this in for backwards-compat from 0.1 for when it gets pulled in by dojo.io.*
|
|
if(!dojo.io.cookies) { dojo.io.cookies = dojo.io.cookie; }
|