diff options
Diffstat (limited to 'lib/scripts/cookie.js')
-rw-r--r-- | lib/scripts/cookie.js | 112 |
1 files changed, 32 insertions, 80 deletions
diff --git a/lib/scripts/cookie.js b/lib/scripts/cookie.js index d7e6b3550..3ad67bfa4 100644 --- a/lib/scripts/cookie.js +++ b/lib/scripts/cookie.js @@ -1,15 +1,16 @@ /** - * Handles the cookie used by several JavaScript functions - * - * Only a single cookie is written and read. You may only save - * sime name-value pairs - no complex types! - * - * You should only use the getValue and setValue methods - * - * @author Andreas Gohr <andi@splitbrain.org> - */ -DokuCookie = { - data: Array(), +* Handles the cookie used by several JavaScript functions +* +* Only a single cookie is written and read. You may only save +* simple name-value pairs - no complex types! +* +* You should only use the getValue and setValue methods +* +* @author Andreas Gohr <andi@splitbrain.org> +* @author Michal Rezler <m.rezler@centrum.cz> +*/ +var DokuCookie = { + data: {}, name: 'DOKU_PREFS', /** @@ -18,21 +19,18 @@ DokuCookie = { * @author Andreas Gohr <andi@splitbrain.org> */ setValue: function(key,val){ - DokuCookie.init(); - DokuCookie.data[key] = val; - - // prepare expire date - var now = new Date(); - DokuCookie.fixDate(now); - now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year + var text = [], + _this = this; + this.init(); + this.data[key] = val; //save the whole data array - var text = ''; - for(var key in DokuCookie.data){ - if (!DokuCookie.data.hasOwnProperty(key)) continue; - text += '#'+escape(key)+'#'+DokuCookie.data[key]; - } - DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE); + jQuery.each(_this.data, function (key, val) { + if (_this.data.hasOwnProperty(key)) { + text.push(encodeURIComponent(key)+'#'+encodeURIComponent(val)); + } + }); + jQuery.cookie(this.name, text.join('#'), {expires: 365, path: DOKU_BASE}); }, /** @@ -41,8 +39,8 @@ DokuCookie = { * @author Andreas Gohr <andi@splitbrain.org> */ getValue: function(key){ - DokuCookie.init(); - return DokuCookie.data[key]; + this.init(); + return this.data[key]; }, /** @@ -51,62 +49,16 @@ DokuCookie = { * @author Andreas Gohr <andi@splitbrain.org> */ init: function(){ - if(DokuCookie.data.length) return; - var text = DokuCookie.getCookie(DokuCookie.name); + var text, parts, i; + if(!jQuery.isEmptyObject(this.data)) { + return; + } + text = jQuery.cookie(this.name); if(text){ - var parts = text.split('#'); - for(var i=0; i<parts.length; i+=2){ - DokuCookie.data[unescape(parts[i])] = unescape(parts[i+1]); + parts = text.split('#'); + for(i = 0; i < parts.length; i += 2){ + this.data[decodeURIComponent(parts[i])] = decodeURIComponent(parts[i+1]); } } - }, - - /** - * This sets a cookie by JavaScript - * - * @link http://www.webreference.com/js/column8/functions.html - */ - setCookie: function(name, value, expires, path, domain, secure) { - var curCookie = name + "=" + escape(value) + - ((expires) ? "; expires=" + expires.toGMTString() : "") + - ((path) ? "; path=" + path : "") + - ((domain) ? "; domain=" + domain : "") + - ((secure) ? "; secure" : ""); - document.cookie = curCookie; - }, - - /** - * This reads a cookie by JavaScript - * - * @link http://www.webreference.com/js/column8/functions.html - */ - getCookie: function(name) { - var dc = document.cookie; - var prefix = name + "="; - var begin = dc.indexOf("; " + prefix); - if (begin == -1) { - begin = dc.indexOf(prefix); - if (begin !== 0){ return null; } - } else { - begin += 2; - } - var end = document.cookie.indexOf(";", begin); - if (end == -1){ - end = dc.length; - } - return unescape(dc.substring(begin + prefix.length, end)); - }, - - /** - * This is needed for the cookie functions - * - * @link http://www.webreference.com/js/column8/functions.html - */ - fixDate: function(date) { - var base = new Date(0); - var skew = base.getTime(); - if (skew > 0){ - date.setTime(date.getTime() - skew); - } } }; |