|
- /**
- * 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);
- };
- });
|