1(function( $ ) { 2 'use strict'; 3 /** 4 * This enables you to define handlers, for when the DOM is ready: 5 * $(function() { }); 6 * When the window is loaded: 7 * $( window ).load(function() { }); 8 */ 9})( jQuery ); 10class TVC_GTM_Enhanced { 11 constructor(options = {}){ 12 this.options = { 13 tracking_option: 'UA' 14 }; 15 if(options){ 16 Object.assign(this.options, options); 17 } 18 //console.log(this.options); 19 //this.addEventBindings(); 20 } 21 singleProductaddToCartEventBindings(variations_data, product_detail_addtocart_selector){ 22 var single_btn = ""; 23 if(product_detail_addtocart_selector != ""){ 24 single_btn = document.querySelectorAll("button[class*='btn-buy-shop'],button[class*='single_add_to_cart_button'], button[class*='add_to_cart']"+product_detail_addtocart_selector); 25 }else{ 26 single_btn = document.querySelectorAll("button[class*='btn-buy-shop'],button[class*='single_add_to_cart_button'], button[class*='add_to_cart']"); 27 } 28 if(single_btn.length > 0){ 29 single_btn.forEach((aCartBut) => { 30 aCartBut.addEventListener("click", () => this.add_to_cart_click(variations_data, "Product Pages")); 31 }); 32 } 33 } 34 ListProductaddToCartEventBindings(){ 35 var elements = ""; 36 elements = document.querySelectorAll("a[href*=add-to-cart]"); 37 if(elements.length > 0){ 38 for (var i = 0; i < elements.length; i++) { 39 if(elements[i]){ 40 elements[i].addEventListener("click", () => this.list_add_to_cart_click()); 41 } 42 } 43 } 44 } 45 ListProductSelectItemEventBindings(){ 46 var elements = ""; 47 elements = document.querySelectorAll("li.product a:not([href*=add-to-cart],.product_type_variable, .product_type_grouped"); 48 if(elements.length > 0){ 49 for (var i = 0; i < elements.length; i++) { 50 if(elements[i]){ 51 elements[i].addEventListener("click", () => this.list_select_item_click()); 52 } 53 } 54 } 55 } 56 RemoveItemCartEventBindings(){ 57 var elements = ""; 58 elements = document.querySelectorAll("a[href*=\"?remove_item\"]"); 59 if(elements.length > 0){ 60 for(var i = 0; i < elements.length; i++){ 61 if(elements[i]){ 62 elements[i].addEventListener("click", () => this.remove_item_click()); 63 } 64 } 65 } 66 } 67 /* 68 * check remarketing option 69 */ 70 is_add_remarketing_tags(){ 71 if(this.options.is_admin == false && this.options.ads_tracking_id != "" && ( this.options.remarketing_tags == 1 || this.options.dynamic_remarketing_tags == 1)){ 72 return true; 73 }else{ 74 return false; 75 } 76 } 77 78 get_variation_data_by_id(variations_data, variation_id){ 79 //console.log(variations_data.available_variations) 80 var r_val = ""; 81 if(variations_data.available_variations.length > 0 ){ 82 variations_data.available_variations.forEach((element, index) => { 83 if(element.variation_id == variation_id){ 84 r_val = element; 85 } 86 }); 87 return r_val; 88 //console.log(variations_data.available_variations) 89 } 90 } 91 get_variation_attribute_name(p_attributes){ 92 //console.log(p_attributes); 93 var p_v_title = ""; 94 if(Object.keys(p_attributes).length >0 ){ 95 for(var index in p_attributes) { 96 p_v_title+=(p_v_title=="")?p_attributes[index]:' | '+p_attributes[index]; 97 } 98 return p_v_title; 99 } 100 } 101 get_event_data_layer(event_name){ 102 if(event_name != ""){ 103 if(Object.keys(dataLayer).length >0 ){ 104 for(var dataLayer_item in dataLayer){ 105 event = dataLayer[dataLayer_item].event; 106 if(event_name == event){ 107 return dataLayer[dataLayer_item]; 108 } 109 } 110 } 111 } 112 } 113 get_product_from_product_list(product_id){ 114 if(product_id != ""){ 115 if(Object.keys(conProductList).length >0 ){ 116 for(var dataLayer_item in conProductList[0]){ 117 if(conProductList[0][dataLayer_item].hasOwnProperty('id')){ 118 var id = conProductList[0][dataLayer_item].id; 119 if(product_id == id){ 120 return conProductList[0][dataLayer_item]; 121 } 122 } 123 } 124 } 125 } 126 } 127 get_product_from_product_list_by_url(prod_obj, key, product_url){ 128 if(product_url != ""){ 129 if(Object.keys(prod_obj).length >0 ){
130 for(var dataLayer_item in prod_obj[0]){ 131 if(prod_obj[0][dataLayer_item].hasOwnProperty(key)){ 132 var map_val = prod_obj[0][dataLayer_item][key]; 133 if(product_url == map_val){ 134 return prod_obj[0][dataLayer_item]; 135 } 136 } 137 } 138 } 139 } 140 } 141 list_select_item_click(){ 142 var this_var = event.currentTarget; 143 var href = this_var.getAttribute( 'href' ); 144 var item = this.get_product_from_product_list_by_url(conProductList, 'productlink', href); 145 var add_to_cart_datalayer = { 146 event: "select_item", 147 ecommerce: { 148 items: [ 149 { 150 affiliation: this.options.affiliation, 151 item_id: item.id, 152 item_name: item.name, 153 currency: this.options.currency, 154 item_category: item.category, 155 price: item.price, 156 quantity: 1 157 }] 158 } 159 }; 160 dataLayer.push(add_to_cart_datalayer); 161 } 162 remove_item_click(this_var){ 163 var href = this_var.getAttribute( 'href' ); 164 if(href){ 165 var item = this.get_product_from_product_list_by_url(conCarttList, 'remove_cart_link', href); 166 var add_to_cart_datalayer = { 167 event: "remove_from_cart", 168 ecommerce: { 169 items: [ 170 { 171 affiliation:this.options.affiliation, 172 item_id:item.id, 173 item_name:item.name, 174 currency:this.options.currency, 175 item_category:item.category, 176 price:item.price, 177 quantity:item.quantity 178 179 }] 180 } 181 }; 182 dataLayer.push(add_to_cart_datalayer); 183 } 184 185 } 186 list_add_to_cart_click(){ 187 var this_var = event.currentTarget; 188 var href = this_var.getAttribute( 'href' ); 189 var product_id = this.getParameterByName("add-to-cart",href); 190 var item = this.get_product_from_product_list(product_id); 191 var add_to_cart_datalayer = { 192 event: "add_to_cart", 193 ecommerce: { 194 items: [ 195 { 196 affiliation:this.options.affiliation, 197 item_id:item.id, 198 item_name:item.name, 199 currency:this.options.currency, 200 item_category:item.category, 201 price:item.price, 202 quantity:1 203 }] 204 } 205 }; 206 207 if(this.options.fb_pixel_id != undefined && this.options.fb_pixel_id != null && this.options.fb_pixel_id != ""){ 208 add_to_cart_datalayer.fb_event_id = this.options.fb_event_id+'p'+item.id; 209 } 210 211 dataLayer.push(add_to_cart_datalayer); 212 213 if(this.options.fb_conversion_api_token != undefined && this.options.fb_conversion_api_token != null && this.options.fb_conversion_api_token != ""){ 214 //facebook api 215 var data = { 216 action: "facebook_converstion_api", 217 fb_event:"AddToCart", 218 event_id:this.options.fb_event_id+'p'+item.id, 219 prodct_data:[item] 220 }; 221 jQuery.ajax({ 222 type: "POST", 223 dataType: "json", 224 url: this.options.tvc_ajax_url, 225 data: data, 226 beforeSend: function () { 227 }, 228 success: function (response) { 229 console.log(response); 230 } 231 }); 232 } 233 } 234 getParameterByName(name, url = window.location.href){ 235 name = name.replace(/[\[\]]/g, '\\$&'); 236 var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), 237 results = regex.exec(url); 238 if (!results) return null; 239 if (!results[2]) return ''; 240 return decodeURIComponent(results[2].replace(/\+/g, ' ')); 241 } 242 /* 243 * below code run while add to cart on product page. 244 * ( Event=> add_to_cart) 245 */ 246 add_to_cart_click( variations_data, page_type ="Product Pages" ){ 247 var this_var = event.currentTarget; 248 var item_dataLayer = this.get_event_data_layer("view_item"); 249 if(this.options.is_admin == true){ 250 return; 251 } 252 if(Object.keys(item_dataLayer.ecommerce.items[0]).length > 0){ 253 var item = item_dataLayer.ecommerce.items[0]; 254 var variation_attribute_name= ""; 255 var vari_data =""; 256 var variation_id = ""; 257 var variation_id_obj = document.getElementsByClassName("variation_id"); 258 if (variation_id_obj.length > 0) { 259 variation_id = document.getElementsByClassName("variation_id")[0].value; 260 } 261 var varPrice = item.price; 262 if(variation_id != ""){ 263 vari_data = this.get_variation_data_by_id(variations_data, variation_id); 264 var p_attributes = vari_data.attributes; 265 if( Object.keys(p_attributes).length > 0){ 266 variation_attribute_name = this.get_variation_attribute_name(p_attributes); 267 } 268 if(vari_data.display_price){ 269 varPrice = vari_data.display_price; 270 }else if(vari_data.display_regular_price){ 271 varPrice = vari_data.display_regular_price; 272 } 273 } 274 275 var add_to_cart_datalayer = { 276 event: "add_to_cart", 277 ecommerce: { 278 items: [ 279 { 280 affiliation:item.affiliation, 281 item_id:item.item_id, 282 item_name:item.item_name, 283 currency:item.currency, 284 item_category:item.item_category, 285 price:varPrice, 286 quantity:jQuery(this_var).parent().find("input[name=quantity]").val(), 287 item_variant:variation_attribute_name 288 289 }] 290 } 291 }; 292 if(this.options.fb_pixel_id != undefined && this.options.fb_pixel_id != null && this.options.fb_pixel_id != ""){ 293 add_to_cart_datalayer.fb_event_id = this.options.fb_event_id+'p'+item.id; 294 } 295 dataLayer.push(add_to_cart_datalayer); 296 297 //facebook api 298 if(this.options.fb_conversion_api_token != undefined && this.options.fb_conversion_api_token != null && this.options.fb_conversion_api_token != ""){ 299 var quantity = jQuery(this_var).parent().find("input[name=quantity]").val(); 300 var data = { 301 action: "facebook_converstion_api", 302 fb_event:"AddToCart", 303 event_id:this.options.fb_event_id+'p'+item.item_id, 304 prodct_data:[{id:item.item_id,quantity:quantity, price:varPrice}] 305 }; 306 jQuery.ajax({ 307 type: "POST", 308 dataType: "json", 309 url: this.options.tvc_ajax_url, 310 data: data, 311 beforeSend: function () { 312 }, 313 success: function (response) { 314 console.log(response); 315 } 316 }); 317 } 318 } 319 } 320 /* 321 * 322 */ 323 checkout_step_2_tracking(){ 324 var item_dataLayer = this.get_event_data_layer("begin_checkout"); 325 if(this.options.is_admin == true){ 326 return; 327 } 328 if(Object.keys(item_dataLayer.ecommerce.items[0]).length > 0){ 329 var checkout_step_2_datalayer = { 330 event: "add_shipping_info", 331 ecommerce: { 332 currency: this.options.currency, 333 value: item_dataLayer.ecommerce.value, 334 items: item_dataLayer.ecommerce.items 335 } 336 }; 337 dataLayer.push(checkout_step_2_datalayer); 338 } 339 console.log(dataLayer); 340 } 341 checkout_step_3_tracking(){ 342 var item_dataLayer = this.get_event_data_layer("begin_checkout"); 343 if(this.options.is_admin == true){ 344 return; 345 } 346 if(Object.keys(item_dataLayer.ecommerce.items[0]).length > 0){ 347 var checkout_step_3_datalayer = { 348 event: "add_payment_info", 349 ecommerce: { 350 currency: this.options.currency, 351 value: item_dataLayer.ecommerce.value, 352 items: item_dataLayer.ecommerce.items 353 } 354 }; 355 dataLayer.push(checkout_step_3_datalayer); 356 } 357 } 358 359 getCurrentTime(){ 360 if (!Date.now) { 361 return new Date().getTime(); 362 }else{ 363 //Math.floor(Date.now() / 1000) 364 return Date.now(); 365 } 366 } 367 getClientId() {
368 let client_id = this.getCookie("_ga"); 369 if(client_id != null && client_id != ""){ 370 return client_id; 371 }else{ 372 return ; 373 } 374 } 375 setCookie(name,value,days) { 376 var expires = ""; 377 if (days) { 378 var date = new Date(); 379 date.setTime(date.getTime() + (days*24*60*60*1000)); 380 expires = "; expires=" + date.toUTCString(); 381 } 382 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 383 } 384 getCookie(name) { 385 var nameEQ = name + "="; 386 var ca = document.cookie.split(";"); 387 for(var i=0;i < ca.length;i++) { 388 var c = ca[i]; 389 while (c.charAt(0)==" ") c = c.substring(1,c.length); 390 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 391 } 392 return null; 393 } 394 eraseCookie(name) { 395 document.cookie = name +"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"; 396 } 397}
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.