oont-contents/plugins/tiktok-for-business/admin/js/ajaxSnippet.js
2025-03-31 21:42:48 +02:00

280 lines
8.8 KiB
JavaScript

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.warn( "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'
let event_id = ""
try {
event_id = uuidv4()
} catch (error) {
console.warn( "Error occurred while generating uuidv4: ", error );
}
ttq.instance( pixelCode ).track(
eventType,
{
'source' : source,
'wp_plugin' : source,
"event_id" : event_id
}
)
}
// 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 );
let event_id = ""
try {
event_id = uuidv4()
} catch (error) {
console.warn( "Error occurred while generating uuidv4: ", error );
}
ttq.instance( pixel_code ).track(
'ClickButton',
{
'content': 'SubmitClick',
"event_id": event_id
}
);
}
);
// 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'
}
);
}
);
}
)
}
);