1+ <?php
2+
3+ use Magento \Framework \View \Helper \SecureHtmlRenderer ;
4+
5+ /** @var SecureHtmlRenderer $secureRenderer */
6+
7+ $ addRequiredAttributesScript = '
8+ document.addEventListener("DOMContentLoaded", function() {
9+ const videoIframes = document.querySelectorAll(".pagebuilder-video-container iframe");
10+
11+ videoIframes.forEach((iframe) => {
12+ if (!Cookiebot?.consent?.marketing) {
13+ iframe.setAttribute("data-cookieblock-src", iframe.src);
14+ iframe.setAttribute("data-cookieconsent", "marketing");
15+ iframe.removeAttribute("src");
16+ iframe.closest("[data-content-type=\"video\"]").setAttribute("data-content-type", "image");
17+ }
18+ });
19+ });
20+
21+ addEventListener("CookiebotOnAccept", () => {
22+ const videoIframes = document.querySelectorAll(".pagebuilder-video-container iframe");
23+
24+ videoIframes.forEach((iframe) => {
25+ if (Cookiebot?.consent?.marketing) {
26+ if (iframe.closest("[data-content-type=\"image\"]")) {
27+ iframe.closest("[data-content-type=\"image\"]").setAttribute("data-content-type", "video");
28+ }
29+ }
30+ });
31+ });
32+
33+ addEventListener("CookiebotOnDecline", () => {
34+ const videoIframes = document.querySelectorAll(".pagebuilder-video-container iframe");
35+
36+ videoIframes.forEach((iframe) => {
37+ if (!Cookiebot?.consent?.marketing) {
38+ if (iframe.closest("[data-content-type=\"video\"]")) {
39+ iframe.closest("[data-content-type=\"video\"]").setAttribute("data-content-type", "image");
40+ }
41+ }
42+ });
43+ });
44+ ' ;
45+
46+ $ placeholderScript = '
47+ document.addEventListener("DOMContentLoaded", function() {
48+ ((document, selector, consentType) => {
49+ const createTextNode = text => document.createTextNode(text);
50+ const createElement = element => document.createElement(element);
51+ console.log("here");
52+ document.querySelectorAll(selector).forEach(iframe => {
53+ const linkElement = createElement("a");
54+ const divElement = createElement("div");
55+ const paragraphElement = createElement("p");
56+ const iframeSrc = iframe.dataset.cookieblockSrc;
57+
58+ // Detect service provider type
59+ const serviceProvider =
60+ /google\.com\/maps\/embed/.test(iframeSrc) ? "Google Maps" :
61+ /player\.vimeo\.com\/video\//.test(iframeSrc) ? "Vimeo" :
62+ /youtube(-nocookie)?\.com\/embed\//.test(iframeSrc) ? "YouTube" :
63+ undefined;
64+
65+ if (!serviceProvider) {
66+ return;
67+ }
68+
69+ const iframeHeight = iframe.getBoundingClientRect().height;
70+ const iframeWidth = iframe.getBoundingClientRect().width;
71+
72+ // Create placeholder content
73+ divElement.innerHTML = `
74+ <div style="background-color:#CCC;display:inline-block;height:${iframeHeight}px;position:relative;width:${iframeWidth}px;">
75+ <div style="background-color:#848484;border-radius:15px;height:50%;position:absolute;transform:translate(50%,50%);width:50%;">
76+ <p style="color:#FFF;font-size:7.5em;position:relative;top:50%;left:50%;margin:0;text-align:center;transform:translate(-50%,-50%);">⋯</p>
77+ </div>
78+ </div>
79+ `;
80+
81+ // Setup consent message and button
82+ divElement.classList.add(`cookieconsent-optout-${consentType}`);
83+ linkElement.textContent = `accept ${consentType} cookies`;
84+ linkElement.href = "javascript:Cookiebot.renew()";
85+ paragraphElement.append(
86+ createTextNode("Please "),
87+ linkElement,
88+ createTextNode(` to view this ${serviceProvider} content.`)
89+ );
90+
91+ divElement.append(paragraphElement);
92+ iframe.parentNode.insertBefore(divElement, iframe);
93+ });
94+ })(document, "iframe[data-cookieblock-src]", "marketing");
95+ });
96+ ' ;
97+
98+ // Render scripts with secure renderer
99+ echo $ secureRenderer ->renderTag (
100+ 'script ' ,
101+ ['type ' => 'text/javascript ' , 'data-cookieconsent ' => 'ignore ' ],
102+ $ addRequiredAttributesScript ,
103+ false
104+ );
105+
106+ echo $ secureRenderer ->renderTag (
107+ 'script ' ,
108+ ['type ' => 'text/javascript ' , 'data-cookieconsent ' => 'ignore ' ],
109+ $ placeholderScript ,
110+ false
111+ );
112+ ?>
0 commit comments