89 lines
2.0 KiB
JavaScript
89 lines
2.0 KiB
JavaScript
( function( window, document, undefined ) {
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* Initialize recaptcha.
|
|
*
|
|
* @return {void}
|
|
*/
|
|
function initRecaptcha() {
|
|
wpcf7_recaptcha = {
|
|
...( wpcf7_recaptcha ?? {} )
|
|
};
|
|
|
|
const siteKey = wpcf7_recaptcha.sitekey;
|
|
const { homepage, contactform } = wpcf7_recaptcha.actions;
|
|
|
|
const execute = options => {
|
|
const { action, func, params } = options;
|
|
|
|
grecaptcha.execute( siteKey, {
|
|
action,
|
|
} ).then( token => {
|
|
const event = new CustomEvent( 'wpcf7grecaptchaexecuted', {
|
|
detail: {
|
|
action,
|
|
token
|
|
}
|
|
} );
|
|
|
|
document.dispatchEvent( event );
|
|
} ).then( () => {
|
|
if ( typeof func === 'function' ) {
|
|
func( ...params );
|
|
}
|
|
} ).catch( error => console.error( error ) );
|
|
};
|
|
|
|
grecaptcha.ready( () => {
|
|
execute( {
|
|
action: homepage
|
|
} );
|
|
} );
|
|
|
|
document.addEventListener( 'change', event => {
|
|
execute( {
|
|
action: contactform
|
|
} );
|
|
} );
|
|
|
|
if ( typeof wpcf7 !== 'undefined' && typeof wpcf7.submit === 'function' ) {
|
|
const submit = wpcf7.submit;
|
|
|
|
wpcf7.submit = ( form, options = {} ) => {
|
|
execute( {
|
|
action: contactform,
|
|
func: submit,
|
|
params: [ form, options ]
|
|
} );
|
|
};
|
|
}
|
|
|
|
document.addEventListener( 'wpcf7grecaptchaexecuted', event => {
|
|
const fields = document.querySelectorAll( 'form.wpcf7-form input[name="_wpcf7_recaptcha_response"]' );
|
|
|
|
for ( let i = 0; i < fields.length; i++ ) {
|
|
let field = fields[ i ];
|
|
|
|
field.setAttribute( 'value', event.detail.token );
|
|
}
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* Handle cookies-unblocked event.
|
|
*
|
|
* @return {void}
|
|
*/
|
|
document.addEventListener( 'cookies-unblocked.hu', function( e ) {
|
|
e.detail.data.scripts.forEach( function( script ) {
|
|
// find google recaptcha in valid category
|
|
if ( script.id === 'google-recaptcha-js' && e.detail.categories[script.dataset.huCategory] === true ) {
|
|
script.onload = initRecaptcha;
|
|
script.onreadystatechange = initRecaptcha;
|
|
}
|
|
} );
|
|
}, false );
|
|
|
|
} )( window, document ); |