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.warn("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 let event_id = "" 90 try { 91 event_id = uuidv4() 92 } catch (error) { 93 console.warn("Error occurred while generating uuidv4: ", error); 94 } 95 ttq.instance(pixelCode).track(eventType, { 96 'source' : source, 97 'wp_plugin' : source, 98 "event_id" : event_id 99 }) 100 } 101 102 // Some forms will trigger the submit event, even if the form submission is unsuccessful 103 // In this case we want to make sure the form submission is successful by checking for the success message 104 // once the message is visible, we will fire the pixel event 105 function createObserver(source) { 106 return new MutationObserver(function(mutations) { 107 mutations.forEach(function(mutation) { 108 if (window.getComputedStyle(mutation.target).display !== 'none') { 109 getEmailAndPhone(mutation.target, window.tt4b_script_vars.pixel_code); 110 firePixelBasedOnFormIntent(mutation.target, window.tt4b_script_vars.pixel_code, source) 111 } 112 }); 113 }); 114 } 115 116 // fallback case 117 document.addEventListener('submit', function(event) { 118 var pixel_code = window.tt4b_script_vars.pixel_code; 119 getEmailAndPhone(event.target, pixel_code);
120 firePixelBasedOnFormIntent(event.target, pixel_code, "fallback") 121 }); 122 123 // ButtonClick Lead Gen Event 124 $('button, :submit').on( 'click', function(event) { 125 var pixel_code = window.tt4b_script_vars.pixel_code; 126 // AM based on form inputs when submit clicked 127 getEmailAndPhone(event.target, pixel_code); 128 let event_id = "" 129 try { 130 event_id = uuidv4() 131 } catch (error) { 132 console.warn("Error occurred while generating uuidv4: ", error); 133 } 134 ttq.instance(pixel_code).track('ClickButton', { 135 'content': 'SubmitClick', 136 "event_id": event_id 137 }); 138 }); 139 140 // Contact Lead Gen Event: Contact Form 7 141 // https://wordpress.org/plugins/contact-form-7/ 142 document.addEventListener('wpcf7mailsent', function(event) { 143 var pixel_code = window.tt4b_script_vars.pixel_code; 144 getEmailAndPhone(event.target, pixel_code); 145 firePixelBasedOnFormIntent(event.target, pixel_code, "contactform7") 146 }, false); 147 148 // Contact Lead Gen Event: MC4WP: Mailchimp for Wordpress 149 // https://wordpress.org/plugins/mailchimp-for-wp/ 150 var mailchimp_forms = document.querySelectorAll('.mc4wp-form'); 151 mailchimp_forms.forEach(function(form) { 152 var pixel_code = window.tt4b_script_vars.pixel_code; 153 form.addEventListener('submit', function(event) { 154 getEmailAndPhone(event.target, pixel_code); 155 firePixelBasedOnFormIntent(event.target, pixel_code, "mailchimp4wordpress") 156 }); 157 }); 158 159 // Contact Lead Gen Event: Jetpack + Mailchimp 160 // https://jetpack.com/support/jetpack-blocks/mailchimp-block/ 161 var jetpackMailchimpNodes = document.querySelectorAll('.wp-block-jetpack-mailchimp_success'); 162 if (jetpackMailchimpNodes.length > 0) { 163 var jetpackMailchimpObserver = createObserver('jetpackmailchimp'); 164 jetpackMailchimpNodes.forEach(function(targetNode) { 165 jetpackMailchimpObserver.observe(targetNode, { attributes: true, childList: true, subtree: true }); 166 }); 167 } 168 169 // Contact Lead Get Event: MailPoet 170 // https://wordpress.org/plugins/mailpoet/ 171 $('input.mailpoet_submit').on('click', function() { 172 var pixel_code = window.tt4b_script_vars.pixel_code; 173 getEmailAndPhone(event.target, pixel_code); 174 firePixelBasedOnFormIntent(event.target, pixel_code, "mailpoet") 175 }); 176 177 // Contact Lead Gen Event: Spectra 178 // https://wordpress.org/plugins/ultimate-addons-for-gutenberg/ 179 var spectraForms = document.querySelectorAll('.uagb-forms-main-form'); 180 spectraForms.forEach(function(form) { 181 var pixel_code = window.tt4b_script_vars.pixel_code; 182 form.addEventListener('submit', function(event) { 183 getEmailAndPhone(event.target, pixel_code); 184 firePixelBasedOnFormIntent(event.target, pixel_code, "spectra") 185 }); 186 }); 187 188 // Submit Form Lead Gen Event: WPForms 189 // https://wordpress.org/plugins/wpforms-lite/ 190 $('form.wpforms-form').on('wpformsAjaxSubmitSuccess', (event) => { 191 var pixel_code = window.tt4b_script_vars.pixel_code; 192 getEmailAndPhone(event.target, pixel_code); 193 firePixelBasedOnFormIntent(event.target, pixel_code, "wpforms") 194 }) 195 196 197 // Submit Form Lead Gen Events: JetPack 198 // https://wordpress.org/plugins/jetpack/ 199 if (document.querySelector('[class*=jetpack-contact-form]')) { 200 document.addEventListener('submit', (event) => { 201 var pixel_code = window.tt4b_script_vars.pixel_code; 202 getEmailAndPhone(event.target, pixel_code); 203 firePixelBasedOnFormIntent(event.target, pixel_code, "jetpack") 204 }); 205 } 206 207 // Submit Form Lead Gen Events: Ninja Forms 208 // https://wordpress.org/plugins/ninja-forms/ 209 $(document).on('nfFormSubmitResponse', (event) => { 210 event.preventDefault(); 211 var pixel_code = window.tt4b_script_vars.pixel_code; 212 getEmailAndPhone($('.nf-form-layout'), pixel_code, "ninjaforms"); 213 firePixelBasedOnFormIntent($('.nf-form-layout'), pixel_code, "ninjaforms") 214 }); 215 216 $(document).on('nfFormReady', (event) => { 217 event.preventDefault(); 218 $('button, :submit, input[type="submit"]').on( 'click', function(event) { 219 var pixel_code = window.tt4b_script_vars.pixel_code; 220 // AM based on form inputs when submit clicked 221 getEmailAndPhone(event.target, pixel_code); 222 ttq.instance(pixel_code).track('ClickButton', { 223 'content': 'SubmitClick' 224 }); 225 }); 226 }) 227 228}); 229
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.