OpoTests/Public/ecma/Managers/CookiesManager.ecma.js

112 lines
2.4 KiB
JavaScript

"use strict";
/**
* @typedef {import("../OpoTests.ecma.js").OpoTests} OpoTests
*/
import {Utils} from "../Utils/Utils.ecma.js";
/**
* @class CookiesManager
* @constructor
* @param {!OpoTests} ot
* @returns {void}
* @access public
* @static
*/
export const CookiesManager = (function(){
/**
* @callback cookies_manager_default_callback
* @returns {void}
*/
/**
* @constructs CookiesManager
* @param {!OpoTests} ot
* @returns {void}
* @access private
* @static
*/
const CookiesManager = function(ot){
/** @type {CookiesManager} */
const self = this;
/** @type {number} */
let timeout = 3600000;
/**
* @returns {void}
* @access private
*/
const constructor = () => {};
/**
* @param {?cookies_manager_default_callback} [callback = null]
* @return {void}
* @access public
*/
this.start = (callback = null) => {
timeout = ot.settings.get(["cookies_timeout", "timeout"], null, timeout);
Utils.execute(callback);
};
/**
* @param {!string} name
* @returns {boolean}
* @access public
*/
this.has = name => {
name += "=";
return document.cookie.split(';').some(c => c.trim().startsWith(name));
};
/**
* @param {!string} name
* @param {!string} value
* @returns {void}
* @access public
*/
this.set = (name, value) => {
document.cookie = (
name + "=" + (value || "") + ";" +
"expires=" + new Date(Date.now() + timeout).toUTCString() + ";" +
"path=/"
);
};
/**
* @param {!string} name
* @returns {?string}
* @access public
*/
this.get = name => {
name += "=";
for(const cookie of document.cookie.split(';'))
if(cookie.trim().startsWith(name))
return cookie.trim().substring(name.length);
return null;
};
/**
* @param {!string} name
* @returns {void}
* @access public
*/
this.remove = name => {
self.has(name) && (document.cookie = name + "=; Max-Age=-99999999;");
};
constructor();
};
return CookiesManager;
})();