1let recaptchaWidgets = []; 2recaptchaCallback = function() { 3 4 let forms = document.getElementsByTagName( 'form' ); 5 let pattern = /(^|\s)g-recaptcha(\s|$)/; 6 7 for ( let i = 0; i < forms.length; i++ ) { 8 let divs = forms[ i ].getElementsByTagName( 'div' ); 9 10 for ( let j = 0; j < divs.length; j++ ) { 11 let sitekey = divs[ j ].getAttribute( 'data-sitekey' ); 12 13 if ( divs[ j ].className && divs[ j ].className.match( pattern ) && sitekey ) { 14 let params = { 15 'sitekey': sitekey, 16 'type': divs[ j ].getAttribute( 'data-type' ), 17 'size': divs[ j ].getAttribute( 'data-size' ), 18 'theme': divs[ j ].getAttribute( 'data-theme' ), 19 'align': divs[ j ].getAttribute( 'data-align' ), 20 'badge': divs[ j ].getAttribute( 'data-badge' ), 21 'tabindex': divs[ j ].getAttribute( 'data-tabindex' ) 22 }; 23 24 let callback = divs[ j ].getAttribute( 'data-callback' ); 25 26 if ( callback && 'function' == typeof window[ callback ] ) { 27 params[ 'callback' ] = window[ callback ]; 28 } 29 30 let expired_callback = divs[ j ].getAttribute( 'data-expired-callback' ); 31 32 if ( expired_callback && 'function' == typeof window[ expired_callback ] ) { 33 params[ 'expired-callback' ] = window[ expired_callback ]; 34 } 35 36 let widget_id = grecaptcha.render( divs[ j ], params ); 37 recaptchaWidgets.push( widget_id ); 38 break; 39 } 40 } 41 } 42}; 43 44/** 45 * Reset the reCaptcha when Contact Form 7 gives us: 46 * - Spam 47 * - Success 48 * - Fail 49 * 50 * @return void 51 */ 52document.addEventListener( 'wpcf7submit', function( event ) { 53 switch ( event.detail.status ) { 54 case 'spam': 55 case 'mail_sent': 56 case 'mail_failed': 57 for ( let i = 0; i < recaptchaWidgets.length; i++ ) { 58 grecaptcha.reset( recaptchaWidgets[ i ] ); 59 } 60 } 61}, false ); 62 63/** 64 * Verify reCaptcha response and display error if not found. 65 */ 66document.addEventListener( 'wpcf7spam', function( event ) { 67 68 let wpcf7forms = document.getElementsByClassName( 'wpcf7' ); 69 70 Array.prototype.forEach.call( wpcf7forms, function( form ) { 71 72 if( form.getAttribute( 'id' ) != event.target.getAttribute( 'id' ) ) { 73 return; 74 } 75 76 let response = form.querySelector( 'textarea[name="g-recaptcha-response"]' ); 77 let recaptcha = form.querySelector( 'div.wpcf7-recaptcha' ); 78 if( response && '' === response.value ) { 79 let recaptchaWrapper = recaptcha.parentElement; 80 wpcf7.notValidTip( recaptchaWrapper, wpcf7iqfix.recaptcha_empty ); 81 } else if( null === response ) { 82 console.log( wpcf7iqfix.response_err ); 83 } 84 } ); 85} );
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.