Skip to content

Commit 33c1998

Browse files
committed
Add video blocker for page-builder, DEV-1111
Signed-off-by: Iman Aboheydary <[email protected]>
1 parent 193be9e commit 33c1998

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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%);">&ctdot;</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

Comments
 (0)