@@ -7,66 +7,65 @@ use Magento\Framework\View\Helper\SecureHtmlRenderer;
77
88/** @var SecureHtmlRenderer $secureRenderer */
99/** @var Script $viewModel */
10+
1011$ viewModel = $ block ->getData ('view_model ' );
12+ $ consentMessage
13+ = "Please <a href='javascript:Cookiebot.renew()' class='cookiebot-iframe-consent-link'>accept %1 cookies</a> to view this %2 content. " ;
14+
15+ $ scriptString = '
16+ document.addEventListener("DOMContentLoaded", function () {
17+ ((document, selector, consentType) => {
18+ const createTextNode = text => document.createTextNode(text);
19+ const createElement = element => document.createElement(element);
20+
21+ document.querySelectorAll(selector).forEach(iframe => {
22+ const divElement = createElement("div");
23+ const paragraphElement = createElement("p");
24+ const iframeSrc = iframe.dataset.cookieblockSrc;
25+
26+ // Detect service provider type
27+ const serviceProvider =
28+ /google\.com\/maps\/embed/.test(iframeSrc) ? "Google Maps" :
29+ /player\.vimeo\.com\/video\//.test(iframeSrc) ? "Vimeo" :
30+ /youtube(-nocookie)?\.com\/embed\//.test(iframeSrc) ? "YouTube" :
31+ undefined;
1132
12- // Prepare translations
13- $ acceptText = __ ( ' accept %1 cookies ' , ' marketing ' ) ;
14- $ consentMessage = __ ( ' Please %1 to view this %2 content. ' );
33+ if (!serviceProvider) {
34+ return ;
35+ }
1536
16- $ jsTranslations = [
17- 'acceptText ' => $ acceptText ,
18- 'consentMessage ' => $ consentMessage ,
19- ];
20- ?>
37+ const iframeHeight = iframe.getBoundingClientRect().height;
38+ const iframeWidth = iframe.getBoundingClientRect().width;
2139
22- <script type="text/javascript" data-cookieconsent="ignore">
23- document.addEventListener("DOMContentLoaded", function() {
24- ((document, selector, consentType, translations) => {
25- const createTextNode = text => document.createTextNode(text);
26- const createElement = element => document.createElement(element);
27-
28- document.querySelectorAll(selector).forEach(iframe => {
29- const linkElement = createElement("a");
30- const divElement = createElement("div");
31- const paragraphElement = createElement("p");
32- const iframeSrc = iframe.dataset.cookieblockSrc;
33-
34- // Detect service provider type
35- const serviceProvider =
36- /google\.com\/maps\/embed/.test(iframeSrc) ? "Google Maps" :
37- /player\.vimeo\.com\/video\//.test(iframeSrc) ? "Vimeo" :
38- /youtube(-nocookie)?\.com\/embed\//.test(iframeSrc) ? "YouTube" :
39- undefined;
40-
41- if (!serviceProvider) {
42- return;
43- }
44-
45- const iframeHeight = iframe.getBoundingClientRect().height;
46- const iframeWidth = iframe.getBoundingClientRect().width;
47-
48- // Create placeholder content
49- divElement.innerHTML = `
50- <div style="background-color:#CCC;display:inline-block;height:${iframeHeight}px;position:relative;width:${iframeWidth}px;">
51- <div style="background-color:#848484;border-radius:15px;height:50%;position:absolute;transform:translate(50%,50%);width:50%;">
52- <p style="color:#FFF;font-size:7.5em;position:relative;top:50%;left:50%;margin:0;text-align:center;transform:translate(-50%,-50%);">⋯</p>
40+ // Create placeholder content
41+ divElement.innerHTML = `
42+ <div style="background-color:#CCC;display:inline-block;height:${iframeHeight}px;position:relative;width:${iframeWidth}px;">
43+ <div style="background-color:#848484;border-radius:15px;height:50%;position:absolute;transform:translate(50%,50%);width:50%;">
44+ <p style="color:#FFF;font-size:7.5em;position:relative;top:50%;left:50%;margin:0;text-align:center;transform:translate(-50%,-50%);">⋯</p>
45+ </div>
5346 </div>
54- </div>
55- `;
56-
57- // Setup consent message and button
58- divElement.classList.add(`cookieconsent-optout-${consentType}`);
59- linkElement.textContent = translations.acceptText.replace('%1', consentType);
60- linkElement.href = "javascript:Cookiebot.renew()";
61- const message = translations.consentMessage
62- .replace('%1', linkElement.outerHTML)
63- .replace('%2', serviceProvider);
64- paragraphElement.innerHTML = message;
65-
66- divElement.style.fontSize = "1.4rem";
67- divElement.append(paragraphElement);
68- iframe.parentNode.insertBefore(divElement, iframe);
69- });
70- })(document, "iframe[data-cookieblock-src]", "marketing", <?php echo json_encode ($ jsTranslations ); ?> );
71- });
72- </script>
47+ `;
48+
49+ // Setup consent message and button
50+ divElement.classList.add(`cookieconsent-optout-${consentType}`);
51+ const consentMessage = " ' . $ consentMessage . '";
52+ const message = consentMessage
53+ .replace("%1", consentType)
54+ .replace("%2", serviceProvider);
55+ paragraphElement.innerHTML = message;
56+
57+ divElement.style.fontSize = "1.4rem";
58+ divElement.append(paragraphElement);
59+ iframe.parentNode.insertBefore(divElement, iframe);
60+ });
61+ })(document, "iframe[data-cookieblock-src]", "marketing");
62+ })
63+ ' ;
64+
65+ // checking on if SecureHtmlRenderer exists first, because this module is still compatible with Magento 2.3.x which doesn't include this class
66+ if (class_exists (SecureHtmlRenderer::class)) {
67+ echo $ secureRenderer ->renderTag ('script ' , ['data-cookieconsent ' => 'ignore ' ], $ scriptString , false );
68+ } else {
69+ echo '<script data-cookieconsent="ignore"> ' . $ scriptString . '</script> ' ;
70+ }
71+
0 commit comments