const cookiesKey = "cookies_accepted"; const getCookieJSON = () => { let cookie = document.cookie; let output = {}; cookie.split(/\s*;\s*/).forEach((pair) => { const pairs = pair.split(/\s*=\s*/); output[pairs[0]] = pairs.splice(1).join("="); }); return output; }; const getTextFromTag = (tag, text) => { const regex = new RegExp(`<${tag }>(.*?)<\/${ tag }>+`, 'g'); const texts = text.match(regex).map( txt => txt.replace(`<${ tag }>`, '') .replace(``, '') .trim() ); return texts.join(' '); } const getCookiePolicyByMarket = async () => { let result = null; try { const data = await fetch("/notice/get_cookie_policy_config"); result = await data.json(); sessionStorage.setItem("cookie_policy", JSON.stringify(result)); } catch (error) { return null; } return result; }; const getCookieComponent = (cookieBody) => { return `
${cookieBody.content}
`; }; function closeCookieDisplay() { const content = document.getElementById("cookies__container"); content.style.display = "none"; } function acceptCookies(days = 7) { saveCookieResponse(days) closeCookieDisplay(); } function saveCookieResponse(days = 7) { const date = new Date(); const time = date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); const expires = new Date(time).toUTCString(); document.cookie = `${ cookiesKey }=true; expires=${expires}; path=/`; } function isCookieAccepted() { return getCookieJSON()[cookiesKey] === "true"; } function cookiesWasFetched() { return !!sessionStorage.getItem('cookie_policy'); } function isCookiePolicyActive(policy) { return policy?.success == true; } function showCookie(cookieBody) { let cookieHTML = getCookieComponent(cookieBody) || ""; document .getElementsByTagName("body")[0] .insertAdjacentHTML("beforeend", cookieHTML); const btnAcceptCookies = document.getElementById("btnAcceptCookies"); const btnCloseCookies = document.getElementById("btnCloseCookies"); btnAcceptCookies.addEventListener("click", () => acceptCookies()); btnCloseCookies.addEventListener("click", () => closeCookieDisplay()); } async function initCookies(showCookieHandler = showCookie) { if (isCookieAccepted() == false) { let policy_; if (cookiesWasFetched() == false) { policy_ = await getCookiePolicyByMarket(); } else { policy_ = JSON.parse(sessionStorage.getItem('cookie_policy')); } if (isCookiePolicyActive(policy_)) { if (policy_.data){ showCookieHandler({ actionLabel: policy_.data.td_name.charAt(0).toUpperCase() + policy_.data.td_name.slice(1), // content: getTextFromTag('p', policy_.data.td_content), content: 'Utilizamos cookies para mejorar tu experiencia, optimizar nuestro sitio y personalizar el contenido que te ofrecemos.', link: policy_.data.link, }) } } } } function isSameSite(){ const testCookieName = `is_same_site_${Math.random()}`.replace('.','_') const testCookie = `${testCookieName}=true; path=/; SameSite=Strict;`; document.cookie = testCookie; if (getCookieJSON().hasOwnProperty(testCookieName)){ document.cookie = testCookie + `expires=${new Date(0).toUTCString()};`; return true; } return false; } function addMessageListenerOnce(element, eventType, handler) { const wrapper = (e) => { const { type, ...data } = e.data || {}; if (type === eventType) { handler({ ...data, origin: e.origin }); element.removeEventListener('message', wrapper); } }; element.addEventListener('message', wrapper); } function handleCookiePolicy() { const handlePolicyByValidIframe = !!(new URLSearchParams(window.location.search).get("request_cookie_policy")) && window.top !== window.self && isSameSite() if (handlePolicyByValidIframe){ addMessageListenerOnce(window, 'cookie_policy_request', (dataRequest) => { initCookies((cookieBody) => { addMessageListenerOnce(window, 'cookie_policy_accept', (dataAccept) => { if (dataAccept?.acceptCookies) saveCookieResponse(); }) window.top.postMessage({ type: "cookie_policy_data", data: cookieBody }, dataRequest.origin); }); }) } else { initCookies(); } } window.onload = () => { handleCookiePolicy(); } ;