(function ($, Drupal, drupalSettings) { function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(";"); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == " ") { c = c.substring(1); } if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } function injectGTM(gtmId) { // Check if GTM is already loaded const check = document.getElementById("gtm-v2-loader"); if (check) { console.log("[info] GTM v2 already loaded."); return; } var ifr = document.createElement("iframe"); ifr.src = `https://www.googletagmanager.com/ns.html?id=${gtmId}`; ifr.height = "0"; ifr.width = "0"; ifr.style.display = "none"; ifr.style.visibility = "hidden"; var ns = document.createElement("noscript"); ns.appendChild(ifr); document.body.insertBefore(ns, document.body.firstChild); var s = document.createElement("script"); s.id = "gtm-v2-loader"; s.setAttribute( "src", `https://www.googletagmanager.com/gtm.js?id=${gtmId}` ); s.async = true; document.head.appendChild(s); window.dataLayer = window.dataLayer || []; window.gtag = function () { window.dataLayer.push({ "gtm.start": new Date().getTime(), event: "gtm.js", }); }; window.gtag(); console.log("[info] GTM v2 loaded."); } /** * @param {string} gtmId */ function checkAndInject(gtmId) { var cookieValue = getCookie("CookieConsent"); if (cookieValue !== "" && cookieValue.indexOf("statistics:true") > 0) { return injectGTM(gtmId); } console.log("[info] No privacy cookies accepted."); return false; } Drupal.behaviors.dabGTMv2 = { attach: function (context, settings) { /** * @type {string|undefined} gtmId */ const gtmId = drupalSettings?.dab_google_gtm_v2?.gtm_id; const gtmCookiebotEnabled = drupalSettings?.dab_google_gtm_v2?.gtm_cookiebot_enabled || false; if (!gtmId || gtmId.length <= 0) { return; } $(document.body) .once("dab-gtm-v2") .each(function () { $(function () { if (!gtmCookiebotEnabled) { return injectGTM(gtmId); } checkAndInject(gtmId); $(window).on("CookiebotOnAccept", function (e) { console.log("[event] Cookies accepted."); injectGTM(gtmId); }); }); }); }, }; })(jQuery, Drupal, drupalSettings);