Skip to content

Instantly share code, notes, and snippets.

@pandectesio
Last active May 17, 2024 11:03
Show Gist options
  • Save pandectesio/e0abc8f1390dfdc7cdd0d42502a59627 to your computer and use it in GitHub Desktop.
Save pandectesio/e0abc8f1390dfdc7cdd0d42502a59627 to your computer and use it in GitHub Desktop.
Custom pixel - Pandectes initialization for consent mode
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