430 lines
24 KiB
JavaScript
430 lines
24 KiB
JavaScript
/*
|
|
* Copyright (c) 2024 Flerosoft (https://flerosoft.com)
|
|
* Software Name: Cookie Notice Pro - jQuery Plugin
|
|
* Product Page : https://cookienoticepro.flerosoft.com
|
|
* Documentation: https://cookienoticepro.flerosoft.com/docs
|
|
* Description: Cookie Notice Pro, a lightweight jQuery plugin, helps you to comply with GDPR.
|
|
Make your own cookie information popup in minutes.
|
|
* Changelog: https://cookienoticepro.flerosoft.com/docs/getting-started#item-1-4
|
|
*/
|
|
|
|
(function ($) {
|
|
|
|
'use strict'
|
|
|
|
const settingsIcon =
|
|
'<?xml version="1.0" ?><svg height="16px" version="1.1" viewBox="0 0 20 20" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns" xmlns:xlink="http://www.w3.org/1999/xlink"><title/><desc/><defs/><g fill="none" fill-rule="evenodd" id="Page-1" stroke="none" stroke-width="1"><g fill="#bfb9b9" id="Core" transform="translate(-464.000000, -380.000000)"><g id="settings" transform="translate(464.000000, 380.000000)"><path d="M17.4,11 C17.4,10.7 17.5,10.4 17.5,10 C17.5,9.6 17.5,9.3 17.4,9 L19.5,7.3 C19.7,7.1 19.7,6.9 19.6,6.7 L17.6,3.2 C17.5,3.1 17.3,3 17,3.1 L14.5,4.1 C14,3.7 13.4,3.4 12.8,3.1 L12.4,0.5 C12.5,0.2 12.2,0 12,0 L8,0 C7.8,0 7.5,0.2 7.5,0.4 L7.1,3.1 C6.5,3.3 6,3.7 5.4,4.1 L3,3.1 C2.7,3 2.5,3.1 2.3,3.3 L0.3,6.8 C0.2,6.9 0.3,7.2 0.5,7.4 L2.6,9 C2.6,9.3 2.5,9.6 2.5,10 C2.5,10.4 2.5,10.7 2.6,11 L0.5,12.7 C0.3,12.9 0.3,13.1 0.4,13.3 L2.4,16.8 C2.5,16.9 2.7,17 3,16.9 L5.5,15.9 C6,16.3 6.6,16.6 7.2,16.9 L7.6,19.5 C7.6,19.7 7.8,19.9 8.1,19.9 L12.1,19.9 C12.3,19.9 12.6,19.7 12.6,19.5 L13,16.9 C13.6,16.6 14.2,16.3 14.7,15.9 L17.2,16.9 C17.4,17 17.7,16.9 17.8,16.7 L19.8,13.2 C19.9,13 19.9,12.7 19.7,12.6 L17.4,11 L17.4,11 Z M10,13.5 C8.1,13.5 6.5,11.9 6.5,10 C6.5,8.1 8.1,6.5 10,6.5 C11.9,6.5 13.5,8.1 13.5,10 C13.5,11.9 11.9,13.5 10,13.5 L10,13.5 Z" id="Shape"/></g></g></g></svg>';
|
|
|
|
const cookieIcon =
|
|
'<svg id="cookieIcon" xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <g fill="none" fill-rule="evenodd"> <circle cx="20" cy="20" r="20" fill="#D5A150"></circle> <path fill="#AD712C" d="M32.44 4.34a19.914 19.914 0 0 1 4.34 12.44c0 11.046-8.954 20-20 20a19.914 19.914 0 0 1-12.44-4.34C8.004 37.046 13.657 40 20 40c11.046 0 20-8.954 20-20 0-6.343-2.954-11.996-7.56-15.66z"> </path> <path fill="#C98A2E" d="M10.903 11.35c-.412 0-.824-.157-1.139-.471a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.183 0 2.294.46 3.13 1.296a1.61 1.61 0 0 1-2.276 2.277 1.2 1.2 0 0 0-.854-.354 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.137 2.749z"> </path> <circle cx="12.894" cy="7.749" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M10.09 7.48l-.003.032a1.566 1.566 0 0 0 1.624 1.683 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.624-1.683 2.823 2.823 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M4.464 24.227c-.412 0-.824-.157-1.138-.471a4.432 4.432 0 0 1 0-6.26 4.398 4.398 0 0 1 3.13-1.297c1.182 0 2.294.46 3.13 1.297a1.61 1.61 0 0 1-2.277 2.276 1.2 1.2 0 0 0-.853-.353 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.138 2.748z"> </path> <circle cx="6.456" cy="20.626" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M3.651 20.356a1.566 1.566 0 0 0 1.62 1.716 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.622-1.683 2.824 2.824 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M10.098 32.276c-.412 0-.824-.158-1.138-.472a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.182 0 2.294.46 3.13 1.297a1.61 1.61 0 0 1-2.277 2.276 1.2 1.2 0 0 0-.853-.353 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.138 2.749z"> </path> <circle cx="12.089" cy="28.674" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M9.285 28.405a1.566 1.566 0 0 0 1.62 1.716 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.622-1.684 2.824 2.824 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M18.95 37.91c-.411 0-.823-.158-1.137-.472a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.182 0 2.294.46 3.13 1.297a1.61 1.61 0 0 1-2.277 2.276 1.2 1.2 0 0 0-.853-.353 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.138 2.748z"> </path> <circle cx="20.942" cy="34.308" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M18.138 34.038l-.002.033a1.566 1.566 0 0 0 1.623 1.684 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.623-1.684 2.824 2.824 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M20.56 15.385c-.411 0-.823-.157-1.138-.471a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.183 0 2.294.46 3.13 1.296a1.61 1.61 0 0 1-2.276 2.277 1.2 1.2 0 0 0-.854-.354 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.137 2.75z"> </path> <circle cx="22.552" cy="11.784" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M19.748 11.514l-.003.033a1.566 1.566 0 0 0 1.624 1.683 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.624-1.683 2.823 2.823 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M30.219 29.861c-.412 0-.824-.157-1.139-.471a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.183 0 2.294.46 3.13 1.296a1.61 1.61 0 0 1-2.276 2.277 1.2 1.2 0 0 0-.854-.354 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.137 2.75z"> </path> <circle cx="32.21" cy="26.26" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M29.406 25.99a1.566 1.566 0 0 0 1.62 1.716 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.623-1.683 2.824 2.824 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M29.414 14.57c-.412 0-.824-.158-1.139-.472a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.183 0 2.295.46 3.13 1.297a1.61 1.61 0 0 1-2.276 2.276 1.2 1.2 0 0 0-.853-.353 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.138 2.748z"> </path> <circle cx="31.405" cy="10.968" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M28.601 10.698a1.566 1.566 0 0 0 1.62 1.716 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.622-1.683 2.824 2.824 0 0 0-2.7 2.546z"> </path> <path fill="#C98A2E" d="M17.341 24.227c-.412 0-.824-.157-1.138-.471a4.432 4.432 0 0 1 0-6.26 4.397 4.397 0 0 1 3.13-1.297c1.183 0 2.294.46 3.13 1.297a1.61 1.61 0 0 1-2.276 2.276 1.2 1.2 0 0 0-.854-.354 1.208 1.208 0 0 0-.854 2.06 1.61 1.61 0 0 1-1.138 2.75z"> </path> <circle cx="19.333" cy="20.626" r="2.817" fill="#674230"></circle> <path fill="#7A5436" d="M16.529 20.356l-.003.033a1.566 1.566 0 0 0 1.623 1.684 2.824 2.824 0 0 0 2.703-2.578 1.566 1.566 0 0 0-1.623-1.684 2.824 2.824 0 0 0-2.7 2.546z"> </path> <g fill="#AD712C" transform="translate(2.656 1.875)"> <circle cx="7.485" cy="21.143" r="1"></circle> <circle cx="11.509" cy="21.143" r="1"></circle> <circle cx="9.497" cy="17.521" r="1"></circle> <circle cx="2.253" cy="24.765" r="1"></circle> <circle cx="10.301" cy="33.618" r="1"></circle> <circle cx="12.716" cy="30.399" r="1"></circle> <circle cx="16.74" cy="25.57" r="1"></circle> <circle cx="23.179" cy="23.155" r="1"></circle> <circle cx="21.569" cy="24.765" r="1"></circle> <circle cx="23.984" cy="27.179" r="1"></circle> <circle cx="23.984" cy="32.008" r="1"></circle> <circle cx="32.837" cy="15.107" r="1"></circle> <circle cx="30.422" cy="31.203" r="1"></circle> <circle cx="18.35" cy=".62" r="1"></circle> <circle cx="3.863" cy="7.863" r="1"></circle> <circle cx=".644" cy="12.692" r="1"></circle> <circle cx="9.899" cy="13.9" r="1"></circle> <circle cx="12.314" cy="12.692" r="1"></circle> <circle cx="9.899" cy="11.485" r="1"></circle> <circle cx="21.167" cy="17.521" r="1"></circle> <circle cx="15.935" cy="5.449" r="1"></circle> <circle cx="23.581" cy="12.692" r="1"></circle> <circle cx="24.788" cy="16.314" r="1"></circle> <circle cx="27.203" cy="16.314" r="1"></circle> <circle cx="27.203" cy="18.729" r="1"></circle> <circle cx="22.776" cy="4.242" r="1"></circle> <circle cx="25.191" cy="3.034" r="1"></circle> </g> </g></svg>';
|
|
|
|
const closeIcon = '<?xml version="1.0" ?><svg viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg"><title/><g fill="#bfb9b9"><path d="M48,0A48,48,0,1,0,96,48,48.0512,48.0512,0,0,0,48,0Zm0,84A36,36,0,1,1,84,48,36.0393,36.0393,0,0,1,48,84Z"/><path d="M64.2422,31.7578a5.9979,5.9979,0,0,0-8.4844,0L48,39.5156l-7.7578-7.7578a5.9994,5.9994,0,0,0-8.4844,8.4844L39.5156,48l-7.7578,7.7578a5.9994,5.9994,0,1,0,8.4844,8.4844L48,56.4844l7.7578,7.7578a5.9994,5.9994,0,0,0,8.4844-8.4844L56.4844,48l7.7578-7.7578A5.9979,5.9979,0,0,0,64.2422,31.7578Z"/></g></svg>';
|
|
|
|
/*
|
|
*--------------------------------------------------------------------------
|
|
* CONFIG OR SETTINGS - Customize the popup banner START
|
|
*--------------------------------------------------------------------------
|
|
*/
|
|
const config = {
|
|
themeSettings: {
|
|
primaryColor: "#000", // Primary Color of Popup Banner
|
|
darkColor: "#3b3e4a", // Dark Theme Color
|
|
lightColor: "#ffffff", // Light Theme Color
|
|
themeMode: "light", // Theme Mode (light|dark)
|
|
},
|
|
enableGoogleConsentMode: true, // Add support for Google consent mode v2 (https://cookiebannergenerator.com/implementing-google-consent-mode-v2-with-cookie-notice-pro-a-step-by-step-guide/)
|
|
enableMinimize: true, // Enable minimized floating cookie icon to adjust preferences
|
|
showCookieIcon: true, // Hide or show the cookie icon
|
|
showSettingsBtn: true, // Hide or show the preference settings(true|false)
|
|
showCloseIcon: false, // Hide or show the popup close icon(true|false)
|
|
showDeclineBtn: true, // Hide or show the cookie decline button(true|false)
|
|
fullWidth: false, // Full width popup works only when "displayPosition" is set to top/bottom
|
|
allCheckboxesChecked: true, // The setting checkboxes should be checked by default initially or not(true|false)
|
|
|
|
displayPosition: "bottom", // Where popup should appear(top|right|bottom|left)
|
|
settingsBtnLabel: "Adatta", // Text of settings button
|
|
|
|
delay: 1, // After how much time should popup appear(2000 is equal to 2 seconds)
|
|
expires: 365, // Expiry date of cookie(365 is equal to 365 days)
|
|
|
|
title: "Apprezziamo la privacy degli utenti", // Title of popup bannner
|
|
description: "Utilizziamo i cookie per migliorare la qualità della navigazione, mostrare pubblicità o contenuti personalizzati alle esigenze individuali degli utenti e analizzare il traffico sul sito. Cliccare sul pulsante 'Accetta tutto' implica il consenso all'utilizzo dei cookie da parte nostra.", // Message
|
|
acceptBtnLabel: "Accetta", // Accept cookie button text
|
|
declineInfoBtnLabel: "Rifiuta", // Decline cookie button text
|
|
moreInfoBtnLink: "/informativa-sulla-privacy", // Learn more link(default: privacy policy page)
|
|
moreInfoBtnLabel: "Informativa sulla privacy", // More info link text
|
|
cookieTypesTitle: "Scegli i file cookie da accettare", // Title of cookie preference options
|
|
necessaryCookieTypeLabel: "Necessario", // Label text of Necessary cookie item
|
|
floatingIconTooltip: "Adatta", // Tooltip of floating cookie icon (Minimized)
|
|
necessaryCookieTypeDesc: "Questi cookie sono essenziali per il funzionamento del sito web e non possono essere disattivati nei nostri sistemi.", // Hover text of necessary cookies
|
|
onConsentAccept: ()=> { // It will inject scripts in head if cookie preferences menu(showSettingsBtn) is enabled
|
|
console.log("Consent accepted!")
|
|
},
|
|
onConsentReject: ()=> { // This code will run on cookie reject/decline
|
|
console.log("Consent Rejected!");
|
|
},
|
|
cookieTypes: [
|
|
// Cookie types, value and description (Cookie Preferences Selection)
|
|
{
|
|
type: "Funzionali",
|
|
value: "preferences", // WARNING: DO NOT EDIT THIS VALUE
|
|
description: "I cookie essenziali sono fondamentali per le funzioni di base del sito web e il sito non funzionerà correttamente senza di essi. Questi cookie non memorizzano alcun dato che possa identificare una persona.",
|
|
},
|
|
{
|
|
type: "Pubblicità",
|
|
value: "marketing", // WARNING: DO NOT EDIT THIS VALUE
|
|
description: "I cookie pubblicitari sono utilizzati per fornire agli utenti annunci personalizzati basati sulle pagine che hanno visitato in precedenza e per analizzare l'efficacia delle campagne pubblicitarie.",
|
|
},
|
|
{
|
|
type: "Analitici",
|
|
value: "analytics", // WARNING: DO NOT EDIT THIS VALUE
|
|
description: "I cookie analitici servono a capire come gli utenti interagiscono con il sito web. Questi cookie aiutano a fornire informazioni sulle metriche di visitatori, il tasso di rimbalzo, la fonte del traffico, ecc.",
|
|
},
|
|
],
|
|
};
|
|
/*
|
|
*--------------------------------------------------------------------------
|
|
* CONFIG OR SETTINGS - Customize the popup banner END
|
|
*--------------------------------------------------------------------------
|
|
*/
|
|
|
|
const COOKIE_CONSENT = "cnp_consent"; // WARNING: DO NOT EDIT THIS VALUE
|
|
const COOKIE_CONSENT_PREFS = "cnp_prefs"; // WARNING: DO NOT EDIT THIS VALUE
|
|
const GOOGLE_CONSENT_MODE_AD_PREFS = "cnp_gconsent_ad_prefs" // WARNING: DO NOT EDIT THIS VALUE
|
|
const GOOGLE_CONSENT_MODE_ANALYTICS_STORAGE = "cnp_gconsent_analytics_storage" // WARNING: DO NOT EDIT THIS VALUE
|
|
|
|
$.fn.cookieNoticePro = (event) => {
|
|
changeRootVariables();
|
|
let cookieConsentExists = cookieExists(COOKIE_CONSENT);
|
|
let cookiePrefsValue = accessCookie(COOKIE_CONSENT_PREFS);
|
|
|
|
if ( !cookieConsentExists) {
|
|
// add layer to the body below cookies to prevent click
|
|
$('body').append('<div id="cookie-layer" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 9999; background: rgba(0, 0, 0, .2);"></div>');
|
|
}
|
|
|
|
// If consent is not accepted
|
|
if (!cookieConsentExists || event == "open") {
|
|
$("#cookieNoticePro").remove();
|
|
$("#cookieMinimizeIcon").remove();
|
|
|
|
let cookieTypes='<li><input type="checkbox" name="gdprPrefItem" value="necessary" checked="checked" disabled="disabled" data-compulsory="on"> <label title="'+config.necessaryCookieTypeDesc+'">'+config.necessaryCookieTypeLabel+"</label></li>";
|
|
|
|
const preferences = JSON.parse(cookiePrefsValue);
|
|
$.each(config.cookieTypes, (index, field) => {
|
|
if (field.type !== "" && field.value !== "") {
|
|
let cookieTypeDescription = "";
|
|
if (field.description !== false) {
|
|
cookieTypeDescription = ' title="' + field.description + '"';
|
|
}
|
|
cookieTypes+='<li><input type="checkbox" id="gdprPrefItem'+field.value+'" name="gdprPrefItem" value="'+field.value+'" data-compulsory="on"> <label for="gdprPrefItem'+field.value+'"'+cookieTypeDescription+">"+field.type+"</label></li>";
|
|
}
|
|
});
|
|
|
|
let cookieNotice='<div id="cookieNoticePro" class="'+config.themeSettings.themeMode+" display-"+config.displayPosition+" full-width-"+config.fullWidth+'"><div id="closeIcon">'+ closeIcon +'</div><div class="title-wrap">'+cookieIcon+"<h4>"+config.title+'</h4></div><div class="content-wrap"><div class="msg-wrap"><p>'+config.description+' <a style="color:'+config.themeSettings.primaryColor+';" href="'+ config.moreInfoBtnLink +'">'+config.moreInfoBtnLabel+'</a></p><div id="cookieSettings">'+settingsIcon+config.settingsBtnLabel+'</div><div id="cookieTypes" style="display:none;"><h5>'+config.cookieTypesTitle+"</h5><ul>"+cookieTypes+'</ul></div></div><div class="btn-wrap"><button id="cookieAccept" style="color:'+config.themeSettings.lightColor+";background:"+config.themeSettings.primaryColor+";border: 1px solid "+config.themeSettings.primaryColor+';" type="button">'+config.acceptBtnLabel+'</button><button id="cookieReject" style="color:'+config.themeSettings.primaryColor+";border: 1px solid "+config.themeSettings.primaryColor+';" type="button">'+config.declineInfoBtnLabel+"</button></div>";
|
|
|
|
|
|
setTimeout(() => {
|
|
$("body").append(cookieNotice);
|
|
$("#cookieNoticePro").hide().fadeIn("slow", () => {
|
|
if(event == "open") {
|
|
$("#cookieSettings").trigger("click");
|
|
$.each(preferences, (index, field) => {
|
|
$("input#gdprPrefItem" + field).prop("checked", true);
|
|
});
|
|
}
|
|
});
|
|
if(!config.showSettingsBtn) {
|
|
$("#cookieNoticePro #cookieSettings").hide();
|
|
}
|
|
if(!config.showDeclineBtn) {
|
|
$("#cookieNoticePro #cookieReject").hide();
|
|
}
|
|
if(!config.showCookieIcon) {
|
|
$("#cookieNoticePro #cookieIcon").hide();
|
|
}
|
|
if(!config.showCloseIcon) {
|
|
$("#cookieNoticePro #closeIcon").hide();
|
|
}
|
|
}, event === "open" ? 0 : config.delay);
|
|
$("body").on("click", "#cookieAccept", () => {
|
|
hideCookieBanner(true, config.expires);
|
|
$('input[name="gdprPrefItem"][data-compulsory="on"]').prop("checked", true);
|
|
let prefs = [];
|
|
$.each($('input[name="gdprPrefItem"]').serializeArray(), (i, field) => {
|
|
prefs.push(field.value);
|
|
});
|
|
createCookie(COOKIE_CONSENT_PREFS, encodeURIComponent(JSON.stringify(prefs)), {
|
|
expires: daysToUTC(365),
|
|
path: "/"
|
|
});
|
|
config.onConsentAccept.call(this);
|
|
config.showSettingsBtn? injectScripts() : null;
|
|
if(config.enableGoogleConsentMode) {
|
|
googleConsentModeHandler();
|
|
}
|
|
});
|
|
$("body").on("click", "#cookieSettings", () => {
|
|
if(event === "open"){
|
|
$('input[name="gdprPrefItem"]:not(:disabled)').attr("data-compulsory", "off").prop("checked", false);
|
|
$("#cookieTypes").slideDown("fast", function () {
|
|
$("#cookieSettings").prop("disabled", true);
|
|
});
|
|
} else {
|
|
$('input[name="gdprPrefItem"]:not(:disabled)').attr("data-compulsory", "off").prop("checked", config.allCheckboxesChecked);
|
|
$("#cookieTypes").toggle("fast", function () {
|
|
$("#cookieSettings").prop("disabled", false);
|
|
});
|
|
}
|
|
});
|
|
$("body").on("click", "#closeIcon", () => {
|
|
$("#cookieNoticePro").remove();
|
|
});
|
|
$("body").on("click", "#cookieReject", () => {
|
|
hideCookieBanner(false, config.expires);
|
|
config.onConsentReject.call(this);
|
|
|
|
// Delete prefs cookie from brower on reject
|
|
createCookie(COOKIE_CONSENT_PREFS, "", {
|
|
expires: daysToUTC(-365),
|
|
path: "/"
|
|
});
|
|
});
|
|
}
|
|
// If already consent is accepted, inject preferences
|
|
else {
|
|
if(config.showSettingsBtn) {
|
|
injectScripts();
|
|
}
|
|
if(config.enableMinimize){
|
|
minimizeCookieBanner();
|
|
}
|
|
if(config.enableGoogleConsentMode) {
|
|
googleConsentModeHandler();
|
|
}
|
|
}
|
|
|
|
|
|
};
|
|
|
|
/**
|
|
* Check if cookie exists
|
|
* @param {string} cookieName
|
|
*/
|
|
const cookieExists = (cookieName) => {
|
|
if(document.cookie.indexOf(cookieName) > -1){
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Create the cookie and hide the banner
|
|
* @param {string} value
|
|
* @param {string} expiryDays
|
|
*/
|
|
const hideCookieBanner = (value, expiryDays) => {
|
|
createCookie(COOKIE_CONSENT, value, {
|
|
expires: daysToUTC(expiryDays),
|
|
path: "/",
|
|
});
|
|
$("#cookieNoticePro").fadeOut("fast", () => {
|
|
$('body').off('click', "#cookieSettings");
|
|
$('body').off('click', "#cookieReject");
|
|
$('body').off('click', "#closeIcon");
|
|
$('body').off('click', "#cookieAccept");
|
|
$(this).remove();
|
|
});
|
|
if(config.enableMinimize) {
|
|
minimizeCookieBanner();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Minimize the cookie banner and show a minimized icon.
|
|
*/
|
|
const minimizeCookieBanner = () => {
|
|
$( '#cookie-layer' ).remove();
|
|
// Remove any existing minimize icon before appending a new one.
|
|
$('#cookieMinimizeIcon').remove();
|
|
|
|
// Minimize the banner and show an icon instead.
|
|
let minimizeIcon = $('<div id="cookieMinimizeIcon" class="zoomIn" >' + cookieIcon + '<div class="floating-text">'+ config.floatingIconTooltip +'</div></div>');
|
|
$('body').append(minimizeIcon);
|
|
|
|
// Define the click behavior for the minimize icon.
|
|
$('#cookieMinimizeIcon').on('click', function() {
|
|
if ($(this).hasClass('zoomIn')) {
|
|
$(this).removeClass('zoomIn').addClass('zoomOut');
|
|
setTimeout(() => {
|
|
$.fn.cookieNoticePro("open"); // Reopen the cookie notice
|
|
}, 200); // Match the timeout to the animation duration
|
|
} else {
|
|
$(this).removeClass('zoomOut').addClass('zoomIn');
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Set Cookie
|
|
* @param {string} name - Cookie Name
|
|
* @param {string} value - Cookie Value
|
|
* @param {string} expiryDays - Expiry Date of cookie
|
|
*/
|
|
const createCookie = (name, value, options={})=> {
|
|
document.cookie = `${name}=${value}${
|
|
Object.keys(options)
|
|
.reduce((acc, key) => {
|
|
return acc + `;${key.replace(/([A-Z])/g, $1 => '-' + $1.toLowerCase())}=${
|
|
options[key]}`;
|
|
}, '')
|
|
}`;
|
|
};
|
|
|
|
/**
|
|
* Converts Days Into UTC String
|
|
* @param {number} days - Name of the cookie
|
|
* @return {string} UTC date string
|
|
*/
|
|
const daysToUTC = (days) => {
|
|
const newDate = new Date();
|
|
newDate.setTime(newDate.getTime() + days * 24 * 60 * 60 * 1000);
|
|
return newDate.toUTCString();
|
|
};
|
|
|
|
/**
|
|
* Get Cookie By Name
|
|
* @param {string} name - Name of the cookie
|
|
* @return {string(number|Array)} Value of the cookie
|
|
*/
|
|
const accessCookie = (name) => {
|
|
const cookies = document.cookie.split(";").reduce((acc, cookieString) => {
|
|
const [key, value] = cookieString.split("=").map((s) => s.trim());
|
|
if (key && value) {
|
|
acc[key] = decodeURIComponent(value);
|
|
}
|
|
return acc;
|
|
}, {});
|
|
return name ? cookies[name] || false : cookies;
|
|
};
|
|
|
|
/**
|
|
* Updates Google Consent Mode based on user consent and preferences.
|
|
*/
|
|
const googleConsentModeHandler = () => {
|
|
if(!config.enableGoogleConsentMode) return;
|
|
const consent = JSON.parse(accessCookie(COOKIE_CONSENT));
|
|
const preferences = JSON.parse(accessCookie(COOKIE_CONSENT_PREFS));
|
|
const googleConsentAnalyticsStorage = JSON.parse(accessCookie(GOOGLE_CONSENT_MODE_ANALYTICS_STORAGE));
|
|
const googleConsentAdPrefs = JSON.parse(accessCookie(GOOGLE_CONSENT_MODE_AD_PREFS));
|
|
|
|
try {
|
|
if(consent === true) {
|
|
// if analytics is accepted
|
|
if(preferences.indexOf("analytics") > -1) {
|
|
if(!googleConsentAnalyticsStorage) {
|
|
createCookie(GOOGLE_CONSENT_MODE_ANALYTICS_STORAGE, encodeURIComponent(true), {
|
|
expires: daysToUTC(365),
|
|
path: "/"
|
|
});
|
|
gtag('consent', 'update', {
|
|
'analytics_storage': 'granted'
|
|
});
|
|
}
|
|
} else {
|
|
if(googleConsentAnalyticsStorage === true) {
|
|
gtag('consent', 'update', {
|
|
'analytics_storage': 'denied'
|
|
});
|
|
createCookie(GOOGLE_CONSENT_MODE_ANALYTICS_STORAGE, "", {
|
|
expires: daysToUTC(-365),
|
|
path: "/"
|
|
});
|
|
}
|
|
}
|
|
// if marketing or advertising is accepted
|
|
if( preferences.indexOf("marketing") > -1) {
|
|
if(!googleConsentAdPrefs) {
|
|
createCookie(GOOGLE_CONSENT_MODE_AD_PREFS, encodeURIComponent(true), {
|
|
expires: daysToUTC(365),
|
|
path: "/"
|
|
});
|
|
gtag('consent', 'update', {
|
|
'ad_storage': 'granted',
|
|
'ad_user_data': 'granted',
|
|
'ad_personalization': 'granted'
|
|
});
|
|
}
|
|
} else {
|
|
if(googleConsentAdPrefs === true) {
|
|
gtag('consent', 'update', {
|
|
'ad_storage': 'denied',
|
|
'ad_user_data': 'denied',
|
|
'ad_personalization': 'denied'
|
|
});
|
|
createCookie(GOOGLE_CONSENT_MODE_AD_PREFS, "", {
|
|
expires: daysToUTC(-365),
|
|
path: "/"
|
|
});
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
} catch (error) {
|
|
console.warn("CookieNoticePro: Error initializing Google Consent Mode. Ensure gtag.js is correctly installed:", error);
|
|
}
|
|
}
|
|
|
|
const changeRootVariables = () =>{
|
|
$(':root').css('--cookieNoticeProLight', config.themeSettings.lightColor);
|
|
$(':root').css('--cookieNoticeProDark', config.themeSettings.darkColor);
|
|
}
|
|
|
|
return window.cookieNoticePro = {
|
|
init:()=>{
|
|
$.fn.cookieNoticePro();
|
|
},
|
|
/**
|
|
* Reopens the cookie notice banner
|
|
*/
|
|
reinit:()=>{
|
|
$.fn.cookieNoticePro("open");
|
|
},
|
|
|
|
/**
|
|
* Returns true if consent is given else false
|
|
*/
|
|
isAccepted: ()=>{
|
|
let consent = accessCookie(COOKIE_CONSENT);
|
|
return JSON.parse(consent);
|
|
},
|
|
|
|
/**
|
|
* Returns the value of the cookieConsentPrefs cookie
|
|
*/
|
|
getPreferences: ()=>{
|
|
let preferences = accessCookie(COOKIE_CONSENT_PREFS);
|
|
return JSON.parse(preferences);
|
|
},
|
|
|
|
/**
|
|
* Check if a particular preference is accepted
|
|
* @param {string} cookieName
|
|
*/
|
|
isPreferenceAccepted: (cookieTypeValue)=>{
|
|
let consent = JSON.parse(accessCookie(COOKIE_CONSENT));
|
|
let preferences = accessCookie(COOKIE_CONSENT_PREFS);
|
|
preferences = JSON.parse(preferences);
|
|
if (consent === false) {
|
|
return false;
|
|
}
|
|
if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
};
|
|
})(jQuery);
|