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