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.