Last active
May 17, 2024 11:03
-
-
Save pandectesio/e0abc8f1390dfdc7cdd0d42502a59627 to your computer and use it in GitHub Desktop.
Custom pixel - Pandectes initialization for consent mode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const COOKIE_NAME = '_pandectes_gdpr'; | |
const GRANTED = 'granted'; | |
const DENIED = 'denied'; | |
const STORE_DEFAULT_POLICY = DENIED; | |
const getCookie = (cookieName) => { | |
const cookieString = document.cookie; | |
const cookieStart = cookieString.indexOf(cookieName + "="); | |
if (cookieStart === -1) { | |
return null; | |
} | |
let cookieEnd = cookieString.indexOf(";", cookieStart); | |
if (cookieEnd === -1) { | |
cookieEnd = cookieString.length; | |
} | |
const cookieValue = cookieString.substring(cookieStart + cookieName.length + 1, cookieEnd); | |
try { | |
const decodedValue = atob(cookieValue); | |
const parsedValue = JSON.parse(decodedValue); | |
return parsedValue; | |
} catch (error) { | |
console.error("Error parsing cookie value:", error); | |
return null; | |
} | |
}; | |
const getStorage = (cookie) => { | |
let output = { | |
ad_storage: STORE_DEFAULT_POLICY, | |
ad_user_data: STORE_DEFAULT_POLICY, | |
ad_personalization: STORE_DEFAULT_POLICY, | |
analytics_storage: STORE_DEFAULT_POLICY, | |
personalization_storage: STORE_DEFAULT_POLICY, | |
functionality_storage: STORE_DEFAULT_POLICY | |
}; | |
if (cookie && cookie.preferences !== null && cookie.preferences !== undefined) { | |
const p1 = (cookie.preferences & 1) === 0; | |
const p2 = (cookie.preferences & 2) === 0; | |
const p4 = (cookie.preferences & 4) === 0; | |
output = { | |
ad_storage: p4 ? GRANTED : DENIED, | |
ad_user_data: p4 ? GRANTED : DENIED, | |
ad_personalization: p4 ? GRANTED : DENIED, | |
analytics_storage: p2 ? GRANTED : DENIED, | |
personalization_storage: p1 ? GRANTED : DENIED, | |
functionality_storage: p1 ? GRANTED : DENIED | |
}; | |
} | |
return output; | |
}; | |
// data layer initialization | |
window.dataLayer = window.dataLayer || []; | |
function gtag() { dataLayer.push(arguments); } | |
const cookie = getCookie(COOKIE_NAME); | |
const storage = getStorage(cookie); | |
// consent mode initialization | |
gtag('consent', 'default', storage); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment