fix: adjust vwo script to listen to consent changes

This commit is contained in:
Arvid Norlin
2024-04-16 14:27:40 +02:00
parent 9ea1251843
commit 521abd94cd

View File

@@ -1,302 +1,206 @@
//DO NOT make any changes to smart code except for entering your account id //DO NOT make any changes to smart code except for entering your account id
window._vwo_code || window._vwo_code ||
(function () { (function () {
var account_id = 373511, var account_id = 373511,
version = 2.0, version = 2.0,
settings_tolerance = 2000, settings_tolerance = 2000,
hide_element = "body", hide_element = "body",
hide_element_style = hide_element_style =
"opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important", "opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important",
/* DO NOT EDIT BELOW THIS LINE */ /* DO NOT EDIT BELOW THIS LINE */
f = false, f = false,
w = window, w = window,
d = document, d = document,
v = d.querySelector("#vwoCode"), v = d.querySelector("#vwoCode"),
cK = "_vwo_" + account_id + "_settings", cK = "_vwo_" + account_id + "_settings",
cc = {}; cc = {};
try { try {
var c = JSON.parse( var c = JSON.parse(
localStorage.getItem("_vwo_" + account_id + "_config") localStorage.getItem("_vwo_" + account_id + "_config")
);
cc = c && typeof c === "object" ? c : {};
} catch (e) {}
var stT = cc.stT === "session" ? w.sessionStorage : w.localStorage;
code = {
use_existing_jquery: function () {
return typeof use_existing_jquery !== "undefined"
? use_existing_jquery
: undefined;
},
library_tolerance: function () {
return typeof library_tolerance !== "undefined"
? library_tolerance
: undefined;
},
settings_tolerance: function () {
return cc.sT || settings_tolerance;
},
hide_element_style: function () {
return "{" + (cc.hES || hide_element_style) + "}";
},
hide_element: function () {
return typeof cc.hE === "string" ? cc.hE : hide_element;
},
getVersion: function () {
return version;
},
finish: function () {
if (!f) {
f = true;
var a = d.getElementById("_vis_opt_path_hides");
if (a) a.parentNode.removeChild(a);
}
},
finished: function () {
return f;
},
load: function (a) {
var s = this.getSettings(),
b = d.createElement("script"),
t = this;
if (s) {
b.textContent = s;
d.getElementsByTagName("head")[0].appendChild(b);
if (!w.VWO || VWO.caE) {
stT.removeItem(cK);
t.load(a);
}
} else {
b.fetchPriority = "high";
b.src = a;
b.type = "text/javascript";
b.onerror = function () {
window._vwo_code.finish();
};
d.getElementsByTagName("head")[0].appendChild(b);
}
},
getSettings: function () {
try {
var i = stT.getItem(cK);
if (!i) {
return;
}
i = JSON.parse(i);
if (Date.now() > i.e) {
stT.removeItem(cK);
return;
}
return i.s;
} catch (e) {
return;
}
},
init: function () {
if (d.URL.indexOf("__vwo_disable__") > -1) return;
var sT = this.settings_tolerance();
w._vwo_settings_timer = setTimeout(function () {
window._vwo_code.finish();
stT.removeItem(cK);
window._vwo_code.removeLoaderAndOverlay();
}, sT);
var filterConfig = this.filterConfig;
if (!filterConfig || filterConfig.filterTime === "balanced") {
var cS = d.currentScript,
a = d.createElement("style"),
hE = this.hide_element(),
b =
cS && !cS.async && hE
? hE + "{" + this.hide_element_style() + "}"
: "",
h = d.getElementsByTagName("head")[0];
a.setAttribute("id", "_vis_opt_path_hides");
v && a.setAttribute("nonce", v.nonce);
a.setAttribute("type", "text/css");
if (a.styleSheet) a.styleSheet.cssText = b;
else a.appendChild(d.createTextNode(b));
h.appendChild(a);
}
if (filterConfig && filterConfig.filterTime === "early") {
this.removeLoaderAndOverlay();
}
this.load(
"https://dev.visualwebsiteoptimizer.com/j.php?a=" +
account_id +
"&u=" +
encodeURIComponent(d.URL) +
"&vn=" +
version
); );
}, cc = c && typeof c === "object" ? c : {};
setFilterConfigAndApplyFilter: function (config) { } catch (e) {}
if (!config) { var stT = cc.stT === "session" ? w.sessionStorage : w.localStorage;
// No config will lead to early return and no addition of smart code code = {
return; use_existing_jquery: function () {
} return typeof use_existing_jquery !== "undefined"
var state = this.isNonLiveMode(account_id) || config.isConsentGiven(); ? use_existing_jquery
if (state === "1") { : undefined;
// if cookie consent was already given and the cookies were already accepted, execute out normal flow },
hide_element = "body"; library_tolerance: function () {
w._vwo_settings_timer = window._vwo_code.init(); return typeof library_tolerance !== "undefined"
return; ? library_tolerance
} else if (state === "2") { : undefined;
return; },
} settings_tolerance: function () {
return cc.sT || settings_tolerance;
if (!config.filterTolerance) { },
// Execute removal logic immediately when filterTolerance is 0 or empty hide_element_style: function () {
return; return "{" + (cc.hES || hide_element_style) + "}";
} },
hide_element: function () {
function clearIntervals(timerIds) { return typeof cc.hE === "string" ? cc.hE : hide_element;
for (var i = 0; i < timerIds.length; i++) { },
clearInterval(timerIds[i]); getVersion: function () {
return version;
},
finish: function () {
if (!f) {
f = true;
var a = d.getElementById("_vis_opt_path_hides");
if (a) a.parentNode.removeChild(a);
} }
} },
this.filterConfig = config; finished: function () {
var popupTimer = setInterval(function () { return f;
if (window._vwo_code.applyFilters(config)) { },
clearInterval(popupTimer); load: function (a) {
} var s = this.getSettings(),
}, 100); b = d.createElement("script"),
var timer = setInterval(function () { t = this;
var state = config.isConsentGiven(); if (s) {
var shouldClearAllIntervals; b.textContent = s;
if (state === "1") { d.getElementsByTagName("head")[0].appendChild(b);
window._vwo_code.showLoader(); if (!w.VWO || VWO.caE) {
w._vwo_settings_timer = window._vwo_code.init(); stT.removeItem(cK);
shouldClearAllIntervals = true; t.load(a);
} else if (state === "2") { }
window._vwo_code.filterConfig = undefined;
window._vwo_code.removeLoaderAndOverlay();
shouldClearAllIntervals = true;
}
if (shouldClearAllIntervals) {
clearIntervals([timer, popupTimer]);
clearInterval(filterToleranceTimer);
}
}, 100);
var filterToleranceTimer;
// RECOMMENDED: When using Best Approach
filterToleranceTimer = setTimeout(function () {
window._vwo_code.removeLoaderAndOverlay();
clearIntervals([timer, popupTimer]);
}, config.filterTolerance);
},
showLoader: function () {
var vwoOverlay = d.getElementsByClassName("vwo-overlay")[0];
if (!vwoOverlay) return;
var vwoContentLoader = d.createElement("div");
vwoContentLoader.classList.add("vwo-content-loader");
vwoOverlay.parentNode.insertBefore(
vwoContentLoader,
vwoOverlay.nextSibling
);
},
applyFilters: function (config) {
var popup = d.querySelector(config.popupSelector);
var popupZIndex;
if (!popup && d.getElementById("_vis_opt_overlay")) {
return;
}
var maxZIndex = 2147483647;
if (popup) {
var popupStyle = w.getComputedStyle(popup);
popupZIndex = popupStyle.getPropertyValue("z-index");
if (!popupZIndex || popupZIndex === "auto") {
popupZIndex = maxZIndex;
}
popup.style.zIndex = popupZIndex;
}
popupZIndex = popupZIndex || maxZIndex;
// You can change the styling to suit your requirements
// This is the default CSS filters VWO provides
// NOTE: do not change any class names IMPORTANT ...
var vwoFilter =
"position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; width: 100%; -webkit-filter: blur(5px); filter: blur(5px); backdrop-filter: saturate(180%) blur(3px); -webkit-backdrop-filter: saturate(180%) blur(3px); z-index:" +
(popupZIndex - 1) +
";",
vwoLoaderCss =
" .vwo-content-loader{ border: 16px solid #f3f3f3; border-top: 16px solid #3498db; border-radius: 50%; width: 90px; height: 90px; position: fixed; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); animation: vwo-spin 2s linear infinite; z-index:" +
(popupZIndex - 1) +
"; }" +
"@keyframes vwo-spin { 0% { -webkit-transform: translate(-50%, -50%) rotate(0deg); transform: translate(-50%, -50%) rotate(0deg); } 100% { -webkit-transform: translate(-50%, -50%) rotate(360deg); transform: translate(-50%, -50%) rotate(360deg); } }";
/**
* This below written code should not be tweaked
* */
var overlayStyleTag = d.getElementById("_vis_opt_overlay"),
overlayCSS = ".vwo-overlay{" + vwoFilter + "}" + vwoLoaderCss;
if (overlayStyleTag) {
if (overlayStyleTag.styleSheet) {
overlayStyleTag.styleSheet.cssText = overlayCSS;
} else { } else {
var _vwo_textNode = d.createTextNode(overlayCSS); b.fetchPriority = "high";
overlayStyleTag.appendChild(_vwo_textNode); b.src = a;
overlayStyleTag.removeChild(overlayStyleTag.childNodes[0]); b.type = "text/javascript";
b.onerror = function () {
window._vwo_code.finish();
};
d.getElementsByTagName("head")[0].appendChild(b);
} }
} else { },
var a = d.createElement("style"), getSettings: function () {
h = d.getElementsByTagName("head")[0], try {
body = d.getElementsByTagName("body")[0]; var i = stT.getItem(cK);
var vwoOverlay = d.createElement("div"); if (!i) {
vwoOverlay.classList.add("vwo-overlay"); return;
body.prepend(vwoOverlay); }
// CAUTION Do not remove this id from your style tag. It is required by VWO i = JSON.parse(i);
a.setAttribute("id", "_vis_opt_overlay"); if (Date.now() > i.e) {
a.setAttribute("type", "text/css"); stT.removeItem(cK);
if (a.styleSheet) a.styleSheet.cssText = overlayCSS; return;
else a.appendChild(d.createTextNode(overlayCSS)); }
h.appendChild(a); return i.s;
} } catch (e) {
return !!popup; return;
}, }
removeLoaderAndOverlay: function () { },
var overlay = d.getElementsByClassName("vwo-overlay");
var loader = d.getElementsByClassName("vwo-content-loader"); init: function () {
var overlayStyleTag = d.getElementById("_vis_opt_overlay"); if (d.URL.indexOf("__vwo_disable__") > -1) return;
overlay && var sT = this.settings_tolerance();
(overlay = overlay[0]) && w._vwo_settings_timer = setTimeout(function () {
overlay.parentElement.removeChild(overlay); window._vwo_code.finish();
loader && stT.removeItem(cK);
(loader = loader[0]) && }, sT);
loader.parentElement.removeChild(loader); var filterConfig = this.filterConfig;
overlayStyleTag && if (!filterConfig || filterConfig.filterTime === "balanced") {
overlayStyleTag.parentElement.removeChild(overlayStyleTag); var cS = d.currentScript,
}, a = d.createElement("style"),
isNonLiveMode: function (accountId) { hE = this.hide_element(),
var wName = w.name; b =
if (!wName) { cS && !cS.async && hE
return; ? hE + "{" + this.hide_element_style() + "}"
} : "",
return ( h = d.getElementsByTagName("head")[0];
(wName.indexOf("_vis_editor") > -1 || a.setAttribute("id", "_vis_opt_path_hides");
wName.indexOf("_vis_preview_" + accountId) > -1 || v && a.setAttribute("nonce", v.nonce);
wName.indexOf("_vis_heatmap_" + accountId) > -1) && a.setAttribute("type", "text/css");
"1" if (a.styleSheet) a.styleSheet.cssText = b;
); else a.appendChild(d.createTextNode(b));
}, h.appendChild(a);
}; }
w._vwo_code = code; this.load(
})(); "https://dev.visualwebsiteoptimizer.com/j.php?a=" +
account_id +
"&u=" +
encodeURIComponent(d.URL) +
"&vn=" +
version
);
},
setFilterConfigAndApplyFilter: function (config) {
if (!config) {
// No config will lead to early return and no addition of smart code
return;
}
var state = this.isNonLiveMode(account_id) || config.isConsentGiven();
if (state === "1") {
// if cookie consent was already given and the cookies were already accepted, execute out normal flow
hide_element = "body";
w._vwo_settings_timer = window._vwo_code.init();
return;
} else if (state === "2") {
return;
}
this.filterConfig = config;
var timer = setInterval(function () {
var state = config.isConsentGiven();
var shouldClearInterval;
if (state === "1") {
w._vwo_settings_timer = window._vwo_code.init();
shouldClearInterval = true;
} else if (state === "2") {
window._vwo_code.filterConfig = undefined;
shouldClearInterval = true;
}
if (shouldClearInterval) {
clearInterval(timer);
}
}, 100);
},
isNonLiveMode: function (accountId) {
var wName = w.name;
if (!wName) {
return;
}
return (
(wName.indexOf("_vis_editor") > -1 ||
wName.indexOf("_vis_preview_" + accountId) > -1 ||
wName.indexOf("_vis_heatmap_" + accountId) > -1) &&
"1"
);
},
};
w._vwo_code = code;
})();
window._vwo_code.setFilterConfigAndApplyFilter({ window._vwo_code.setFilterConfigAndApplyFilter({
popupSelector: "#CybotCookiebotDialog", popupSelector: "#CybotCookiebotDialog",
filterTime: "balanced", filterTime: "balanced",
isConsentGiven: function () { isConsentGiven: function () {
/** your custom Code */ /** your custom Code */
if (document.cookie.indexOf("CookieConsent") != -1) { if (document.cookie.indexOf("CookieConsent") != -1) {
var ccValue = decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent("CookieConsent").replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null; var ccValue =
let consentValue = "2"; decodeURIComponent(
if (ccValue) { document.cookie.replace(
ccValue = ccValue.substring(ccValue.indexOf(",statistics")+12); new RegExp(
"(?:(?:^|.*;)\\s*" +
encodeURIComponent("CookieConsent").replace(
/[\-\.\+\*]/g,
"\\$&"
) +
"\\s*\\=\\s*([^;]*).*$)|^.*$"
),
"$1"
)
) || null;
let consentValue = "2";
if (ccValue) {
ccValue = ccValue.substring(ccValue.indexOf(",statistics") + 12);
ccValue = ccValue.substring(0, ccValue.indexOf(",")); ccValue = ccValue.substring(0, ccValue.indexOf(","));
consentValue = ccValue === "true" ? "1" : "2"; consentValue = ccValue === "true" ? "1" : "2";
}
return consentValue;
} else {
return "3";
} }
return consentValue; },
} else {
return "3";
}
},
filterTolerance: 0,
}); });