154 lines
4.4 KiB
JavaScript
Executable File
154 lines
4.4 KiB
JavaScript
Executable File
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
define([
|
|
'jquery',
|
|
'mage/mage',
|
|
'js-cookie/cookie-wrapper'
|
|
], function ($) {
|
|
'use strict';
|
|
|
|
/**
|
|
* Helper for cookies manipulation
|
|
* @returns {CookieHelper}
|
|
* @constructor
|
|
*/
|
|
var CookieHelper = function () {
|
|
|
|
/**
|
|
* Cookie default values.
|
|
* @type {Object}
|
|
*/
|
|
this.defaults = {
|
|
expires: null,
|
|
path: '/',
|
|
domain: null,
|
|
secure: false,
|
|
lifetime: null,
|
|
samesite: 'lax'
|
|
};
|
|
|
|
/**
|
|
* Calculate cookie expiration date based on its lifetime.
|
|
* @param {Object} options - Cookie option values
|
|
* @return {Date|null} Calculated cookie expiration date or null if no lifetime provided.
|
|
* @private
|
|
*/
|
|
function lifetimeToExpires(options, defaults) {
|
|
var expires,
|
|
lifetime;
|
|
|
|
lifetime = options.lifetime || defaults.lifetime;
|
|
|
|
if (lifetime && lifetime > 0) {
|
|
expires = options.expires || new Date();
|
|
|
|
return new Date(expires.getTime() + lifetime * 1000);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Set a cookie's value by cookie name based on optional cookie options.
|
|
* @param {String} name - The name of the cookie.
|
|
* @param {String} value - The cookie's value.
|
|
* @param {Object} options - Optional options (e.g. lifetime, expires, path, etc.)
|
|
*/
|
|
this.set = function (name, value, options) {
|
|
var expires,
|
|
path,
|
|
domain,
|
|
secure,
|
|
samesite;
|
|
|
|
options = $.extend({}, this.defaults, options || {});
|
|
expires = lifetimeToExpires(options, this.defaults) || options.expires;
|
|
path = options.path;
|
|
domain = options.domain;
|
|
secure = options.secure;
|
|
samesite = options.samesite;
|
|
|
|
document.cookie = name + '=' + encodeURIComponent(value) +
|
|
(expires ? '; expires=' + expires.toUTCString() : '') +
|
|
(path ? '; path=' + path : '') +
|
|
(domain ? '; domain=' + domain : '') +
|
|
(secure ? '; secure' : '') +
|
|
'; samesite=' + (samesite ? samesite : 'lax');
|
|
};
|
|
|
|
/**
|
|
* Get a cookie's value by cookie name.
|
|
* @param {String} name - The name of the cookie.
|
|
* @return {(null|String)}
|
|
*/
|
|
this.get = function (name) {
|
|
var arg = name + '=',
|
|
aLength = arg.length,
|
|
cookie = document.cookie,
|
|
cLength = cookie.length,
|
|
i = 0,
|
|
j = 0;
|
|
|
|
while (i < cLength) {
|
|
j = i + aLength;
|
|
|
|
if (cookie.substring(i, j) === arg) {
|
|
return this.getCookieVal(j);
|
|
}
|
|
i = cookie.indexOf(' ', i) + 1;
|
|
|
|
if (i === 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
/**
|
|
* Clear a cookie's value by name.
|
|
* @param {String} name - The name of the cookie being cleared.
|
|
*/
|
|
this.clear = function (name) {
|
|
if (this.get(name)) {
|
|
this.set(name, '', {
|
|
expires: new Date('Jan 01 1970 00:00:01 GMT')
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Return URI decoded cookie component value (e.g. expires, path, etc.) based on a
|
|
* numeric offset in the document's cookie value.
|
|
* @param {Number} offset - Offset into the document's cookie value.
|
|
* @return {String}
|
|
*/
|
|
this.getCookieVal = function (offset) {
|
|
var cookie = document.cookie,
|
|
endstr = cookie.indexOf(';', offset);
|
|
|
|
if (endstr === -1) {
|
|
endstr = cookie.length;
|
|
}
|
|
|
|
return decodeURIComponent(cookie.substring(offset, endstr));
|
|
};
|
|
|
|
return this;
|
|
};
|
|
|
|
$.extend(true, $, {
|
|
mage: {
|
|
cookies: new CookieHelper()
|
|
}
|
|
});
|
|
|
|
return function (pageOptions) {
|
|
$.extend($.mage.cookies.defaults, pageOptions);
|
|
$.extend($.cookie.defaults, $.mage.cookies.defaults);
|
|
};
|
|
});
|