function cfturnstile_init_elementor_forms(){
var settings=window.cfturnstileElementorSettings||{};
var sitekey=settings.sitekey||'';
var position=settings.position||'before';
var mode=settings.mode||'turnstile';
var recaptchaSiteKey=settings.recaptchaSiteKey||'';
var disableSubmit=settings.disableSubmit||false;
if(!window._cft_elementor_idx){ window._cft_elementor_idx=0; }
var elementorForms=document.querySelectorAll('.elementor-form:not(.cft-processed)');
elementorForms.forEach(function(form){
var index=window._cft_elementor_idx++;
if(form.querySelector('.cf-turnstile')||form.querySelector('.g-recaptcha')||form.querySelector('input[name="cfturnstile_failsafe"]')){
form.classList.add('cft-processed');
return;
}
var submitButton=form.querySelector('button[type="submit"]');
if(submitButton&&(mode==='allow'||mode==='recaptcha')){
var marker=document.createElement('input');
marker.type='hidden';
marker.name='cfturnstile_failsafe';
marker.value=mode;
form.appendChild(marker);
if(mode==='recaptcha'&&recaptchaSiteKey){
var recaptchaDiv=document.createElement('div');
recaptchaDiv.className='g-recaptcha';
recaptchaDiv.setAttribute('data-sitekey', recaptchaSiteKey);
recaptchaDiv.style.cssText='display: block; margin: 10px 0 15px 0; width: 100%;';
if(position==='after'){
submitButton.parentNode.insertBefore(recaptchaDiv, submitButton.nextSibling);
}else if(position==='afterform'){
form.appendChild(recaptchaDiv);
}else{
submitButton.parentNode.insertBefore(recaptchaDiv, submitButton);
}}
form.classList.add('cft-processed');
return;
}
if(submitButton&&window.turnstile&&sitekey){
if(disableSubmit){
submitButton.style.pointerEvents='none';
submitButton.style.opacity='0.5';
}
var turnstileDiv=document.createElement('div');
turnstileDiv.className='elementor-turnstile-field cf-turnstile';
turnstileDiv.id='cf-turnstile-elementor-fallback-' + index;
turnstileDiv.style.cssText='display: block; margin: 10px 0 15px 0; width: 100%;';
if(position==='after'){
submitButton.parentNode.insertBefore(turnstileDiv, submitButton.nextSibling);
}else if(position==='afterform'){
form.appendChild(turnstileDiv);
}else{
submitButton.parentNode.insertBefore(turnstileDiv, submitButton);
}
turnstile.render('#cf-turnstile-elementor-fallback-' + index, {
sitekey: sitekey,
theme: settings.theme||'auto',
callback: function(token){
if(disableSubmit&&submitButton){
submitButton.style.pointerEvents='auto';
submitButton.style.opacity='1';
}
if(typeof turnstileElementorCallback==='function'){
turnstileElementorCallback(token);
}}
});
form.classList.add('cft-processed');
}});
}
document.addEventListener('DOMContentLoaded', function(){
cfturnstile_init_elementor_forms();
});
jQuery(window).on('elementor/frontend/init', function(){
cfturnstile_init_elementor_forms();
if(window.elementorFrontend&&elementorFrontend.hooks){
elementorFrontend.hooks.addAction('frontend/element_ready/form.default', function($scope){
cfturnstile_init_elementor_forms();
});
elementorFrontend.hooks.addAction('frontend/element_ready/login.default', function($scope){
cfturnstile_init_elementor_forms();
});
}});
document.addEventListener('click', function(event){
var submitBtn=event.target.closest('.elementor-form button[type="submit"]');
if(submitBtn){
var settings=window.cfturnstileElementorSettings||{};
var mode=settings.mode||'turnstile';
if(mode!=='turnstile'||!window.turnstile){
return;
}
var submittedForm=submitBtn.closest('.elementor-form');
setTimeout(function(){
if(!window.turnstile||!submittedForm){
return;
}
var widget=submittedForm.querySelector('.cf-turnstile');
if(widget){
turnstile.remove(widget);
turnstile.render(widget, {
sitekey: cfturnstileElementorSettings.sitekey,
callback: 'turnstileCallback',
theme: cfturnstileElementorSettings.theme||'auto'
});
}}, 2000);
}});
jQuery(document).on('elementor/popup/show', function(event, id, instance){
setTimeout(function(){
cfturnstile_init_elementor_forms();
var settings=window.cfturnstileElementorSettings||{};
var mode=settings.mode||'turnstile';
var disableSubmit=settings.disableSubmit||false;
if(mode!=='turnstile'||!window.turnstile){
return;
}
var popupTurnstiles=document.querySelectorAll('.elementor-popup-modal .cf-turnstile');
popupTurnstiles.forEach(function(widget){
var failedText=widget.parentNode ? widget.parentNode.querySelector('.cf-turnstile-failed-text'):null;
if(failedText){
failedText.style.display='none';
}
var form=widget.closest('.elementor-form');
var submitButton=form ? form.querySelector('button[type="submit"]'):null;
if(disableSubmit&&submitButton){
submitButton.style.pointerEvents='none';
submitButton.style.opacity='0.5';
}
turnstile.remove(widget);
turnstile.render(widget, {
sitekey: cfturnstileElementorSettings.sitekey,
callback: function(token){
if(disableSubmit&&submitButton){
submitButton.style.pointerEvents='auto';
submitButton.style.opacity='1';
}
if(typeof turnstileElementorCallback==='function'){
turnstileElementorCallback(token);
}},
theme: cfturnstileElementorSettings.theme||'auto'
});
});
}, 500);
});