PageSourceSearch

https://studio.katieaustin.tv/wp-content/plugins/tiktok-for-business/admin/js/ajaxSnippet.js?ver=v1

js katieaustin.tv collected 2026-10-01 16:12:58 UTC 7,905 bytes, 217 lines download raw bytes

1jQuery( 
2		function( $ ) {
3			$( document.body ).on( 
4				'added_to_cart', 
5				function( e, fragments, cart_hash, thisbutton ) {
6					var pixel_code = window.tt4b_script_vars.pixel_code;
7					var currency = window.tt4b_script_vars.currency;
8					var product_id = thisbutton.data('product_id');
9					var product_name = thisbutton.data('product_name');
10					var price = thisbutton.data('price');
11
12					ttq.instance(pixel_code).track(
13						'AddToCart',
14						{
15							'content_id': product_id,
16							'content_name': product_name,
17							'content_type': 'product',
18							'price': price,
19							'value': price,
20							'quantity': 1,
21							'currency': currency
22						}
23					);
24				}
25				);
26
27
28	// add library to help parse phone numbers
29	let script = document.createElement('script');
30	script.src = 'https://unpkg.com/[email protected]/bundle/libphonenumber-min.js';
31	document.head.appendChild(script);
32
33	// add library to generate uuid4 for event api
34	let uuidScript = document.createElement('script');
35	uuidScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/uuid/8.1.0/uuidv4.min.js';
36	document.head.appendChild(uuidScript);
37
38	// advanced matching - will send hashed advanced_matching fields if true, otherwise will exit if advanced_matching value is false or null
39	function getEmailAndPhone(inputElement, pixelCode, source) {
40		if (window.tt4b_script_vars.advanced_matching !== '1') {
41			return;
42		}
43		let result = {
44			email: "",
45			phone_number: ""
46		};
47		if (!inputElement) {
48			return result
49		}
50		let form = inputElement.closest('form') || inputElement.querySelector('form');
51		if ((!form || form.length === 0) && source !== 'ninjaforms') {
52			return;
53		} else if ((!form || form.length === 0) && source === 'ninjaforms') {
54			form = inputElement.first('form')[0];
55		}
56		let inputElements = form.querySelectorAll('input');
57		for (let input of inputElements) {
58			if (input.type === 'email') {
59				result.email = input.value;
60			} else if (input.type === 'tel') {
61				try {
62					let phone_number = input.value;
63					result.phone_number = libphonenumber.parsePhoneNumber(phone_number, window.tt4b_script_vars.country).number
64				} catch (error) {
65					console.error("Error occurred while parsing phone number: ", error);
66				}
67			}
68		}
69		ttq.instance(pixelCode).identify(result);
70	}
71
72	// Fires a Contact event if AM data present in form, otherwise fires a SubmitForm vent
73	function firePixelBasedOnFormIntent(inputElement, pixelCode, source) {
74		let form = inputElement.closest('form') || inputElement.querySelector('form');
75		if ((!form || form.length === 0) && source !== 'ninjaforms') {
76			return;
77		} else if ((!form || form.length === 0) && source === 'ninjaforms') {
78			form = inputElement.first('form')[0];
79		}
80		let inputElements = form.querySelectorAll('input');
81		let hasAMData = false;
82		for (let input of inputElements) {
83			if (input.type === 'email' || input.type === 'tel') {
84				hasAMData = true;
85				break;
86			}
87		}
88		let eventType = hasAMData ? 'Contact' : 'SubmitForm'
89		ttq.instance(pixelCode).track(eventType, {
90			'source' : source,
91			'wp_plugin' : source,
92			"event_id" : uuidv4()
93		})
94	}
95
96	// Some forms will trigger the submit event, even if the form submission is unsuccessful
97	// In this case we want to make sure the form submission is successful by checking for the success message
98	// once the message is visible, we will fire the pixel event
99	function createObserver(source) {
100		return new MutationObserver(function(mutations) {
101			mutations.forEach(function(mutation) {
102				if (window.getComputedStyle(mutation.target).display !== 'none') {
103					getEmailAndPhone(mutation.target, window.tt4b_script_vars.pixel_code);
104					firePixelBasedOnFormIntent(mutation.target, window.tt4b_script_vars.pixel_code, source)
105				}
106			});
107		});
108	}
109
110	// fallback case
111	document.addEventListener('submit', function(event) {
112		var pixel_code = window.tt4b_script_vars.pixel_code;
113		getEmailAndPhone(event.target, pixel_code);
114		firePixelBasedOnFormIntent(event.target, pixel_code, "fallback")
115	});
116
117	// ButtonClick Lead Gen Event
118	$('button, :submit').on( 'click', function(event) {
119		var pixel_code = window.tt4b_script_vars.pixel_code;
120		// AM based on form inputs when submit clicked
121		getEmailAndPhone(event.target, pixel_code);
122		ttq.instance(pixel_code).track('ClickButton', {
123			'content': 'SubmitClick',
124			"event_id": uuidv4()
125		});
126	});
127
128	// Contact Lead Gen Event: Contact Form 7
129	// https://wordpress.org/plugins/contact-form-7/
130	document.addEventListener('wpcf7mailsent', function(event) {
131		var pixel_code = window.tt4b_script_vars.pixel_code;
132		getEmailAndPhone(event.target, pixel_code);
133		firePixelBasedOnFormIntent(event.target, pixel_code, "contactform7")
134	 }, false);
135
136	// Contact Lead Gen Event: MC4WP: Mailchimp for Wordpress
137	// https://wordpress.org/plugins/mailchimp-for-wp/
138	var mailchimp_forms = document.querySelectorAll('.mc4wp-form');
139	mailchimp_forms.forEach(function(form) {
140		var pixel_code = window.tt4b_script_vars.pixel_code;
141		form.addEventListener('submit', function(event) {
142			getEmailAndPhone(event.target, pixel_code);
143			firePixelBasedOnFormIntent(event.target, pixel_code, "mailchimp4wordpress")
144		});
145	});
146
147	// Contact Lead Gen Event: Jetpack + Mailchimp
148	// https://jetpack.com/support/jetpack-blocks/mailchimp-block/
149	var jetpackMailchimpNodes = document.querySelectorAll('.wp-block-jetpack-mailchimp_success');
150	if (jetpackMailchimpNodes.length > 0) {
151		var jetpackMailchimpObserver = createObserver('jetpackmailchimp');
152		jetpackMailchimpNodes.forEach(function(targetNode) {
153			jetpackMailchimpObserver.observe(targetNode, { attributes: true, childList: true, subtree: true });
154		});
155	}
156
157	// Contact Lead Get Event: MailPoet
158	// https://wordpress.org/plugins/mailpoet/
159	$('input.mailpoet_submit').on('click', function() {
160		var pixel_code = window.tt4b_script_vars.pixel_code;
161		getEmailAndPhone(event.target, pixel_code);
162		firePixelBasedOnFormIntent(event.target, pixel_code, "mailpoet")
163	});
164
165	// Contact Lead Gen Event: Spectra
166	// https://wordpress.org/plugins/ultimate-addons-for-gutenberg/
167	var spectraForms = document.querySelectorAll('.uagb-forms-main-form');
168	spectraForms.forEach(function(form) {
169		var pixel_code = window.tt4b_script_vars.pixel_code;
170		form.addEventListener('submit', function(event) {
171			getEmailAndPhone(event.target, pixel_code);
172			firePixelBasedOnFormIntent(event.target, pixel_code, "spectra")
173		});
174	});
175
176	// Submit Form Lead Gen Event: WPForms
177	// https://wordpress.org/plugins/wpforms-lite/
178	$('form.wpforms-form').on('wpformsAjaxSubmitSuccess', (event) => {
179		var pixel_code = window.tt4b_script_vars.pixel_code;
180		getEmailAndPhone(event.target, pixel_code);
181		firePixelBasedOnFormIntent(event.target, pixel_code, "wpforms")
182	})
183
184
185	// Submit Form Lead Gen Events: JetPack
186	// https://wordpress.org/plugins/jetpack/
187	if (document.querySelector('[class*=jetpack-contact-form]')) {
188		document.addEventListener('submit', (event) => {
189			var pixel_code = window.tt4b_script_vars.pixel_code;
190			getEmailAndPhone(event.target, pixel_code);
191			firePixelBasedOnFormIntent(event.target, pixel_code, "jetpack")
192		});
193	}
194
195	// Submit Form Lead Gen Events: Ninja Forms
196	// https://wordpress.org/plugins/ninja-forms/
197	$(document).on('nfFormSubmitResponse', (event) => {
198		event.preventDefault();
199		var pixel_code = window.tt4b_script_vars.pixel_code;
200		getEmailAndPhone($('.nf-form-layout'), pixel_code, "ninjaforms");
201		firePixelBasedOnFormIntent($('.nf-form-layout'), pixel_code, "ninjaforms")
202	});
203
204	$(document).on('nfFormReady', (event) => {
205		event.preventDefault();
206		$('button, :submit, input[type="submit"]').on( 'click', function(event) {
207			var pixel_code = window.tt4b_script_vars.pixel_code;
208			// AM based on form inputs when submit clicked
209			getEmailAndPhone(event.target, pixel_code);
210			ttq.instance(pixel_code).track('ClickButton', {
211				'content': 'SubmitClick'
212			});
213		});
214	})
215
216});
217

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.