// source --> https://mazagran.pl/wp-content/plugins/tiktok-for-business/admin/js/ajaxSnippet.js?ver=v1 jQuery( function( $ ) { $( document.body ).on( 'added_to_cart', function( e, fragments, cart_hash, thisbutton ) { var pixel_code = window.tt4b_script_vars.pixel_code; var currency = window.tt4b_script_vars.currency; var product_id = thisbutton.data('product_id'); var product_name = thisbutton.data('product_name'); var price = thisbutton.data('price'); ttq.instance(pixel_code).track( 'AddToCart', { 'content_id': product_id, 'content_name': product_name, 'content_type': 'product', 'price': price, 'value': price, 'quantity': 1, 'currency': currency } ); } ); // add library to help parse phone numbers let script = document.createElement('script'); script.src = 'https://unpkg.com/libphonenumber-js@1.10.45/bundle/libphonenumber-min.js'; document.head.appendChild(script); // add library to generate uuid4 for event api let uuidScript = document.createElement('script'); uuidScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/uuid/8.1.0/uuidv4.min.js'; document.head.appendChild(uuidScript); // advanced matching - will send hashed advanced_matching fields if true, otherwise will exit if advanced_matching value is false or null function getEmailAndPhone(inputElement, pixelCode, source) { if (window.tt4b_script_vars.advanced_matching !== '1') { return; } let result = { email: "", phone_number: "" }; if (!inputElement) { return result } let form = inputElement.closest('form') || inputElement.querySelector('form'); if ((!form || form.length === 0) && source !== 'ninjaforms') { return; } else if ((!form || form.length === 0) && source === 'ninjaforms') { form = inputElement.first('form')[0]; } let inputElements = form.querySelectorAll('input'); for (let input of inputElements) { if (input.type === 'email') { result.email = input.value; } else if (input.type === 'tel') { try { let phone_number = input.value; result.phone_number = libphonenumber.parsePhoneNumber(phone_number, window.tt4b_script_vars.country).number } catch (error) { console.error("Error occurred while parsing phone number: ", error); } } } ttq.instance(pixelCode).identify(result); } // Fires a Contact event if AM data present in form, otherwise fires a SubmitForm vent function firePixelBasedOnFormIntent(inputElement, pixelCode, source) { let form = inputElement.closest('form') || inputElement.querySelector('form'); if ((!form || form.length === 0) && source !== 'ninjaforms') { return; } else if ((!form || form.length === 0) && source === 'ninjaforms') { form = inputElement.first('form')[0]; } let inputElements = form.querySelectorAll('input'); let hasAMData = false; for (let input of inputElements) { if (input.type === 'email' || input.type === 'tel') { hasAMData = true; break; } } let eventType = hasAMData ? 'Contact' : 'SubmitForm' ttq.instance(pixelCode).track(eventType, { 'source' : source, 'wp_plugin' : source, "event_id" : uuidv4() }) } // Some forms will trigger the submit event, even if the form submission is unsuccessful // In this case we want to make sure the form submission is successful by checking for the success message // once the message is visible, we will fire the pixel event function createObserver(source) { return new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (window.getComputedStyle(mutation.target).display !== 'none') { getEmailAndPhone(mutation.target, window.tt4b_script_vars.pixel_code); firePixelBasedOnFormIntent(mutation.target, window.tt4b_script_vars.pixel_code, source) } }); }); } // fallback case document.addEventListener('submit', function(event) { var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "fallback") }); // ButtonClick Lead Gen Event $('button, :submit').on( 'click', function(event) { var pixel_code = window.tt4b_script_vars.pixel_code; // AM based on form inputs when submit clicked getEmailAndPhone(event.target, pixel_code); ttq.instance(pixel_code).track('ClickButton', { 'content': 'SubmitClick', "event_id": uuidv4() }); }); // Contact Lead Gen Event: Contact Form 7 // https://wordpress.org/plugins/contact-form-7/ document.addEventListener('wpcf7mailsent', function(event) { var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "contactform7") }, false); // Contact Lead Gen Event: MC4WP: Mailchimp for Wordpress // https://wordpress.org/plugins/mailchimp-for-wp/ var mailchimp_forms = document.querySelectorAll('.mc4wp-form'); mailchimp_forms.forEach(function(form) { var pixel_code = window.tt4b_script_vars.pixel_code; form.addEventListener('submit', function(event) { getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "mailchimp4wordpress") }); }); // Contact Lead Gen Event: Jetpack + Mailchimp // https://jetpack.com/support/jetpack-blocks/mailchimp-block/ var jetpackMailchimpNodes = document.querySelectorAll('.wp-block-jetpack-mailchimp_success'); if (jetpackMailchimpNodes.length > 0) { var jetpackMailchimpObserver = createObserver('jetpackmailchimp'); jetpackMailchimpNodes.forEach(function(targetNode) { jetpackMailchimpObserver.observe(targetNode, { attributes: true, childList: true, subtree: true }); }); } // Contact Lead Get Event: MailPoet // https://wordpress.org/plugins/mailpoet/ $('input.mailpoet_submit').on('click', function() { var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "mailpoet") }); // Contact Lead Gen Event: Spectra // https://wordpress.org/plugins/ultimate-addons-for-gutenberg/ var spectraForms = document.querySelectorAll('.uagb-forms-main-form'); spectraForms.forEach(function(form) { var pixel_code = window.tt4b_script_vars.pixel_code; form.addEventListener('submit', function(event) { getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "spectra") }); }); // Submit Form Lead Gen Event: WPForms // https://wordpress.org/plugins/wpforms-lite/ $('form.wpforms-form').on('wpformsAjaxSubmitSuccess', (event) => { var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "wpforms") }) // Submit Form Lead Gen Events: JetPack // https://wordpress.org/plugins/jetpack/ if (document.querySelector('[class*=jetpack-contact-form]')) { document.addEventListener('submit', (event) => { var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone(event.target, pixel_code); firePixelBasedOnFormIntent(event.target, pixel_code, "jetpack") }); } // Submit Form Lead Gen Events: Ninja Forms // https://wordpress.org/plugins/ninja-forms/ $(document).on('nfFormSubmitResponse', (event) => { event.preventDefault(); var pixel_code = window.tt4b_script_vars.pixel_code; getEmailAndPhone($('.nf-form-layout'), pixel_code, "ninjaforms"); firePixelBasedOnFormIntent($('.nf-form-layout'), pixel_code, "ninjaforms") }); $(document).on('nfFormReady', (event) => { event.preventDefault(); $('button, :submit, input[type="submit"]').on( 'click', function(event) { var pixel_code = window.tt4b_script_vars.pixel_code; // AM based on form inputs when submit clicked getEmailAndPhone(event.target, pixel_code); ttq.instance(pixel_code).track('ClickButton', { 'content': 'SubmitClick' }); }); }) });