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 // add library to help parse phone numbers 28 let script = document.createElement( 'script' ); 29 script.src = 'https://unpkg.com/[email protected]/bundle/libphonenumber-min.js'; 30 document.head.appendChild( script ); 31 32 // add library to generate uuid4 for event api 33 let uuidScript = document.createElement( 'script' ); 34 uuidScript.src = 'https://cdnjs.cloudflare.com/ajax/libs/uuid/8.1.0/uuidv4.min.js'; 35 document.head.appendChild( uuidScript ); 36 37 // advanced matching - will send hashed advanced_matching fields if true, otherwise will exit if advanced_matching value is false or null 38 function getEmailAndPhone(inputElement, pixelCode, source) { 39 if (window.tt4b_script_vars.advanced_matching !== '1') { 40 return; 41 } 42 let result = { 43 email: "", 44 phone_number: "" 45 }; 46 if ( ! inputElement) { 47 return result 48 } 49 let form = inputElement.closest( 'form' ) || inputElement.querySelector( 'form' ); 50 if (( ! form || form.length === 0) && source !== 'ninjaforms') { 51 return; 52 } else if (( ! form || form.length === 0) && source === 'ninjaforms') { 53 form = inputElement.first( 'form' )[0]; 54 } 55 let inputElements = form.querySelectorAll( 'input' ); 56 for (let input of inputElements) { 57 if (input.type === 'email') { 58 result.email = input.value; 59 } else if (input.type === 'tel') { 60 try { 61 let phone_number = input.value; 62 result.phone_number = libphonenumber.parsePhoneNumber( phone_number, window.tt4b_script_vars.country ).number 63 } catch (error) { 64 console.warn( "Error occurred while parsing phone number: ", error ); 65 } 66 } 67 } 68 ttq.instance( pixelCode ).identify( result ); 69 } 70 71 // Fires a Contact event if AM data present in form, otherwise fires a SubmitForm vent 72 function firePixelBasedOnFormIntent(inputElement, pixelCode, source) { 73 let form = inputElement.closest( 'form' ) || inputElement.querySelector( 'form' ); 74 if (( ! form || form.length === 0) && source !== 'ninjaforms') { 75 return; 76 } else if (( ! form || form.length === 0) && source === 'ninjaforms') { 77 form = inputElement.first( 'form' )[0]; 78 } 79 let inputElements = form.querySelectorAll( 'input' ); 80 let hasAMData = false; 81 for (let input of inputElements) { 82 if (input.type === 'email' || input.type === 'tel') { 83 hasAMData = true; 84 break; 85 } 86 } 87 let eventType = hasAMData ? 'Contact' : 'SubmitForm' 88 let event_id = "" 89 try { 90 event_id = uuidv4() 91 } catch (error) { 92 console.warn( "Error occurred while generating uuidv4: ", error ); 93 } 94 ttq.instance( pixelCode ).track( 95 eventType, 96 { 97 'source' : source, 98 'wp_plugin' : source, 99 "event_id" : event_id 100 } 101 ) 102 } 103 104 // Some forms will trigger the submit event, even if the form submission is unsuccessful 105 // In this case we want to make sure the form submission is successful by checking for the success message 106 // once the message is visible, we will fire the pixel event 107 function createObserver(source) { 108 return new MutationObserver( 109 function (mutations) { 110 mutations.forEach( 111 function (mutation) { 112 if (window.getComputedStyle( mutation.target ).display !== 'none') { 113 getEmailAndPhone( mutation.target, window.tt4b_script_vars.pixel_code ); 114 firePixelBasedOnFormIntent( mutation.target, window.tt4b_script_vars.pixel_code, source ) 115 } 116 } 117 ); 118 } 119 ); 120 } 121 122 // fallback case 123 document.addEventListener( 124 'submit', 125 function (event) { 126 var pixel_code = window.tt4b_script_vars.pixel_code; 127 getEmailAndPhone( event.target, pixel_code );
128 firePixelBasedOnFormIntent( event.target, pixel_code, "fallback" ) 129 } 130 ); 131 132 // ButtonClick Lead Gen Event 133 $( 'button, :submit' ).on( 134 'click', 135 function (event) { 136 var pixel_code = window.tt4b_script_vars.pixel_code; 137 // AM based on form inputs when submit clicked 138 getEmailAndPhone( event.target, pixel_code ); 139 let event_id = "" 140 try { 141 event_id = uuidv4() 142 } catch (error) { 143 console.warn( "Error occurred while generating uuidv4: ", error ); 144 } 145 ttq.instance( pixel_code ).track( 146 'ClickButton', 147 { 148 'content': 'SubmitClick', 149 "event_id": event_id 150 } 151 ); 152 } 153 ); 154 155 // Contact Lead Gen Event: Contact Form 7 156 // https://wordpress.org/plugins/contact-form-7/ 157 document.addEventListener( 158 'wpcf7mailsent', 159 function (event) { 160 var pixel_code = window.tt4b_script_vars.pixel_code; 161 getEmailAndPhone( event.target, pixel_code ); 162 firePixelBasedOnFormIntent( event.target, pixel_code, "contactform7" ) 163 }, 164 false 165 ); 166 167 // Contact Lead Gen Event: MC4WP: Mailchimp for Wordpress 168 // https://wordpress.org/plugins/mailchimp-for-wp/ 169 var mailchimp_forms = document.querySelectorAll( '.mc4wp-form' ); 170 mailchimp_forms.forEach( 171 function (form) { 172 var pixel_code = window.tt4b_script_vars.pixel_code; 173 form.addEventListener( 174 'submit', 175 function (event) { 176 getEmailAndPhone( event.target, pixel_code ); 177 firePixelBasedOnFormIntent( event.target, pixel_code, "mailchimp4wordpress" ) 178 } 179 ); 180 } 181 ); 182 183 // Contact Lead Gen Event: Jetpack + Mailchimp 184 // https://jetpack.com/support/jetpack-blocks/mailchimp-block/ 185 var jetpackMailchimpNodes = document.querySelectorAll( '.wp-block-jetpack-mailchimp_success' ); 186 if (jetpackMailchimpNodes.length > 0) { 187 var jetpackMailchimpObserver = createObserver( 'jetpackmailchimp' ); 188 jetpackMailchimpNodes.forEach( 189 function (targetNode) { 190 jetpackMailchimpObserver.observe( targetNode, { attributes: true, childList: true, subtree: true } ); 191 } 192 ); 193 } 194 195 // Contact Lead Get Event: MailPoet 196 // https://wordpress.org/plugins/mailpoet/ 197 $( 'input.mailpoet_submit' ).on( 198 'click', 199 function () { 200 var pixel_code = window.tt4b_script_vars.pixel_code; 201 getEmailAndPhone( event.target, pixel_code ); 202 firePixelBasedOnFormIntent( event.target, pixel_code, "mailpoet" ) 203 } 204 ); 205 206 // Contact Lead Gen Event: Spectra 207 // https://wordpress.org/plugins/ultimate-addons-for-gutenberg/ 208 var spectraForms = document.querySelectorAll( '.uagb-forms-main-form' ); 209 spectraForms.forEach( 210 function (form) { 211 var pixel_code = window.tt4b_script_vars.pixel_code; 212 form.addEventListener( 213 'submit', 214 function (event) { 215 getEmailAndPhone( event.target, pixel_code ); 216 firePixelBasedOnFormIntent( event.target, pixel_code, "spectra" ) 217 } 218 ); 219 } 220 ); 221 222 // Submit Form Lead Gen Event: WPForms 223 // https://wordpress.org/plugins/wpforms-lite/ 224 $( 'form.wpforms-form' ).on( 225 'wpformsAjaxSubmitSuccess', 226 (event) => { 227 var pixel_code = window.tt4b_script_vars.pixel_code; 228 getEmailAndPhone( event.target, pixel_code ); 229 firePixelBasedOnFormIntent( event.target, pixel_code, "wpforms" ) 230 } 231 ) 232 233 // Submit Form Lead Gen Events: JetPack 234 // https://wordpress.org/plugins/jetpack/ 235 if (document.querySelector( '[class*=jetpack-contact-form]' )) { 236 document.addEventListener( 237 'submit', 238 (event) => { 239 var pixel_code = window.tt4b_script_vars.pixel_code; 240 getEmailAndPhone( event.target, pixel_code ); 241 firePixelBasedOnFormIntent( event.target, pixel_code, "jetpack" ) 242 } 243 ); 244 } 245 246 // Submit Form Lead Gen Events: Ninja Forms 247 // https://wordpress.org/plugins/ninja-forms/ 248 $( document ).on( 249 'nfFormSubmitResponse', 250 (event) => { 251 event.preventDefault(); 252 var pixel_code = window.tt4b_script_vars.pixel_code; 253 getEmailAndPhone( $( '.nf-form-layout' ), pixel_code, "ninjaforms" ); 254 firePixelBasedOnFormIntent( $( '.nf-form-layout' ), pixel_code, "ninjaforms" ) 255 } 256 ); 257 258 $( document ).on( 259 'nfFormReady', 260 (event) => { 261 event.preventDefault(); 262 $( 'button, :submit, input[type="submit"]' ).on( 263 'click', 264 function (event) { 265 var pixel_code = window.tt4b_script_vars.pixel_code; 266 // AM based on form inputs when submit clicked 267 getEmailAndPhone( event.target, pixel_code ); 268 ttq.instance( pixel_code ).track( 269 'ClickButton', 270 { 271 'content': 'SubmitClick' 272 } 273 ); 274 } 275 ); 276 } 277 ) 278 279 } 280);
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.