UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

153 lines (124 loc) 4.3 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Sebastian Werner (wpbasti) * Andreas Ecker (ecker) ************************************************************************ */ /** * A wrapper for Cookie handling. * * Previous versions of qooxoo use `escape()` and `unescape()` functions. Since those functions * are deprecated, then now qooxdoo use `encodeURIComponent()` and `decodeURIComponent()` functions. * This may break some cookies. * There are no issues with special characters like `~!@#$%^&*(){}[]=:/,;?+\'"\\` but some unicode * characters like `äëíöü` (etc) are encoded different by `escape()` and `encodeURIComponent()`, * so you must take care of this change if you use unicode characters. */ qx.Bootstrap.define("qx.bom.Cookie", { /* ***************************************************************************** STATICS ***************************************************************************** */ statics: { /* --------------------------------------------------------------------------- USER APPLICATION METHODS --------------------------------------------------------------------------- */ /** * Returns the string value of a cookie. * * @param key {String} The key for the saved string value. * @return {null|String} Returns the saved string value, if the cookie * contains a value for the key, <code>null</code> otherwise. */ get(key) { var start = document.cookie.indexOf(key + "="); var len = start + key.length + 1; if (!start && key != document.cookie.substring(0, key.length)) { return null; } if (start == -1) { return null; } var end = document.cookie.indexOf(";", len); if (end == -1) { end = document.cookie.length; } try { return decodeURIComponent(document.cookie.substring(len, end)); } catch (URIError) { qx.log.Logger.error("Error decoding URI components", URIError.message); return null; } }, /** * Sets the string value of a cookie. * * @param key {String} The key for the string value. * @param value {String} The string value. * @param expires {Number?null} The expires in days starting from now, * or <code>null</code> if the cookie should deleted after browser close. * @param path {String?null} Path value. * @param domain {String?null} Domain value. * @param secure {Boolean?null} Secure flag. * @param sameSite {String?null} sameSite value. (Lax, Strict, None) */ set(key, value, expires, path, domain, secure, sameSite) { // Generate cookie var cookie = [key, "=", encodeURIComponent(value)]; if (expires) { var today = new Date(); today.setTime(today.getTime()); cookie.push( ";expires=", new Date( today.getTime() + expires * 1000 * 60 * 60 * 24 ).toGMTString() ); } if (path) { cookie.push(";path=", path); } if (domain) { cookie.push(";domain=", domain); } if (secure) { cookie.push(";secure"); } cookie.push(";sameSite=", sameSite || "Strict"); // Store cookie document.cookie = cookie.join(""); }, /** * Deletes the string value of a cookie. * * @param key {String} The key for the string value. * @param path {String?null} Path value. * @param domain {String?null} Domain value. */ del(key, path, domain) { if (!qx.bom.Cookie.get(key)) { return; } // Generate cookie var cookie = [key, "="]; if (path) { cookie.push(";path=", path); } if (domain) { cookie.push(";domain=", domain); } cookie.push(";expires=Thu, 01-Jan-1970 00:00:01 GMT"); // Store cookie document.cookie = cookie.join(""); } } });