1 /* @v3-js:start */ 2 let c4wp_onloadCallback = function() { 3 for (var i = 0; i < document.forms.length; i++) { 4 let form = document.forms[i]; 5 let captcha_div = form.querySelector('.c4wp_captcha_field_div:not(.rendered)'); 6 let jetpack_sso = form.querySelector('#jetpack-sso-wrap'); 7 var wcblock_submit = form.querySelector('.wc-block-components-checkout-place-order-button'); 8 var has_wc_submit = null !== wcblock_submit; 9 10 if (null === captcha_div && !has_wc_submit || form.id == 'create-group-form') { 11 if (!form.parentElement.classList.contains('nf-form-layout')) { 12 continue; 13 } 14 15 } 16 if (!has_wc_submit) { 17 if (!(captcha_div.offsetWidth || captcha_div.offsetHeight || captcha_div.getClientRects().length)) { 18 if (jetpack_sso == null && !form.classList.contains('woocommerce-form-login')) { 19 continue; 20 } 21 } 22 } 23 24 let alreadyCloned = form.querySelector('.c4wp-submit'); 25 if (null != alreadyCloned) { 26 continue; 27 } 28 29 let foundSubmitBtn = form.querySelector('#signup-form [type=submit], [type=submit]:not(#group-creation-create):not([name="signup_submit"]):not([name="ac_form_submit"]):not(.verify-captcha)'); 30 let cloned = false; 31 let clone = false; 32 33 // Submit button found, clone it. 34 if (foundSubmitBtn) { 35 clone = foundSubmitBtn.cloneNode(true); 36 clone.classList.add('c4wp-submit'); 37 clone.removeAttribute('onclick'); 38 clone.removeAttribute('onkeypress'); 39 if (foundSubmitBtn.parentElement.form === null) { 40 foundSubmitBtn.parentElement.prepend(clone); 41 } else { 42 foundSubmitBtn.parentElement.insertBefore(clone, foundSubmitBtn); 43 } 44 foundSubmitBtn.style.display = "none"; 45 captcha_div = form.querySelector('.c4wp_captcha_field_div'); 46 cloned = true; 47 } 48 49 // WC block checkout clone btn. 50 if (has_wc_submit && !form.classList.contains('c4wp-primed')) { 51 clone = wcblock_submit.cloneNode(true); 52 clone.classList.add('c4wp-submit'); 53 clone.classList.add('c4wp-clone'); 54 clone.removeAttribute('onclick'); 55 clone.removeAttribute('onkeypress'); 56 if (wcblock_submit.parentElement.form === null) { 57 wcblock_submit.parentElement.prepend(clone); 58 } else { 59 wcblock_submit.parentElement.insertBefore(clone, wcblock_submit); 60 } 61 wcblock_submit.style.display = "none"; 62 63 clone.addEventListener('click', function(e) { 64 if (form.classList.contains('c4wp_v2_fallback_active')) { 65 jQuery(form).find('.wc-block-components-checkout-place-order-button:not(.c4wp-submit)').click(); 66 return true; 67 } else { 68 grecaptcha.execute(c4wpConfig.site_key, ).then(function(data) { 69 form.classList.add('c4wp-primed'); 70 }); 71 } 72 73 }); 74 foundSubmitBtn = wcblock_submit; 75 cloned = true; 76 } 77 78 // Clone created, listen to its click. 79 if (cloned) { 80 clone.addEventListener('click', function(event) { 81 logSubmit(event, 'cloned', form, foundSubmitBtn); 82 }); 83 // No clone, execute and watch for form submission. 84 } else { 85 grecaptcha.execute( 86 c4wpConfig.site_key, 87 ).then(function(data) { 88 var responseElem = form.querySelector('.c4wp_response'); 89 if (responseElem == null) { 90 var responseElem = document.querySelector('.c4wp_response'); 91 } 92 if (responseElem != null) { 93 responseElem.setAttribute('value', data); 94 } 95 }); 96 97 // Anything else. 98 form.addEventListener('submit', function(event) { 99 logSubmit(event, 'other', form); 100 }); 101 } 102 103 function logSubmit(event, form_type = '', form, foundSubmitBtn) { 104 // Standard v3 check. 105 if (!form.classList.contains('c4wp_v2_fallback_active') && !form.classList.contains('c4wp_verified')) { 106 event.preventDefault(); 107 try { 108 grecaptcha.execute( 109 c4wpConfig.site_key, 110 ).then(function(data) { 111 var responseElem = form.querySelector('.c4wp_response'); 112 if (responseElem == null) { 113 var responseElem = document.querySelector('.c4wp_response'); 114 } 115 116 responseElem.setAttribute('value', data); 117 118 if (form.classList.contains('wc-block-checkout__form')) { 119 // WC block checkout. 120 let input = document.querySelector('input[id*="c4wp-wc-checkout"]'); 121 let lastValue = input.value; 122 var token = data; 123 input.value = token; 124 let event = new Event('input', { 125 bubbles: true 126 }); 127 event.simulated = true; 128 let tracker = input._valueTracker; 129 if (tracker) { 130 tracker.setValue(lastValue); 131 } 132 input.dispatchEvent(event) 133 } 134 135 if ('nothing' !== c4wpConfig.failure_action) { 136 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 137 /* @v3-fallback-js:start */ 138 if (typeof captcha_div == 'undefined' && form.classList.contains('wc-block-checkout__form')) { 139 var captcha_div = form.querySelector('#additional-information-c4wp-c4wp-wc-checkout'); 140 } 141 142 if (typeof captcha_div == 'undefined') { 143 var captcha_div = form.querySelector('.c4wp_captcha_field_div'); 144 } 145 146 var parentElem = captcha_div.parentElement; 147 148 if ((form.classList.contains('c4wp-primed')) || (!form.classList.contains('c4wp_verify_underway') && captcha_div.parentElement.getAttribute('data-c4wp-use-ajax') == 'true')) { 149 150 form.classList.add('c4wp_verify_underway'); 151 const flagMarkup = '<input id="c4wp_ajax_flag" type="hidden" name="c4wp_ajax_flag" value="c4wp_ajax_flag">'; 152 var flagMarkupDiv = document.createElement('div'); 153 flagMarkupDiv.innerHTML = flagMarkup.trim(); 154 155 form.appendChild(flagMarkupDiv); 156 157 var nonce = captcha_div.parentElement.getAttribute('data-nonce'); 158 159 var formData = new FormData(); 160 161 formData.append('action', 'c4wp_ajax_verify'); 162 formData.append('nonce', nonce); 163 formData.append('response', data); 164 165 fetch(c4wpConfig.ajax_url, { 166 method: 'POST', 167 body: formData, 168 }) // wrapped 169 .then( 170 res => res.json() 171 ) 172 .then(data => { 173 if (data['success']) { 174 form.classList.add('c4wp_verified'); 175 176 var existingFlag = document.getElementById('c4wp_ajax_flag'); 177 if (existingFlag) { 178 existingFlag.value = data.data.token;
179 } else { 180 const flagMarkup = '<input id="c4wp_ajax_flag" type="hidden" name="c4wp_ajax_flag" value="' + data.data.token + '">'; 181 var flagMarkupDiv = document.createElement('div'); 182 flagMarkupDiv.innerHTML = flagMarkup.trim(); 183 form.appendChild( flagMarkupDiv ); 184 } 185 186 // Submit as usual. 187 if (foundSubmitBtn) { 188 foundSubmitBtn.click(); 189 } else if (form.classList.contains('wc-block-checkout__form')) { 190 jQuery(form).find('.wc-block-components-checkout-place-order-button:not(.c4wp-submit)').click(); 191 } else { 192 if (typeof form.submit === 'function') { 193 form.submit(); 194 } else { 195 HTMLFormElement.prototype.submit.call(form); 196 } 197 } 198 199 } else { 200 //jQuery( '.nf-form-cont' ).trigger( 'nfFormReady' ); 201 202 if ('redirect' === c4wpConfig.failure_action) { 203 window.location.href = c4wpConfig.failure_redirect; 204 } 205 206 if ('v2_checkbox' === c4wpConfig.failure_action) { 207 if (form.classList.contains('wc-block-checkout__form')) { 208 captcha_div = captcha_div.parentElement; 209 } 210 211 captcha_div.innerHTML = ''; 212 form.classList.add('c4wp_v2_fallback_active'); 213 flagMarkupDiv.firstChild.setAttribute('name', 'c4wp_v2_fallback'); 214 215 var c4wp_captcha = grecaptcha.render(captcha_div, { 216 'sitekey': c4wpConfig.failure_v2_site_key, 217 'size': c4wpConfig.size, 218 'theme': c4wpConfig.theme, 219 'expired-callback': function() { 220 grecaptcha.reset(c4wp_captcha); 221 } 222 }); 223 } 224 225 if (form.classList.contains('wc-block-checkout__form')) { 226 return true; 227 } 228 229 if (form.parentElement.classList.contains('nf-form-layout')) { 230 return false; 231 } 232 233 // Prevent further submission 234 event.preventDefault(); 235 return false; 236 } 237 }) 238 .catch(err => console.error(err)); 239 240 // Prevent further submission 241 event.preventDefault(); 242 return false;
243 } 244 /* @v3-fallback-js:end */ 245 } 246 247 248 // Submit as usual. 249 if (foundSubmitBtn) { 250 foundSubmitBtn.click(); 251 } else if (form.classList.contains('wc-block-checkout__form')) { 252 jQuery(form).find('.wc-block-components-checkout-place-order-button:not(.c4wp-submit)').click(); 253 } else { 254 255 if (typeof form.submit === 'function') { 256 form.submit(); 257 } else { 258 HTMLFormElement.prototype.submit.call(form); 259 } 260 } 261 262 return true; 263 }); 264 } catch (e) { 265 // Silence. 266 } 267 // V2 fallback. 268 } else { 269 if (form.classList.contains('wpforms-form') || form.classList.contains('frm-fluent-form') || form.classList.contains('woocommerce-checkout')) { 270 return true; 271 } 272 273 if (form.parentElement.classList.contains('nf-form-layout')) { 274 return false; 275 } 276 277 if (form.classList.contains('wc-block-checkout__form')) { 278 return; 279 } 280 281 // Submit as usual. 282 if (typeof form.submit === 'function') { 283 form.submit(); 284 } else { 285 HTMLFormElement.prototype.submit.call(form); 286 } 287 288 return true; 289 } 290 }; 291 } 292 }; 293 294 grecaptcha.ready(c4wp_onloadCallback); 295 296 if (typeof jQuery !== 'undefined') { 297 jQuery('body').on('click', '.acomment-reply.bp-primary-action', function(e) { 298 c4wp_onloadCallback(); 299 }); 300 } 301 302 //token is valid for 2 minutes, So get new token every after 1 minutes 50 seconds 303 setInterval(c4wp_onloadCallback, 110000); 304 305 306 eval(c4wpConfig.additional_js); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 307 308 309 window.addEventListener("load", (event) => { 310 if (typeof jQuery !== 'undefined' && jQuery('input[id*="c4wp-wc-checkout"]').length) { 311 var element = document.createElement('div'); 312 var html = c4wpConfig.field_markup; 313 element.innerHTML = html; 314 jQuery('[class*="c4wp-wc-checkout"]').append(element); 315 jQuery('[class*="c4wp-wc-checkout"]').find('*').off(); 316 c4wp_onloadCallback(); 317 } 318 }); 319 /* @v3-js:end */
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.