1/*global wfacp_analytics_data*/ 2(function ($) { 3 class Events { 4 constructor(data) { 5 if (undefined == data) { 6 return; 7 } 8 this.event_data = []; 9 this.instance_timeout = null; 10 this.timeout = 1500; 11 this.track_name = ''; 12 this.track_id = data.id; 13 this.settings = data.settings; 14 this.positions = data.positions; 15 this.all_data = data; 16 this.data = { 17 'add_to_cart': data.add_to_cart, 'checkout': data.checkout, 'payment_info': {}, 'shipping_info': data.shipping_info ? data.shipping_info : {}, 'last_checkout_data': null 18 }; 19 20 this.add_to_cart_run = false; 21 this.checkout_event_run = false; 22 this.is_bumpevent = false; 23 this.init(); 24 this.attach_triggers(); 25 26 } 27 28 init() { 29 30 } 31 32 static enqueue_js() { 33 } 34 35 fire_events(type) { 36 if (this.positions.add_to_cart === type && false == this.add_to_cart_run) { 37 /* 38 *hide add to cart on native checkout 39 * only run in case wffn_pending_event is true 40 * when add to cart run for custom ajax 41 */ 42 if (typeof this.all_data !== 'undefined' && this.all_data.hasOwnProperty('wffn_pending_event') && 'true' === this.all_data.wffn_pending_event) { 43 this.add_to_cart(); 44 } 45 this.add_to_cart_run = true; 46 } 47 if (this.positions.checkout === type) { 48 this.checkout(); 49 } 50 if (this.positions.shipping_info === type) { 51 this.shipping_info(); 52 } 53 } 54 55 attach_triggers() { 56 let self = this; 57 let step_changed = false; 58 let payment_trigger = false; 59 $('#billing_email').on('change', function () { 60 try { 61 self.fire_events('email'); 62 }catch (error) { 63 console.log( error ); 64 } 65 66 }); 67 68 if (document.readyState === 'complete' || document.readyState === 'loading') { 69 $(document).ready(function () { 70 try { 71 self.fire_events('load'); 72 self.load(); 73 self.single_event_trigger(); 74 }catch (error) { 75 console.log( error ); 76 } 77 }); 78 } else { 79 $(window).on('load', function () { 80 try { 81 self.fire_events('load'); 82 self.load(); 83 self.single_event_trigger(); 84 }catch (error) { 85 console.log( error ); 86 } 87 }); 88 } 89 90 } 91 92 single_event_trigger() { 93 let self = this; 94 let step_button = $('.wfacp_next_page_button'); 95 let step_changed = false; 96 let payment_trigger = false; 97 if (step_button.length > 0) { 98 $(document.body).on('wfacp_step_switching', function () { 99 try { 100 if (false === step_changed) { 101 self.fire_events('button'); 102 step_changed = true; 103 } 104 }catch (error) { 105 console.log( error ); 106 } 107 }); 108 } 109 110 $(document.body).on('angelleye_paypal_onclick', function () { 111 try { 112 if (false === payment_trigger) { 113 self.payment_info(); 114 payment_trigger = true; 115 } 116 }catch (error) { 117 console.log( error ); 118 } 119 }); 120 $(document.body).on('kp_auth_success', function () { 121 try { 122 if (false === payment_trigger) { 123 self.payment_info(); 124 payment_trigger = true; 125 } 126 }catch (error) { 127 console.log( error ); 128 } 129 }); 130 131 // Trigger shipping_info event when shipping fields change 132 $(document.body).on('change', '#shipping_country, #shipping_state, #shipping_postcode, #shipping_city, #shipping_address_1, #shipping_address_2', function () { 133 try { 134 self.fire_events('shipping_info'); 135 }catch (error) { 136 console.log( error ); 137 } 138 }); 139 140 // Trigger shipping_info event when cart is updated after shipping changes 141 $(document.body).on('updated_checkout', function () { 142 try { 143 self.fire_events('shipping_info'); 144 }catch (error) { 145 console.log( error ); 146 } 147 }); 148 149 // Trigger shipping_info event when shipping method is selected 150 $(document.body).on('change', 'input[name="shipping_method[0]"], input[name="shipping_method"]', function () { 151 try { 152 self.fire_events('shipping_info'); 153 }catch (error) { 154 console.log( error ); 155 } 156 }); 157 158 $(document.body).on('wfob_product_added', function (e, v) { 159 try { 160 self.track_bump_item(v); 161 }catch (error) { 162 console.log( error ); 163 } 164 }); 165 $(document.body).on('wfob_product_removed', function (e, v) { 166 try { 167 self.track_remove_bump_item(v); 168 }catch (error) { 169 console.log( error ); 170 } 171 }); 172 173 $(document.body).on('wfacp_product_added', function (e, v) { 174 try { 175 self.add_item(v); 176 }catch (error) { 177 console.log( error ); 178 } 179 }); 180 181 $(document.body).on('wfacp_checkout_data', function (e, v) { 182 if (v.hasOwnProperty('checkout') && v.hasOwnProperty('checkout')) { 183 if (v.checkout === undefined) { 184 return; 185 } 186 if (!v.checkout.hasOwnProperty(self.track_name)) { 187 return; 188 } 189 self.data.checkout = v.checkout[self.track_name]; 190 step_changed = false;
191 self.checkout_event_run = false; 192 } 193 }); 194 } 195 196 add_item(v, by_pass = false) { 197 if (v.hasOwnProperty('item_key') && v.hasOwnProperty('item') && v.item.hasOwnProperty(v.item_key)) { 198 let item_key = v.item_key; 199 if (undefined == this.data.add_to_cart) { 200 return; 201 } 202 if (this.data.add_to_cart.hasOwnProperty(item_key)) { 203 return; 204 } 205 if (v.item[item_key].hasOwnProperty(this.track_name)) { 206 if (v.item.hasOwnProperty('is_bundle') && v.item[item_key][this.track_name].length !== 0) { 207 let b_items = v.item[item_key][this.track_name]; 208 for (let b_item in b_items) { 209 this.data.add_to_cart[b_item] = b_items[b_item]; 210 this.single_add_to_cart(b_items[b_item], by_pass); 211 } 212 213 } else { 214 this.data.add_to_cart[item_key] = v.item[item_key]; 215 this.single_add_to_cart(v.item[item_key][this.track_name], by_pass); 216 } 217 } 218 219 this.checkout_event_run = false; 220 } 221 } 222 223 remove_item(v) { 224 if (v.hasOwnProperty('item_key') && v.hasOwnProperty('item') && v.item.hasOwnProperty(v.item_key)) { 225 let item_key = v.item_key; 226 if (this.data.add_to_cart.hasOwnProperty(item_key)) { 227 delete this.data.add_to_cart[item_key]; 228 } 229 230 if (v.item[item_key].hasOwnProperty(this.track_name)) { 231 if (v.item.hasOwnProperty('is_bundle') && v.item[item_key][this.track_name].length !== 0) { 232 let b_items = v.item[item_key][this.track_name]; 233 for (let b_item in b_items) { 234 this.remove_add_to_cart(b_items[b_item], v.item.cart_key); 235 } 236 ; 237 } else { 238 this.remove_add_to_cart(v.item[item_key][this.track_name], v.item.cart_key); 239 } 240 } 241 242 this.checkout_event_run = false; 243 } 244 } 245 246 247 single_add_to_cart(data, by_pass = false) { 248 if (this.settings.add_to_cart === 'true' || true == by_pass) { 249 this.event_single_add_to_cart(data); 250 } 251 } 252 253 254 remove_add_to_cart(data) { 255 this.event_remove_add_to_cart(data); 256 } 257 258 259 event_single_add_to_cart(data) { 260 261 } 262 263 event_remove_add_to_cart(data) { 264 265 } 266 267 /** 268 * Fire JavaScript action hook for add_to_cart events 269 * Allows developers to listen and duplicate events (e.g., for Stape) 270 * 271 * @param {Object} eventData - The event data object 272 * @param {String} eventName - The event name (e.g., 'add_to_cart', 'AddToCart', 'addtocart', 'ADD_CART') 273 */ 274 fire_add_to_cart_hook(eventData, eventName) { 275 try { 276 if (typeof $ !== 'undefined' && $.fn && $.fn.trigger) { 277 $(document).trigger('wffn_add_to_cart_event', [eventData, eventName || 'add_to_cart']); 278 } 279 } catch (error) { 280 console.log(error); 281 } 282 } 283 284 add_to_cart() { 285 if (this.settings.add_to_cart === 'true') { 286 this.event_add_to_cart(); 287 } 288 } 289 290 event_add_to_cart() { 291 292 } 293 294 checkout() { 295 let current_data = JSON.stringify(this.data.checkout); 296 if (this.settings.checkout === 'true' && (current_data !== this.data.last_checkout_data) && false == this.checkout_event_run) { 297 this.event_checkout(current_data); 298 this.data.last_checkout_data = current_data; 299 this.checkout_event_run = true; 300 } 301 } 302 303 event_checkout(current_data) { 304 305 306 } 307 308 payment_info() { 309 if (this.settings.payment === 'true') { 310 this.event_payment_info(); 311 } 312 } 313 314 shipping_info() { 315 if (this.settings.shipping === 'true') { 316 this.event_shipping_info(); 317 } 318 } 319 320 event_payment_info() { 321 } 322 323 load() { 324 325 } 326 327 get_event_id() { 328 let d = new Date(); 329 let time = d.getTime(); 330 return parseInt(time / 1000); 331 } 332 333 custom_event(event, data) { 334 335 } 336 337 // Bump Event 338 339 track_bump_item(data) { 340 let present = typeof wfob_frontend == 'object' && wfob_frontend.hasOwnProperty('track'); 341 if (present) { 342 if ('1' == wfob_frontend.track[this.track_name].add_to_cart) { 343 this.is_bumpevent = true; 344 this.add_item(data, true); 345 } 346 if (wfob_frontend.track[this.track_name].hasOwnProperty('custom_bump') && '1' == wfob_frontend.track[this.track_name].custom_bump) {
347 let customData = {"post_id": wfacp_analytics_data.wfacp_frontend.id, "page_title": wfacp_analytics_data.wfacp_frontend.title}; 348 this.custom_event('Woofunnels_Bump', customData); 349 } 350 } 351 } 352 353 track_remove_bump_item(data) { 354 let present = typeof wfob_frontend == 'object' && wfob_frontend.hasOwnProperty('track'); 355 if (present) { 356 if ('1' == wfob_frontend.track[this.track_name].add_to_cart) { 357 this.is_bumpevent = true; 358 this.remove_item(data); 359 } 360 } 361 } 362 363 } 364 365 class Facebook extends Events { 366 constructor(data,count) { 367 super(data); 368 this.pixel_event_data = {"AddToCart": {}, "InitiateCheckout": {}, "AddPaymentInfo": {}, "PageView": {}}; 369 this.track_name = 'pixel'; 370 this.eventCount = count; 371 } 372 373 static enqueue_js() { 374 (function (f, b, e, v, n, t, s) { 375 if (f.fbq) return; 376 n = f.fbq = function () { 377 let pl = n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments); 378 }; 379 if (!f._fbq) f._fbq = n; 380 n.push = n; 381 n.loaded = !0; 382 n.version = '2.0'; 383 n.queue = []; 384 t = b.createElement(e); 385 t.defer = !0; 386 t.src = v; 387 s = b.getElementsByTagName(e)[0]; 388 s.parentNode.insertBefore(t, s); 389 })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); 390 } 391 392 393 send_ajax() { 394 this.wfacp_send_ajax({ 395 'action': 'analytics', 'type': 'post', 'data': { 396 'event_data': this.event_data, 'source': window.location.href, 397 } 398 }, (rsp) => { 399 this.event_data = []; 400 this.timeout = 100; 401 }); 402 } 403 404 wfacp_send_ajax(data, cb) { 405 406 let url = wfacp_analytics_data.wfacp_frontend.admin_ajax; 407 if (data.hasOwnProperty('url')) { 408 url = data.url; 409 } 410 if (this.eventCount !== 0) { 411 return; 412 } 413 data.action = "wfacp_" + data.action; 414 if (wfacp_analytics_data.wfacp_frontend.hasOwnProperty('wc_endpoints') && wfacp_analytics_data.wfacp_frontend.wc_endpoints.hasOwnProperty(data.action)) { 415 url = wfacp_analytics_data.wfacp_frontend.wc_endpoints[data.action]; 416 } 417 $(document.body).trigger(data.action, data); 418 let send_data = { 419 'action': data.action, 420 'wfacp_nonce': wfacp_analytics_data.wfacp_frontend.wfacp_nonce, 421 'data': data.data, 422 'post_data': $('form.woocommerce-checkout').serialize() 423 }; 424 425 let have_headers = false; 426 if (data.hasOwnProperty('headers')) { 427 have_headers = true; 428 } 429 430 let ajax_obj = { 431 'url': url, 432 'type': data.type, 433 'data': send_data, 434 success: (rsp) => { 435 if (true === have_headers) { 436 cb(rsp); 437 return; 438 } 439 440 if (typeof rsp !== "object") { 441 rsp = {'status': false}; 442 } 443 if (typeof cb === 'function') { 444 rsp.action = data.action; 445 cb(rsp); 446 447 } 448 }, 449 error: (rsp) => { 450 if (true == have_headers) { 451 cb(rsp); 452 return; 453 } 454 if (rsp.hasOwnProperty('status')) { 455 if (403 == rsp.status) { 456 console.log('Aero: Page is cached'); 457 } else if (500 == rsp.status) { 458 console.log('Aero: Site Contain fatal error'); 459 } else if (502 == rsp.status) { 460 console.log('Aero: Bad gateway'); 461 } else { 462 console.log('Aero: Error', rsp.status); 463 } 464 } 465 } 466 }; 467 if (data.hasOwnProperty('headers')) { 468 ajax_obj.headers = data.headers; 469 ajax_obj.data = data.data; 470 } 471 $.ajax(ajax_obj); 472 473 } 474 475 send_data(event, data, event_id) { 476 this.event_data.push({ 477 'event': event, 'data': data, 'event_id': event_id 478 }); 479 clearTimeout(this.instance_timeout); 480 this.instance_timeout = setTimeout(() => { 481 this.send_ajax(); 482 }, this.timeout); 483 } 484 485 fbq(event, data, isCustom) { 486 487 let event_id = this.get_event_id();
488 if ('true' == wfacp_analytics_data.conversion_api) { 489 this.send_data(event, data, event_id); 490 } 491 data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 492 // Fire action hook for AddToCart events 493 if ('AddToCart' === event) { 494 this.fire_add_to_cart_hook(data, 'AddToCart'); 495 } 496 if (typeof isCustom === 'undefined') { 497 fbq('trackSingle', this.track_id, event, data, {'eventID': event_id}); 498 } else { 499 fbq('trackCustom', event, data, {'eventID': event_id}); 500 } 501 502 } 503 504 init() { 505 if (wfacp_analytics_data.hasOwnProperty('fb_advanced') && wfacp_analytics_data.fb_advanced.length !== 0) { 506 fbq('init', this.track_id, wfacp_analytics_data.fb_advanced); 507 } else { 508 fbq('init', this.track_id); 509 } 510 } 511 512 event_add_to_cart() { 513 let add_to_cart = this.data.add_to_cart; 514 515 for (let item_key in add_to_cart) { 516 this.event_single_add_to_cart(add_to_cart[item_key], item_key); 517 } 518 } 519 520 event_single_add_to_cart(data, item_key) { 521 522 if (typeof fbq === 'function') { 523 this.fbq('AddToCart', data); 524 } 525 } 526 527 event_remove_add_to_cart(data, item_key) { 528 if (typeof fbq === 'function') { 529 this.fbq('RemoveFromCart', data); 530 } 531 } 532 533 event_checkout(current_data) { 534 if (typeof fbq === 'function') { 535 this.fbq('InitiateCheckout', JSON.parse(current_data)); 536 } 537 } 538 539 event_payment_info() { 540 if (typeof fbq === 'function') { 541 if (!this.data.hasOwnProperty("checkout") || typeof this.data.checkout == "undefined" || this.data.checkout == undefined) { 542 this.fbq('AddPaymentInfo', {}); 543 } else { 544 let parse_data = JSON.stringify(this.data.checkout); 545 parse_data = JSON.parse(parse_data); 546 delete parse_data.content_name; 547 delete parse_data.content_type; 548 delete parse_data.num_ids; 549 delete parse_data.num_items; 550 delete parse_data.plugin; 551 delete parse_data.subtotal; 552 delete parse_data.user_roles; 553 this.fbq('AddPaymentInfo', parse_data); 554 } 555 } 556 } 557 558 load() { 559 if (typeof wffnTracking !== "undefined" && '1' == wffnTracking.pixel.settings.page_view) { 560 return; 561 } 562 if (typeof fbq === 'function' && '' !== this.track_id && this.settings.page_view === 'true') { 563 this.fbq('PageView', {}); 564 } 565 } 566 567 custom_event(event, data) { 568 this.fbq(event, data, true); 569 } 570 } 571 572 class Google extends Events { 573 constructor(data) { 574 super(data); 575 this.track_name = 'google_ua'; 576 window.dataLayer = window.dataLayer || []; 577 this.gtag('config', this.track_id); 578 } 579 580 static enqueue_js(analytics_id) { 581 (function (window, document, src) { 582 var a = document.createElement('script'), m = document.getElementsByTagName('script')[0]; 583 a.defer = 1; 584 a.src = src; 585 m.parentNode.insertBefore(a, m); 586 })(window, document, '//www.googletagmanager.com/gtag/js?id=' + analytics_id); 587 588 window.dataLayer = window.dataLayer || []; 589 window.gtag = window.gtag || function gtag() { 590 dataLayer.push(arguments); 591 }; 592 593 gtag('js', new Date()); 594 } 595 596 load() { 597 if (typeof wffnTracking !== "undefined" && '1' == wffnTracking.ga.settings.page_view) { 598 return; 599 } 600 if (this.settings.page_view === 'true' && this.track_name === 'google_ads') { 601 this.gtag('event', 'page_view', {send_to: this.track_id}); 602 } 603 604 } 605 606 gtag() { 607 // Fire action hook for add_to_cart events before pushing to dataLayer 608 if (arguments.length >= 2 && arguments[0] === 'event' && arguments[1] === 'add_to_cart') { 609 this.fire_add_to_cart_hook(arguments[2] || {}, 'add_to_cart'); 610 } 611 dataLayer.push(arguments); 612 } 613 614 /** 615 * Fire JavaScript action hook for add_to_cart events 616 * Allows developers to listen and duplicate events (e.g., for Stape) 617 * 618 * @param {Object} eventData - The event data object 619 * @param {String} eventName - The event name (e.g., 'add_to_cart', 'AddToCart', 'addtocart', 'ADD_CART') 620 */ 621 fire_add_to_cart_hook(eventData, eventName) { 622 try { 623 if (typeof $ !== 'undefined' && $.fn && $.fn.trigger) { 624 $(document).trigger('wffn_add_to_cart_event', [eventData, eventName || 'add_to_cart']); 625 } 626 } catch (error) { 627 console.log(error); 628 } 629 } 630 631 event_checkout(checkout_data) { 632 633 var event_data = []; 634 if ('google_ua' === this.track_name) { 635 checkout_data = JSON.parse(checkout_data); 636 if (checkout_data.length > 0) { 637 event_data = checkout_data[0];
638 event_data.send_to = this.track_id; 639 event_data.event_category = "ecommerce"; 640 event_data.non_interaction = true; 641 } 642 } else { 643 event_data = { 644 send_to: this.track_id, event_category: "ecommerce", items: JSON.parse(checkout_data), non_interaction: true 645 }; 646 } 647 648 event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(event_data) : event_data; 649 this.gtag('event', 'begin_checkout', event_data); 650 } 651 652 event_single_add_to_cart(data) { 653 data.send_to = this.track_id; 654 data.event_category = "ecommerce"; 655 data.non_interaction = true; 656 var event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 657 // Fire action hook before pushing to dataLayer 658 this.fire_add_to_cart_hook(event_data, 'add_to_cart'); 659 this.gtag('event', 'add_to_cart', event_data); 660 } 661 662 event_remove_add_to_cart(data, item_key) { 663 data.send_to = this.track_id; 664 data.event_category = "ecommerce"; 665 data.non_interaction = true; 666 var event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 667 668 this.gtag('event', 'remove_from_cart', event_data); 669 } 670 671 event_add_to_cart() { 672 if (typeof this.data.add_to_cart == "undefined" || undefined == this.data.add_to_cart) { 673 return; 674 } 675 let data = JSON.stringify(this.data.add_to_cart); 676 data = JSON.parse(data); 677 for (let item_key in data) { 678 this.event_single_add_to_cart(data[item_key]); 679 } 680 } 681 682 event_payment_info() { 683 var event_data = {send_to: this.track_id, non_interaction: true}; 684 if ('google_ua' === this.track_name) { 685 var checkout_data = this.data.checkout; 686 if (checkout_data.length > 0) { 687 event_data = checkout_data[0]; 688 event_data.send_to = this.track_id; 689 event_data.non_interaction = true; 690 } 691 } 692 693 event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(event_data) : event_data; 694 695 this.gtag('event', 'add_payment_info', event_data); 696 } 697 698 event_shipping_info() { 699 var event_data = {send_to: this.track_id, non_interaction: true}; 700 if ('google_ua' === this.track_name) { 701 var shipping_data = this.data.shipping_info; 702 if (shipping_data.length > 0) { 703 event_data = shipping_data[0]; 704 event_data.send_to = this.track_id; 705 event_data.non_interaction = true; 706 707 // Add enhanced shipping data structure (similar to PixelYourSite) 708 if (event_data.shipping_address) { 709 event_data.user_data = event_data.user_data || {}; 710 event_data.user_data.address = [event_data.shipping_address]; 711 } 712 } 713 } 714 715 event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(event_data) : event_data; 716 717 this.gtag('event', 'add_shipping_info', event_data); 718 } 719 720 721 custom_event(event, data) { 722 var event_data = { 723 send_to: this.track_id, event_category: "ecommerce", items: [data], non_interaction: true 724 }; 725 event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(event_data) : event_data; 726 727 this.gtag('event', event, event_data); 728 } 729 730 } 731 732 class Google_ads extends Google { 733 constructor(data) { 734 super(data); 735 this.track_name = 'google_ads'; 736 this.idlabel = (typeof data.idlabel !== "undefined") ? data.idlabel : ''; 737 this.bumpIdlabel = (typeof data.bumpIdlabel !== "undefined") ? data.bumpIdlabel : ''; 738 window.dataLayer = window.dataLayer || []; 739 } 740 741 event_single_add_to_cart(data) { 742 data = this.set_send_id( data ); 743 data.event_category = "ecommerce"; 744 data.non_interaction = true; 745 var event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 746 this.gtag('event', 'add_to_cart', event_data); 747 } 748 749 event_remove_add_to_cart(data, item_key) { 750 data = this.set_send_id( data ); 751 data.event_category = "ecommerce"; 752 data.non_interaction = true; 753 var event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 754 755 this.gtag('event', 'remove_from_cart', event_data); 756 } 757 758 set_send_id( data ) { 759 if ( this.is_bumpevent === true ) {
760 data.send_to = (typeof this.bumpIdlabel !== "undefined") && '' !== this.bumpIdlabel ? this.bumpIdlabel : this.track_id; 761 } else { 762 data.send_to = (typeof this.idlabel !== "undefined") && '' !== this.idlabel ? this.idlabel : this.track_id; 763 } 764 return data; 765 } 766 event_checkout(checkout_data) { 767 var event_data = { 768 send_to: this.track_id, 769 event_category: "ecommerce", 770 items: JSON.parse(checkout_data), 771 non_interaction: true 772 }; 773 event_data = this.set_send_id(event_data); 774 event_data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(event_data) : event_data; 775 this.gtag('event', 'begin_checkout', event_data); 776 } 777 778 event_payment_info() { 779 } 780 781 } 782 783 class Pinterest extends Events { 784 constructor(data) { 785 super(data); 786 this.track_name = 'pint'; 787 } 788 789 static enqueue_js() { 790 !function (e) { 791 if (!window.pintrk) { 792 window.pintrk = function () { 793 window.pintrk.queue.push(Array.prototype.slice.call(arguments)); 794 }; 795 var n = window.pintrk; 796 n.queue = [], n.version = "3.0"; 797 var t = document.createElement("script"); 798 t.defer = !0, t.src = e; 799 var r = document.getElementsByTagName("script")[0]; 800 r.parentNode.insertBefore(t, r); 801 } 802 }("https://s.pinimg.com/ct/core.js"); 803 } 804 805 init(tracks_ids) { 806 807 let ids = this.track_id.split(','); 808 ids.forEach(function (pixelId) { 809 pintrk('load', pixelId); 810 }); 811 } 812 813 load() { 814 if (typeof wffnTracking !== "undefined" && '1' == wffnTracking.pint.settings.page_view) { 815 return; 816 } 817 if (typeof pintrk === 'function' && '' !== this.track_id && this.settings.page_view === 'true') { 818 pintrk('page'); 819 } 820 } 821 822 send_data(event, data, event_id) { 823 } 824 825 pint(event, data) { 826 if (window.pintrk) { 827 data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 828 // Fire action hook for addtocart events 829 if ('addtocart' === event) { 830 this.fire_add_to_cart_hook(data, 'addtocart'); 831 } 832 pintrk('track', event, data); 833 } 834 } 835 836 event_checkout(checkout_data) { 837 let c_data = JSON.parse(checkout_data); 838 839 // Helper function to hash email with SHA256 840 const hashEmail = async (email) => { 841 if (!email || typeof email !== 'string') return null; 842 const normalizedEmail = email.toLowerCase().trim(); 843 const msgBuffer = new TextEncoder().encode(normalizedEmail); 844 const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer); 845 const hashArray = Array.from(new Uint8Array(hashBuffer)); 846 return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); 847 }; 848 849 // Get email from checkout form if not already in data 850 const getEmailFromForm = () => { 851 const emailField = $('#billing_email'); 852 if (emailField.length > 0 && emailField.val()) { 853 return emailField.val().trim(); 854 } 855 return null; 856 }; 857 858 // Process checkout data - ensure email and external_id are included 859 if (Array.isArray(c_data) && c_data.length > 0) { 860 const checkoutEventData = c_data[0]; 861 862 // Add email if not present 863 if (!checkoutEventData.em) { 864 const formEmail = getEmailFromForm(); 865 if (formEmail) {
866 hashEmail(formEmail).then(hashedEmail => { 867 if (hashedEmail) { 868 checkoutEventData.em = hashedEmail; 869 } 870 this.pint('InitiateCheckout', c_data); 871 }).catch(() => { 872 // Fallback: send without email 873 this.pint('InitiateCheckout', c_data); 874 }); 875 return; // Exit early, will send after hashing 876 } 877 } 878 } 879 880 this.pint('InitiateCheckout', c_data); 881 } 882 883 event_single_add_to_cart(data) { 884 this.pint('addtocart', data); 885 } 886 887 event_remove_add_to_cart(data, item_key) { 888 this.pint('RemoveFromCart', data); 889 } 890 891 event_add_to_cart() { 892 if (typeof this.data.add_to_cart == "undefined" || undefined == this.data.add_to_cart) { 893 return; 894 } 895 let data = JSON.stringify(this.data.add_to_cart); 896 data = JSON.parse(data); 897 for (let item_key in data) { 898 this.event_single_add_to_cart(data[item_key]); 899 } 900 } 901 902 custom_event(event, data) { 903 this.pint(event, data); 904 } 905 906 907 } 908
909 class TikTok extends Events { 910 constructor(data) { 911 super(data); 912 this.track_name = 'tiktok'; 913 } 914 915 static enqueue_js() { 916 !function (w, d, t) { 917 w.TiktokAnalyticsObject = t; 918 var ttq = w[t] = w[t] || []; 919 ttq.methods = ["page", "track", "identify", "instances", "debug", "on", "off", "once", "ready", "alias", "group", "enableCookie", "disableCookie"], ttq.setAndDefer = function (t, e) { 920 t[e] = function () { 921 t.push([e].concat(Array.prototype.slice.call(arguments, 0))); 922 }; 923 }; 924 for (var i = 0; i < ttq.methods.length; i++) ttq.setAndDefer(ttq, ttq.methods[i]); 925 ttq.instance = function (t) { 926 for (var e = ttq._i[t] || [], n = 0; n < ttq.methods.length; n++) ttq.setAndDefer(e, ttq.methods[n]); 927 return e; 928 }, ttq.load = function (e, n) { 929 var i = "https://analytics.tiktok.com/i18n/pixel/events.js"; 930 ttq._i = ttq._i || {}, ttq._i[e] = [], ttq._i[e]._u = i, ttq._t = ttq._t || {}, ttq._t[e] = +new Date, ttq._o = ttq._o || {}, ttq._o[e] = n || {}; 931 var o = document.createElement("script"); 932 o.type = "text/javascript", o.defer = !0, o.src = i + "?sdkid=" + e + "&lib=" + t; 933 var a = document.getElementsByTagName("script")[0]; 934 a.parentNode.insertBefore(o, a) 935 }; 936 }(window, document, 'ttq'); 937 } 938 939 init() { 940 if (typeof ttq !== "object") { 941 return; 942 } 943 ttq.load(this.track_id); 944 if (wfacp_analytics_data.hasOwnProperty('tiktok_advanced') && wfacp_analytics_data.tiktok_advanced.length !== 0) { 945 ttq.instance(this.track_id).identify(wfacp_analytics_data.tiktok_advanced) 946 } 947 } 948 949 load() { 950 if (typeof wffnTracking !== "undefined" && '1' == wffnTracking.tiktok.settings.page_view) { 951 return; 952 } 953 if ('' !== this.track_id && this.settings.page_view === 'true') { 954 ttq.page(); 955 } 956 } 957 958 ttq(event, data) { 959 if (typeof ttq !== "object") { 960 return; 961 } 962 // Fire action hook for AddToCart events 963 if ('AddToCart' === event) { 964 let processedData = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 965 this.fire_add_to_cart_hook(processedData, 'AddToCart'); 966 } 967 let self = this; 968 setTimeout(function () { 969 let event_id = self.get_event_id(); 970 ttq.instance(self.track_id).track(event, data); 971 }, 1200); 972 } 973 974 event_payment_info() { 975 if (typeof ttq === 'object') { 976 this.ttq('AddPaymentInfo', this.data.checkout); 977 } 978 } 979 980 event_checkout(checkout_data) { 981 let c_data = JSON.parse(checkout_data); 982 let c_self = this; 983 setTimeout(function () { 984 c_self.ttq('InitiateCheckout', c_data); 985 }, 200); 986 } 987 988 event_single_add_to_cart(data) { 989 this.ttq('AddToCart', data); 990 } 991 992 event_remove_add_to_cart(data, item_key) { 993 // Not Supporting 994 // this.ttq('Custom', {'event': 'remove_from_cart', 'data': data}); 995 } 996 997 event_add_to_cart() { 998 if (typeof this.data.add_to_cart == "undefined" || undefined == this.data.add_to_cart) { 999 return; 1000 } 1001 let data = JSON.stringify(this.data.add_to_cart); 1002 data = JSON.parse(data); 1003 for (let item_key in data) { 1004 this.event_single_add_to_cart(data[item_key]); 1005 } 1006 } 1007 } 1008 1009 class SnapChat extends Events { 1010 constructor(data) { 1011 super(data); 1012 this.track_name = 'snapchat'; 1013 } 1014 1015 static enqueue_js() { 1016 (function (win, doc, sdk_url) { 1017 if (win.snaptr) { 1018 return; 1019 } 1020 1021 var tr = win.snaptr = function () { 1022 tr.handleRequest ? tr.handleRequest.apply(tr, arguments) : tr.queue.push(arguments); 1023 }; 1024 tr.queue = []; 1025 var s = 'script'; 1026 var new_script_section = doc.createElement(s); 1027 new_script_section.defer = !0; 1028 new_script_section.src = sdk_url; 1029 var insert_pos = doc.getElementsByTagName(s)[0]; 1030 insert_pos.parentNode.insertBefore(new_script_section, insert_pos); 1031 })(window, document, 'https://sc-static.net/scevent.min.js'); 1032 } 1033 1034 init() { 1035 if (typeof snaptr !== "function") { 1036 return; 1037 } 1038 snaptr('init', this.track_id, { 1039 'integration': 'woocommerce', 1040 'user_email': this.settings.user_email 1041 }); 1042 } 1043 1044 load() { 1045 if (typeof wffnTracking !== "undefined" && '1' == wffnTracking.snapchat.settings.page_view) { 1046 return; 1047 } 1048 if ('' !== this.track_id && this.settings.page_view === 'true') { 1049 this.snaptr('PAGE_VIEW', {'content_id': wfacp_anal
1049ytics_data.wfacp_frontend.id}); 1050 } 1051 } 1052 1053 snaptr(event, data) { 1054 if (typeof snaptr !== "function") { 1055 return; 1056 } 1057 1058 data = (typeof wffnAddTrafficParamsToEvent !== "undefined") ? wffnAddTrafficParamsToEvent(data) : data; 1059 // Fire action hook for ADD_CART events 1060 if ('ADD_CART' === event) { 1061 this.fire_add_to_cart_hook(data, 'ADD_CART'); 1062 } 1063 snaptr('track', event, data); 1064 } 1065 1066 event_checkout(checkout_data) { 1067 let c_data = JSON.parse(checkout_data); 1068 this.snaptr('START_CHECKOUT', c_data); 1069 } 1070 1071 event_payment_info() { 1072 // Not Supported 1073 //this.snaptr('ADD_PAYMENT_INFO', this.data.checkout); 1074 } 1075 1076 event_single_add_to_cart(data) { 1077 this.snaptr('ADD_CART', data); 1078 } 1079 1080 event_remove_add_to_cart(data, item_key) { 1081 // Not Supported 1082 // this.snaptr('REMOVE_FROM_CART', data); 1083 } 1084 1085 event_add_to_cart() { 1086 if (typeof this.data.add_to_cart == "undefined" || undefined == this.data.add_to_cart) { 1087 return; 1088 } 1089 let data = JSON.stringify(this.data.add_to_cart); 1090 data = JSON.parse(data); 1091 for (let item_key in data) { 1092 this.event_single_add_to_cart(data[item_key]); 1093 } 1094 } 1095 1096 custom_event(event, data) { 1097 //this.snaptr(event, data); 1098 } 1099 } 1100 1101 class Loader { 1102 static init() { 1103 1104 1105 $(document).ready(function () { 1106 1107 1108 if ('1' === wfacp_analytics_data.wfacp_frontend.is_customizer || 'yes' == wfacp_analytics_data.wfacp_frontend.edit_mode) { 1109 return; 1110 } 1111 1112 if (1 != wfacp_analytics_data.shouldRender) { 1113 return; 1114 } 1115 let bwf_gtag_load = false; 1116 1117 wfacp_analytics_data.wfacp_frontend.tracks = {}; 1118 if (wfacp_analytics_data.hasOwnProperty('pixel') && wfacp_analytics_data.pixel.hasOwnProperty('id')) { 1119 Facebook.enqueue_js(); 1120 let ids = wfacp_analytics_data.pixel.id.split(','); 1121 if (ids.length > 0) { 1122 wfacp_analytics_data.wfacp_frontend.tracks.facebook = {}; 1123 for (let f = 0; f < ids.length; f++) { 1124 let f_id = ids[f]; 1125 let temp = JSON.stringify(wfacp_analytics_data.pixel); 1126 temp = JSON.parse(temp); 1127 temp.id = f_id.trim(); 1128 wfacp_analytics_data.wfacp_frontend.tracks.facebook[f_id] = new Facebook(temp,f); 1129 } 1130 } 1131 } 1132 if (wfacp_analytics_data.hasOwnProperty('google_ua') && wfacp_analytics_data.google_ua.hasOwnProperty('id')) { 1133 let ids = wfacp_analytics_data.google_ua.id.split(','); 1134 if (ids.length > 0) { 1135 if (!bwf_gtag_load) { 1136 Google.enqueue_js(ids[0]); 1137 bwf_gtag_load = true; 1138 } 1139 wfacp_analytics_data.wfacp_frontend.tracks.google_ua = {}; 1140 for (let f = 0; f < ids.length; f++) { 1141 let f_id = ids[f]; 1142 let temp = JSON.stringify(wfacp_analytics_data.google_ua); 1143 temp = JSON.parse(temp); 1144 temp.id = f_id.trim(); 1145 wfacp_analytics_data.wfacp_frontend.tracks.google_ua[f_id] = new Google(temp); 1146 } 1147 } 1148 } 1149 if (wfacp_analytics_data.hasOwnProperty('google_ads') && wfacp_analytics_data.google_ads.hasOwnProperty('id')) { 1150 let ids = wfacp_analytics_data.google_ads.id.split(','); 1151 let gadLabels = []; 1152
1153 if ( typeof wfacp_analytics_data.google_ads.cart_labels === "string") { 1154 gadLabels = wfacp_analytics_data.google_ads.cart_labels.split(','); 1155 } 1156 /** 1157 * get bump cart labels 1158 */ 1159 let bumpGadLabels = []; 1160 if ((typeof wfob_frontend == 'object') && wfob_frontend.hasOwnProperty('track') && wfob_frontend.track.hasOwnProperty('google_ads')) { 1161 if (typeof wfob_frontend.track.google_ads.cart_labels === "string") { 1162 bumpGadLabels = wfob_frontend.track.google_ads.cart_labels.split(','); 1163 } 1164 } 1165 1166 if (ids.length > 0) { 1167 if (!bwf_gtag_load) { 1168 Google.enqueue_js(ids[0]); 1169 bwf_gtag_load = true; 1170 } 1171 wfacp_analytics_data.wfacp_frontend.tracks.google_ads = {}; 1172 for (let f = 0; f < ids.length; f++) { 1173 let f_id = ids[f]; 1174 let temp = JSON.stringify(wfacp_analytics_data.google_ads); 1175 temp = JSON.parse(temp); 1176 temp.id = f_id.trim(); 1177 /** 1178 * set checkout add to cart labels 1179 */ 1180 if ("undefined" !== typeof gadLabels[f] && gadLabels[f] !== "") { 1181 temp.idlabel = temp.id + '/' + gadLabels[f].trim(); 1182 } 1183 /** 1184 * set bump add to cart labels 1185 */ 1186 if ("undefined" !== typeof bumpGadLabels[f] && bumpGadLabels[f] !== "") { 1187 temp.bumpIdlabel = temp.id + '/' + bumpGadLabels[f].trim(); 1188 } 1189 wfacp_analytics_data.wfacp_frontend.tracks.google_ads[f_id] = new Google_ads(temp); 1190 } 1191 } 1192 } 1193 if (wfacp_analytics_data.hasOwnProperty('pint') && wfacp_analytics_data.pint.hasOwnProperty('id')) { 1194 let ids = wfacp_analytics_data.pint.id.split(','); 1195 if (ids.length > 0) { 1196 Pinterest.enqueue_js(); 1197 wfacp_analytics_data.wfacp_frontend.tracks.pint = {}; 1198 for (let f = 0; f < ids.length; f++) { 1199 let f_id = ids[f]; 1200 let temp = JSON.stringify(wfacp_analytics_data.pint); 1201 temp = JSON.parse(temp); 1202 temp.id = f_id.trim(); 1203 wfacp_analytics_data.wfacp_frontend.tracks.pint[f_id] = new Pinterest(temp); 1204 } 1205 } 1206 } 1207 if (wfacp_analytics_data.hasOwnProperty('tiktok') && wfacp_analytics_data.tiktok.hasOwnProperty('id')) { 1208 let ids = wfacp_analytics_data.tiktok.id.split(','); 1209 if (ids.length > 0) { 1210 TikTok.enqueue_js(); 1211 wfacp_analytics_data.wfacp_frontend.tracks.tiktok = {}; 1212 for (let f = 0; f < ids.length; f++) { 1213 let f_id = ids[f]; 1214 let temp = JSON.stringify(wfacp_analytics_data.tiktok); 1215 temp = JSON.parse(temp); 1216 temp.id = f_id.trim(); 1217 wfacp_analytics_data.wfacp_frontend.tracks.tiktok[f_id] = new TikTok(temp); 1218 } 1219 } 1220 } 1221 if (wfacp_analytics_data.hasOwnProperty('snapchat') && wfacp_analytics_data.snapchat.hasOwnProperty('id')) { 1222 let ids = wfacp_analytics_data.snapchat.id.split(','); 1223 if (ids.length > 0) { 1224 SnapChat.enqueue_js();
1225 wfacp_analytics_data.wfacp_frontend.tracks.snapchat = {}; 1226 for (let f = 0; f < ids.length; f++) { 1227 let f_id = ids[f]; 1228 let temp = JSON.stringify(wfacp_analytics_data.snapchat); 1229 temp = JSON.parse(temp); 1230 temp.id = f_id.trim(); 1231 wfacp_analytics_data.wfacp_frontend.tracks.snapchat[f_id] = new SnapChat(temp); 1232 } 1233 } 1234 } 1235 1236 }); 1237 1238 } 1239 } 1240 1241 try { 1242 Loader.init(); 1243 } catch (e) { 1244 console.log(e); 1245 } 1246})(jQuery);
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.