1"use strict"; 2 3(function (Drupal, drupalSettings, once) { 4 'use strict'; 5 6 Drupal.behaviors.datalayerPageEvents = { 7 attach: function attach(context, settings) { 8 window.dataLayer = window.dataLayer || []; 9 if (context === document) { 10 once('kotk-tracking-button-click', 'html', context).forEach(function (element) { 11 element.addEventListener('click', function (event) { 12 var clickedButton = event.target.closest('a.btn.btn-primary, a.btn.btn-secondary, a.btn.btn-white, a.btn.btn-outline-primary, a.card-link'); 13 if (!clickedButton) { 14 return; 15 } 16 var card = clickedButton.closest('.card'); 17 var trackedButton = clickedButton; 18 if (clickedButton.matches('.card-link') && card) { 19 var chatContainers = card.querySelectorAll('#sittoolDiv, #NoChatBtn'); 20 var visibleChatContainer = Array.from(chatContainers).find(function (container) { 21 return window.getComputedStyle(container).display !== 'none'; 22 }); 23 trackedButton = (visibleChatContainer === null || visibleChatContainer === void 0 ? void 0 : visibleChatContainer.querySelector('a')) || card.querySelector('div.field--name-field-par-link a') || clickedButton; 24 } 25 var targetUrl = trackedButton.getAttribute('href') || ''; 26 window.dataLayer.push({ 27 'event': 'button_click', 28 'name': trackedButton.textContent.trim(), 29 'targeturl': targetUrl, 30 'targettype': targetUrl.startsWith('http') ? 'external' : 'internal' 31 }); 32 }); 33 }); 34 35 // Wait a little for the Open Chat button to become available. 36 setTimeout(function () { 37 var buttonElement = document.querySelectorAll('a.btn.btn-primary, a.btn.btn-secondary, a.btn.btn-white, a.btn.btn-outline-primary, a.sittoolButton, #NoChatBtn > a'); 38 if (buttonElement) { 39 var observerOptions = { 40 root: null, 41 // viewport 42 threshold: 0.75 // Trigger when 75% of the button is visible 43 }; 44 var observer = new IntersectionObserver(function (entries, observer) { 45 entries.forEach(function (entry) { 46 if (entry.isIntersecting) { 47 // Push event to dataLayer 48 window.dataLayer.push({ 49 'event': 'button_impression', 50 'name': entry.target.textContent.trim(), 51 'targeturl': entry.target.getAttribute('href'), 52 'targettype': entry.target.getAttribute('href').startsWith('http') ? 'external' : 'internal' 53 }); 54 55 // Stop observing after the first view 56 // observer.unobserve(entry.target); 57 } 58 }); 59 }, observerOptions); 60 buttonElement.forEach(function (button) { 61 observer.observe(button); 62 }); 63 } 64 }, 1500); 65 } 66 } 67 }; 68})(Drupal, drupalSettings, once);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.