PageSourceSearch

https://www.intimina.com/modules/custom-intimina/lfi_datalayer/js/datalayers.js?v=1.1.x

js intimina.com collected 2026-10-03 22:11:17 UTC 4,216 bytes, 149 lines download raw bytes

1function handleBlockDatalayerEvents() {
2  const blockSelectors = [
3    ".view-display-id-group_page",
4    "[data-class='discovermorecardgrid']",
5  ];
6
7  blockSelectors.forEach(function (selector) {
8    const currentSelector = document.querySelector(selector);
9    const buttons = currentSelector?.getElementsByClassName("card__btn");
10
11    if (!buttons) {
12      return;
13    }
14
15    [...buttons]?.forEach((button) => {
16      button.addEventListener("click", (e) => {
17        const parentNode = button.parentNode;
18
19        const dataLayers = drupalSettings.lfi_datalayer;
20        const bvRaitingElements = parentNode?.getElementsByClassName(
21          "ecommerce-product-sku"
22        );
23
24        let productID;
25        [...bvRaitingElements]?.forEach((element) => {
26          if (element.getAttribute("data-bv-product-id")) {
27            productID = element.getAttribute("data-bv-product-id");
28          }
29        });
30
31        let event;
32        switch (selector) {
33          case "[data-class='discovermorecardgrid']":
34            event = dataLayers.related_products_block;
35            break;
36          case ".view-display-id-group_page":
37            event = dataLayers.category_page;
38            break;
39
40          default:
41            break;
42        }
43
44        if (event) {
45          if (selector === "[data-class='discovermorecardgrid']") {
46            const formattedItems = Object.values(event.ecommerce.items).flat();
47
48            event.ecommerce.items = formattedItems;
49          }
50
51          let product;
52
53          // Try to find bundle via the name (no BV on bundles)
54          if (!productID) {
55            const bundleName = parentNode?.querySelector(
56              ".card__bundle-title .field__item"
57            )?.innerText;
58            product = event.ecommerce.items.find(function (item) {
59              return item.item_name === bundleName;
60            });
61          } else {
62            product = event.ecommerce.items.find(function (item) {
63              return item.item_id === productID;
64            });
65          }
66
67          window.dataLayer.push({ ecommerce: null });
68          window.dataLayer.push({
69            event: "select_item",
70            ecommerce: {
71              items: [product],
72            },
73          });
74        }
75      });
76    });
77  });
78}
79
80/**
81 * This script handles various datalayer events such as user login,
82 * user register, category page visit and different block datalayers.
83 * @param {jQuery} $ - The jQuery object.
84 * @param {Drupal} Drupal - The Drupal object.
85 * @param {Object} drupalSettings - The Drupal settings object.
86 */
87(function ($, Drupal, drupalSettings) {
88  var initialized = false;
89
90  function init() {
91    if (!initialized) {
92      initialized = true;
93
94      const currentQuery = drupalSettings?.path?.currentQuery;
95
96      if (currentQuery?.check_logged_in === "1") {
97        window.dataLayer.push({ ecommerce: null });
98        window.dataLayer.push({
99          event: "login",
100          loginMethod: "email",
101          email: drupalSettings?.user?.hash_mail,
102          item_category5: "Sign in",
103        });
104      }
105
106      if (currentQuery?.registered) {
107        window.dataLayer.push({ ecommerce: null });
108        window.dataLayer.push({
109          event: "login",
110          loginMethod: "email",
111          item_category5: "Create account",
112        });
113      }
114
115      // Onload datalayers
116      const dataLayers = drupalSettings.lfi_datalayer;
117      const dlTypes = Object.keys(dataLayers || {});
118
119      if (dlTypes?.length) {
120        dlTypes.forEach((type) => {
121          const event = dataLayers[type];
122
123          if (type === "related_products_block") {
124            const formattedItems = Object.values(
125              event?.ecommerce?.items
126            ).flat();
127
128            event.ecommerce.items = formattedItems;
129          }
130
131          // Clear ecom object on non-ty page events
132          if (type !== "trans" && type !== "purchase") {
133            window.dataLayer.push({ ecommerce: null });
134          }
135
136          window.dataLayer.push(event);
137        });
138      }
139
140      handleBlockDatalayerEvents();
141    }
142  }
143
144  Drupal.behaviors.lfi_datalayer = {
145    attach: function attach() {
146      init();
147    },
148  };
149})(jQuery, Drupal, drupalSettings);

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.