PageSourceSearch

https://www.komoptegenkanker.be/modules/custom/kotk_tracking/assets/dist/js/datalayer_page_events.js?tltora

js komoptegenkanker.be collected 2026-09-24 09:26:55 UTC 3,110 bytes, 68 lines download raw bytes

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.