PageSourceSearch

https://www.lemo.com/modules/custom/lemo_tracking/js/lemo_tracking.js?v=1.x

js lemo.com collected 2026-10-04 00:47:19 UTC 5,603 bytes, 188 lines download raw bytes

1(function ($, Drupal, drupalSettings) {
2  var searchWord = '';
3  var searchResults = 0;
4  var searchTimeout;
5  var timer;
6  var searchButtonInput = '.header__search .header__search-form input[name="search"]';
7  var searchSpanResult = '.header__search footer a span';
8  var linkSearchResult = '.header__search footer a';
9  var linkSearchTitle = '.header__search .header__search-result-list a';
10  var searchButtonSubmit = '.header__search .header__search-form button[type="submit"]';
11
12  /**
13   * @param data
14   */
15  function addWebformConfirmationHit(data) {
16    pushDataLayerEvent(data);
17  }
18
19  /**
20   * @param data
21   */
22  function pushDataLayerEvent(data) {
23    var dataLayer = window.dataLayer = window.dataLayer || [];
24    dataLayer.push(data);
25  }
26
27  /**
28   *
29   * @param is
30   * @param event
31   */
32  function stopEvent(is, event) {
33    if (is) {
34      event.preventDefault();
35      event.stopPropagation();
36    }
37  }
38
39  /**
40   *
41   * @param event
42   */
43  function handleSearchEvent(event) {
44    searchWord = $(searchButtonInput).val();
45    searchResults = $(searchSpanResult).length
46      ? parseInt($(searchSpanResult).text().replace(/\(|\)/g, ''))
47      : 0;
48
49    if (searchWord) {
50      pushDataLayerEvent({
51        'event': 'search',
52        'search_term': searchWord,
53        'search_results': searchResults
54      });
55
56      stopEvent(false, event);
57    }
58  }
59
60  /**
61   *
62   * @param event
63   */
64  function handleSearchEventTimeOut(event) {
65    searchWord = $(searchButtonInput).val();
66    searchResults = $(searchSpanResult).length
67      ? parseInt($(searchSpanResult).text().replace(/\(|\)/g, ''))
68      : 0;
69
70    if (searchTimeout) {
71      clearTimeout(searchTimeout);
72    }
73
74    if (searchWord) {
75      searchTimeout = setTimeout(function () {
76        pushDataLayerEvent({
77          'event': 'search',
78          'search_term': searchWord,
79          'search_results': searchResults
80        });
81      }, 500); // 500 milliseconds (0.5 seconds)
82    }
83
84    stopEvent(false, event);
85  }
86  // Add value to object if exist to specific key.
87  function addIfExist(data, key, values, valueKey) {
88    if (typeof data[key] !== 'undefined') {
89      values[valueKey] = data[key];
90    }
91  }
92
93  function initTracking(langcode, pageType) {
94    var mageCacheStorage = localStorage.getItem('mage-cache-storage');
95    var data = {
96      'event': 'datalayer_init',
97      'page':{
98        'prefix': 'corp',
99        'country': 'en',
100        'language': langcode ? langcode : 'en',
101        'type': pageType ? pageType :  'other'
102      },
103    };
104
105    if (mageCacheStorage) {
106      mageCacheStorage = JSON.parse(mageCacheStorage);
107      if (mageCacheStorage.customer) {
108        data.user = {};
109        addIfExist(mageCacheStorage.customer, 'customerId', data.user, 'id');
110        addIfExist(mageCacheStorage.customer, 'ltvAmount', data.user, 'ltv_amount');
111        addIfExist(mageCacheStorage.customer, 'ltvOrder', data.user, 'ltv_order');
112        addIfExist(mageCacheStorage.customer, 'country', data.user, 'b
112illing_country');
113        addIfExist(mageCacheStorage.customer, 'isLoggedIn', data.user, 'is_logged');
114      }
115    }
116    pushDataLayerEvent(data);
117  }
118
119  Drupal.behaviors.lemoTracking = {
120    attach: function (context, settings) {
121      if (drupalSettings && drupalSettings.lemo_tracking) {
122        initTracking(drupalSettings.lemo_tracking.langcode, drupalSettings.lemo_tracking.datalayer_page_type);
123      }
124      
125      // Event listener for the Enter key press in the search input
126      $(searchButtonInput).on('keydown', function (event) {
127        if (event.key === 'Enter') {
128          handleSearchEventTimeOut(event);
129        }
130      });
131
132      // Event listener for clicking the search icon
133      $(searchButtonSubmit).on('click', function (event) {
134        handleSearchEventTimeOut(event);
135      });
136      // Event listener for clicking the search result
137      $(document).on("click", linkSearchTitle, handleSearchEvent);
138
139      // Event listener for clicking the number search result
140      $(document).on("click", linkSearchResult, handleSearchEvent);
141
142      //Event listener after 2 seconds of inactivity
143      $(searchButtonInput).on("input", function () {
144        clearTimeout(timer);
145        timer = setTimeout(function (event) {
146          searchWord = $(searchButtonInput).val();
147          if ($(searchSpanResult).length) {
148            searchResults = $(searchSpanResult).text().replace(/\(|\)/g, '');
149          } else {
150            searchResults = 0;
151          }
152          pushDataLayerEvent({
153            'event': 'search', 'search_term': searchWord, 'search_results': parseInt(searchResults)
154          });
155          stopEvent(false, event);
156
157        }, 2000); // 2000 millisecondes = 2 secondes
158      });
159
160      // Event listener after submitting contact-us form
161      $('#edit-reason-of-contact').on('change', function (event) {
162        localStorage.setItem('reason_of_contact', $(this).val());
163      });
164
165      $('.webform-submission-contact-us-form #edit-actions-submit').on('click', function (event) {
166        var formData = {
167          'event': 'form_submit',
168          'form_type': 'contact',
169          'contact_reason': localStorage.getItem('reason_of_contact')
170        };
171        pushDataLayerEvent(formData);
172      });
173
174      /**
175       *
176       * Add new command for contact confirmation
177       *
178       * @param ajax
179       * @param response
180       * @param status
181       */
182      Drupal.AjaxCommands.prototype.webformConfirmation = function (ajax, response, status) {
183        addWebformConfirmationHit(response.data);
184      };
185    }
186  };
187})(jQuery, Drupal, drupalSettings);
188

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.