window.VERSION = "1.7.0"; const mainCookieNameRegex = /^_iub_cs-(s?[0-9]+)/ const validCookieExpressions = [mainCookieNameRegex, /^usprivacy\-(s?[0-9]+)$/]; const cDomain = '.' + location.hostname.split('.').slice(-2).join('.'); // '.iubenda.com' OR '.local.cdn' OR 'localhost' const cKeep = 10; const isProd = location.hostname !== "local.cdn"; function isConsentCookieName(cookieName) { return new RegExp(mainCookieNameRegex).test(cookieName); } function isValidCookieName(cookieName, validCookieExpressions) { for (let i = 0; i < validCookieExpressions.length; i++) { if (validCookieExpressions[i].test(cookieName)) { return true; } } return false; } /** * Get a url parameter's value by name. * * @param {String} uri * @param {String} name * @returns {String|null} */ function getParameterByName(uri, name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); const regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(uri); return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, " ")); } function resetCookie(cookieName) { const cookies = document.cookie.split(';'); for( let i = 0; i < cookies.length; i++ ){ let cookie = cookies[i].trim(); if(cookie.split('=')[0] === cookieName){ const resetCookieString = cookieName + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/" + "; domain=" + cDomain + '; samesite=none; secure'; document.cookie = resetCookieString; return true; } } return null; } function setCookie(cookieName, cookieValue, options) { options = options || {}; const expireAfter = options.expireAfter || 365; // days const path = options.path || '/'; // convert data to JSON if required const jsonValue = JSON.stringify(cookieValue); // evaluate Expires const cDate = new Date(); cDate.setTime(cDate.getTime() + (expireAfter * 24 * 60 * 60 * 1000)); // NOTE: using encodeURIComponent since RoR (used on callback mode) URI encodes cookie value when setting const setCookieString = cookieName + "=" + encodeURIComponent(jsonValue) + "; expires=" + cDate.toUTCString() + "; path=" + path + "; domain=" + cDomain + ";samesite=none; secure"; document.cookie = setCookieString; } function getCookie(cookieName) { const name = cookieName + "="; const cookies = document.cookie.split(';'); for(let i = 0 ; i < cookies.length; i++){ const cookie = cookies[i].trim(); const cookieString = cookie.substring(name.length, cookie.length); if (cookie.indexOf(name) === 0) { compactCookies(); return JSON.parse(decodeURIComponent(cookieString)); } } compactCookies(); return null; } function migrateCookie(cookieName, newName) { const migrageValue = getCookie(cookieName); if (migrageValue) { setCookie(newName, migrageValue); } return migrageValue; } /** * Remove older _iub_cs cookies */ function compactCookies() { const cookies = document.cookie.split(';'); const cookiesToCompact = { '_iub_cs': [], 'usprivacy': [] } // sort each cookie by it's respective Date attribute const sortMap = { '_iub_cs': 'timestamp', 'usprivacy': 'firstAcknowledgeDate' } for (let i = 0;i < cookies.length; i++) { let cookie = cookies[i].trim(); const cName = cookie.split('=')[0]; const cValue = cookie.split('=')[1]; if (isValidCookieName(cName,validCookieExpressions)) { cookiesToCompact[cName.split('-')[0]].push({ cName: cName, cValue: JSON.parse(decodeURIComponent(cValue)) || {}, cookiePolicyId: cName.split('-')[1] }) } } // sort cookies Object.keys(cookiesToCompact).forEach(function(cookieKey) { cookiesToCompact[cookieKey].sort(function(a,b) { return new Date(a.cValue[sortMap[cookieKey]]).getTime() - new Date(b.cValue[sortMap[cookieKey]]).getTime() }).reverse(); }) // leave most recent 10 cookies Object.keys(cookiesToCompact).forEach(function(cookieKey) { cookiesToCompact[cookieKey].splice(0,cKeep); }) // remove the others Object.keys(cookiesToCompact).forEach(function(cookieKey) { let cookieArray = cookiesToCompact[cookieKey]; for(let i = 0 ; i