(function ($){
const KitgenixCaptchaForCloudflareTurnstile={
widgets: [],
config: window.KitgenixCaptchaForCloudflareTurnstileConfig||{},
observer: null,
retryLimit: 20,
_lastToken: '',
getLastToken(){
return this._lastToken||'';
},
_timers: typeof WeakMap!=='undefined' ? new WeakMap():null,
_getTimers(el){
if(this._timers){
if(!this._timers.get(el)) this._timers.set(el, { idle: null, age: null, reveal: null });
return this._timers.get(el);
}
let bag=el.__kitgenixcaptchaforcloudflareturnstileTimers;
if(!bag){ bag={ idle: null, age: null, reveal: null }; el.__kitgenixcaptchaforcloudflareturnstileTimers=bag; }
return bag;
},
_clearTimers(el){
const t=this._getTimers(el);
if(t.idle){ clearTimeout(t.idle);  t.idle=null; }
if(t.age){ clearTimeout(t.age);   t.age=null; }
if(t.reveal){ clearTimeout(t.reveal);t.reveal=null; }},
_scheduleRevealIfNoToken(el){
try {
const t=this._getTimers(el);
if(t.reveal) clearTimeout(t.reveal);
const ms=parseInt(this.config.reveal_delay_ms||5000, 10);
if(!ms||ms < 1000) return;
t.reveal=setTimeout(()=> {
try {
const $form=$(el).closest('form');
const token=$form.find('input[name="cf-turnstile-response"]').val()||'';
if(token) return;
if(el.getAttribute('data-appearance')==='interaction-only'){
if(el.classList.contains('kitgenix-ts-collapsed')){
el.classList.remove('kitgenix-ts-collapsed');
}
if(this.config.disable_submit){
this.disableSubmit(el);
}
try { if(typeof turnstile!=='undefined') turnstile.reset(el); } catch (e){}
try { el.scrollIntoView({ behavior: 'smooth', block: 'center' });} catch (e){}}
} catch (e){  }}, ms);
} catch (e){  }},
_showInlineMsg(el, text, type){
if(!el) return;
const cfg=(this.config&&this.config.messages)||{};
if(cfg.suppress===true) return;
this._clearInlineMsg(el);
const msg=document.createElement('div');
msg.className='kitgenix-captcha-for-cloudflare-turnstile-ts-inline-msg kitgenix-captcha-for-cloudflare-turnstile-type-' + (type||'expired');
msg.setAttribute('role', 'alert');
msg.setAttribute('aria-live', 'polite');
const messages=(this.config&&this.config.messages)||{};
const fallback=messages.prompt||'Please complete the verification to continue.';
msg.textContent=text||fallback;
if(el.parentNode){
el.parentNode.insertBefore(msg, el.nextSibling);
}},
_clearInlineMsg(el){
if(!el||!el.parentNode) return;
const next=el.nextSibling;
if(next&&next.classList&&next.classList.contains('kitgenix-captcha-for-cloudflare-turnstile-ts-inline-msg')){
try { next.remove(); } catch (e){ if(window.console) console.warn(e); }}
},
_scheduleIdleReset(el){
const t=this._getTimers(el);
if(t.idle) clearTimeout(t.idle);
const ms=parseInt(this.config.freshness_ms||150000, 10);
if(!ms||ms < 30000) return;
t.idle=setTimeout(()=> {
const $form=$(el).closest('form');
const token=$form.find('input[name="cf-turnstile-response"]').val()||'';
if(!token){
this.resetWidget(el, 'expired');
}}, ms);
},
_scheduleTokenAgeReset(el){
const t=this._getTimers(el);
if(t.age) clearTimeout(t.age);
const ms=parseInt(this.config.freshness_ms||150000, 10);
if(!ms||ms < 30000) return;
t.age=setTimeout(()=> {
this.resetWidget(el, 'expired');
}, ms);
},
sizeMap: {
small: 'compact',
medium: 'normal',
large: 'normal',
standard: 'normal',
normal: 'normal',
flexible: 'flexible'
},
ensureHiddenInput: function (el){
try {
const $form=jQuery(el).closest('form');
if(!$form.length) return;
let $input=$form.find('input[name="cf-turnstile-response"]');
if(!$input.length){
$input=jQuery('<input type="hidden" name="cf-turnstile-response" />').appendTo($form);
}} catch (e){  }},
_dedupeElementorContainers(scope){
try {
const root=scope||document;
const forms=root.querySelectorAll('.elementor-popup-modal .elementor-form');
forms.forEach(function(form){
const list=form.querySelectorAll('.cf-turnstile');
if(list.length > 1){
for (let i=1; i < list.length; i++){
try { list[i].remove(); } catch (e){  }}
}});
} catch (e){  }},
renderWidgets: function (){
if(typeof turnstile==='undefined') return;
var found=$('.cf-turnstile').length;
if(this.config.debug&&window.console){
if(found){
console.log('[KitgenixTurnstile] Found ' + found + ' .cf-turnstile widgets on page');
}else{
console.log('[KitgenixTurnstile] No .cf-turnstile widgets found on page');
}}
$('.cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
try {
var modes=(this.config&&this.config.modes)||{};
var blocksShortcodeOnly=modes.woocommerce_blocks==='shortcode';
var ownerAttr=el.getAttribute('data-kitgenix-captcha-for-cloudflare-turnstile-owner')||'';
var isBlocksOwner=ownerAttr==='woocommerce-blocks'
|| el.classList.contains('kitgenix-captcha-for-cloudflare-turnstile-wc-blocks');
if(blocksShortcodeOnly&&isBlocksOwner){
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
return;
}} catch (e){  }
try {
var placement=el.getAttribute&&el.getAttribute('data-placement');
if(placement==='buddypress-post-update'){
var form=(el.closest&&el.closest('form'))||document.getElementById('whats-new-form')||document.querySelector('.activity-form')||document.querySelector('.bp-activity-form');
var moved=false;
if(form){
var submitBtn=form.querySelector('button[type=submit], input[type=submit], input[type=button]');
if(submitBtn&&submitBtn.parentNode){
submitBtn.parentNode.insertBefore(el, submitBtn);
moved=true;
}}
if(!moved){
var candidates=Array.prototype.slice.call(document.querySelectorAll('button, input[type=submit], input[type=button], a.button'));
for (var i=0; i < candidates.length; i++){
try {
var btn=candidates[i];
var txt=(btn.textContent||btn.value||'').trim();
if(!txt) continue;
if(/^\s*post update\s*$/i.test(txt)||/^\s*post\s+update\s*$/i.test(txt)||(/post update/i.test(txt))){
if(btn.parentNode){ btn.parentNode.insertBefore(el, btn); moved=true; break; }}
} catch (err){  }}
}
if(!moved){
var fallback=document.querySelector('.activity-form .activity-controls, .activity-form .activity-buttons, .bp-activity .activity-actions, #whats-new-form');
if(fallback){ try { fallback.appendChild(el); moved=true; } catch (e){}}
}}
} catch (e){  }
this.ensureHiddenInput(el);
try { el.classList.remove('kitgenix-ts-hide'); } catch (e){}
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
try { const t=this._getTimers(el); if(t.reveal){ clearTimeout(t.reveal); t.reveal=null; }} catch (e){}},
'expired-callback': ()=> {
this.resetWidget(el, 'expired');
},
'error-callback': ()=> {
this.resetWidget(el, 'error');
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(this.config.disable_submit) this.disableSubmit(el);
}},
'unsupported-callback': ()=> {
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(this.config.disable_submit) this.disableSubmit(el);
}},
'timeout-callback': ()=> {
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(this.config.disable_submit) this.disableSubmit(el);
}}
};
if(params.appearance==='interaction-only'){
el.classList.add('kitgenix-ts-collapsed');
}
const renderNow=()=> {
try { el.innerHTML=''; } catch (e){}
try {
turnstile.render(el, params);
} catch (err){
if(window.console&&window.console.error){
console.error('[KitgenixTurnstile] turnstile.render error', err);
}}
el.dataset.rendered='true';
try { el.setAttribute('data-rendered', 'true'); } catch (e){}
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
this._scheduleRevealIfNoToken(el);
}};
const owner=el.getAttribute('data-kitgenix-captcha-for-cloudflare-turnstile-owner')||'';
if(owner==='woocommerce-blocks'){
renderNow();
}else{
const renderWhenVisible=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisible, 120); return; }
renderNow();
};
renderWhenVisible();
}
if(this.config.disable_submit&&(params.appearance!=='interaction-only')){
this.disableSubmit(el);
}
this._scheduleIdleReset(el);
const bump=()=> this._scheduleIdleReset(el);
el.addEventListener('mousemove', bump);
el.addEventListener('keydown', bump);
el.addEventListener('touchstart', bump, { passive: true });
});
if(typeof wpcf7!=='undefined'){
document.querySelectorAll('.wpcf7 form').forEach(function(form){
form.addEventListener('wpcf7submit', function(){
form.querySelectorAll('button[type=submit], input[type=submit]').forEach(function(btn){
btn.disabled=false;
btn.classList.remove('kitgenix-captcha-for-cloudflare-turnstile-disabled');
});
});
});
}},
resetWidget(el, reason){
try {
if(typeof turnstile!=='undefined'&&el.dataset.rendered){
turnstile.reset(el);
}} catch (e){ if(window.console) console.error(e); }
this._clearTimers(el);
this.setResponseInput(el, '');
var isInteractionOnly=(el.getAttribute('data-appearance')==='interaction-only');
var uiVisible = !el.classList.contains('kitgenix-ts-collapsed');
if(this.config.disable_submit&&(!isInteractionOnly||(isInteractionOnly&&uiVisible))){
this.disableSubmit(el);
}
const messages=(this.config&&this.config.messages)||{};
const msg=reason==='error'
? (messages.error||'Verification failed. Please try again.')
: (messages.expired||this.config.replay_message||'Verification expired. Please verify to continue.');
this._showInlineMsg(el, msg, reason==='error' ? 'error':'expired');
this._scheduleIdleReset(el);
},
renderElementorWidgets: function (){
if(typeof turnstile==='undefined') return;
try { this._dedupeElementorContainers(document); } catch (e){}
$('.elementor-form .cf-turnstile, .elementor-popup-modal .cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
this.ensureHiddenInput(el);
try { el.classList.remove('kitgenix-ts-hide'); } catch (e){}
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
},
'expired-callback': ()=> { this.resetWidget(el, 'expired'); },
'error-callback': ()=> { this.resetWidget(el, 'error'); if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'unsupported-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'timeout-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
const renderWhenVisible=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisible, 120); return; }
try { el.innerHTML=''; } catch (e){}
turnstile.render(el, params);
el.dataset.rendered='true';
try { el.setAttribute('data-rendered', 'true'); } catch (e){}
if(this.config.disable_submit&&(params.appearance!=='interaction-only')) this.disableSubmit(el);
this._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}};
renderWhenVisible();
});
},
renderGravityFormsWidgets: function (){
if(typeof turnstile==='undefined') return;
$('.gform_wrapper .cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
},
'expired-callback': ()=> { this.resetWidget(el, 'expired'); },
'error-callback': ()=> { this.resetWidget(el, 'error'); if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'unsupported-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'timeout-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
const renderWhenVisibleF=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisibleF, 120); return; }
try { el.innerHTML=''; } catch (e){}
turnstile.render(el, params);
el.dataset.rendered='true';
if(this.config.disable_submit&&(params.appearance!=='interaction-only')) this.disableSubmit(el);
this._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}};
renderWhenVisibleF();
});
},
renderFormidableFormsWidgets: function (){
if(typeof turnstile==='undefined') return;
$('.frm_form_fields .cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
},
'expired-callback': ()=> { this.resetWidget(el, 'expired'); },
'error-callback': ()=> { this.resetWidget(el, 'error'); if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); }},
'unsupported-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); }},
'timeout-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); }}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
const renderWhenVisibleJ=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisibleJ, 120); return; }
try { el.innerHTML=''; } catch (e){}
turnstile.render(el, params);
el.dataset.rendered='true';
if(this.config.disable_submit&&(params.appearance!=='interaction-only')) this.disableSubmit(el);
this._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}};
renderWhenVisibleJ();
});
},
renderForminatorWidgets: function (){
if(typeof turnstile==='undefined') return;
$('.forminator-custom-form .cf-turnstile, .forminator-ui .cf-turnstile, form[id*="forminator_form"] .cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
this.ensureHiddenInput(el);
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
},
'expired-callback': ()=> { this.resetWidget(el, 'expired'); },
'error-callback': ()=> { this.resetWidget(el, 'error'); if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'unsupported-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'timeout-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
const renderWhenVisible=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisible, 120); return; }
try { el.innerHTML=''; } catch (e){}
try {
turnstile.render(el, params);
} catch (err){
if(window.console&&window.console.error){
console.error('[KitgenixTurnstile] Forminator render error', err);
}}
el.dataset.rendered='true';
try { el.setAttribute('data-rendered', 'true'); } catch (e){}
if(this.config.disable_submit&&(params.appearance!=='interaction-only')) this.disableSubmit(el);
this._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}};
renderWhenVisible();
});
},
renderJetpackFormsWidgets: function (){
if(typeof turnstile==='undefined') return;
$('.contact-form .cf-turnstile').each((_, el)=> {
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||this.config.theme||'auto',
size: this.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||this.config.appearance||'always',
callback: (token)=> {
this._clearInlineMsg(el);
this.setResponseInput(el, token);
this.enableSubmit(el);
this._scheduleTokenAgeReset(el);
},
'expired-callback': ()=> { this.resetWidget(el, 'expired'); },
'error-callback': ()=> { this.resetWidget(el, 'error'); if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'unsupported-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }},
'timeout-callback': ()=> { if(el.getAttribute('data-appearance')==='interaction-only'){ el.classList.remove('kitgenix-ts-collapsed'); if(this.config.disable_submit) this.disableSubmit(el); }}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
const renderWhenVisible=()=> {
const style=window.getComputedStyle(el);
const visible=style.display!=='none'&&style.visibility!=='hidden'&&el.offsetParent!==null;
if(!visible){ setTimeout(renderWhenVisible, 120); return; }
try { el.innerHTML=''; } catch (e){}
turnstile.render(el, params);
el.dataset.rendered='true';
if(this.config.disable_submit&&(params.appearance!=='interaction-only')) this.disableSubmit(el);
this._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
try {
const ro=new ResizeObserver(()=> {
if(el.classList.contains('kitgenix-ts-collapsed')&&el.offsetHeight > 0){
el.classList.remove('kitgenix-ts-collapsed');
ro.disconnect();
}});
ro.observe(el);
} catch (e){}
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}};
renderWhenVisible();
});
},
renderKadenceFormsWidgets: null,
init: function retry(attempt=0){
if(typeof turnstile==='undefined'){
if(attempt >=this.retryLimit){
if(window.console&&window.console.error){
console.error('Cloudflare Turnstile failed to load after ' + this.retryLimit + ' attempts.');
}
return;
}
$('.cf-turnstile').each(function (){
var $c=$(this);
var isInteractionOnly=($c.attr('data-appearance')==='interaction-only');
if(isInteractionOnly){ return; }
if(!$c.find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').length){
$c.html('<div class="kitgenix-captcha-for-cloudflare-turnstile-spinner" aria-label="Loading Turnstile..." role="status"></div>');
}});
return setTimeout(()=> {
try { KitgenixCaptchaForCloudflareTurnstile.init(attempt + 1); } catch (e){ if(window.console) console.error(e); }}, 300);
}
this.renderWidgets();
},
setResponseInput: function (el, token){
const $form=$(el).closest('form');
let $input=$form.find('input[name="cf-turnstile-response"]');
if(!$input.length){
$input=$('<input type="hidden" name="cf-turnstile-response" />').appendTo($form);
}
token=token||'';
$input.val(token);
if(token){
this._lastToken=token;
}},
disableSubmit: function (el){
const $form=$(el).closest('form');
$form.find('button[type=submit], input[type=submit]').prop('disabled', true).addClass('kitgenix-captcha-for-cloudflare-turnstile-disabled');
},
enableSubmit: function (el){
const $form=$(el).closest('form');
$form.find('button[type=submit], input[type=submit]').prop('disabled', false).removeClass('kitgenix-captcha-for-cloudflare-turnstile-disabled');
},
observeDOM: function (){
if(this.observer) return;
let debounceTimer=null;
this.observer=new MutationObserver((mutations)=> {
let needsInit=false;
mutations.forEach(function (mutation){
mutation.addedNodes&&$(mutation.addedNodes).find('.cf-turnstile').length&&(needsInit=true);
});
if(needsInit){
clearTimeout(debounceTimer);
debounceTimer=setTimeout(()=> {
try { KitgenixCaptchaForCloudflareTurnstile.init(); } catch (e){ if(window.console) console.error(e); }}, 100);
}});
this.observer.observe(document.body, { childList: true, subtree: true });
},
elementorIntegration: function (){
$(document).on('submit_success', '.elementor-form', function(e){
const $form=$(this);
setTimeout(function(){
$form.find('.cf-turnstile').each(function (){
try {
if(typeof turnstile!=='undefined'&&this.dataset.rendered){
turnstile.reset(this);
}} catch (err){}});
}, 100);
});
$(document).on('elementor-pro/forms/ajax:beforeSend', (e, jqXHR, data)=> {
let $form=$(e.target);
if(!$form.hasClass('elementor-form')){
$form=$form.closest('.elementor-form');
}
if(!$form.length){
$form=$(e.target).closest('form');
}
const token=$form.find('input[name="cf-turnstile-response"]').val()||'';
const nonce=$form.find('input[name="kitgenix_captcha_for_cloudflare_turnstile_nonce"]').val()||'';
if(!data.data){
data.data={};}
if(token){
data.data['cf-turnstile-response']=token;
}
if(nonce){
data.data['kitgenix_captcha_for_cloudflare_turnstile_nonce']=nonce;
}
if(data.form_data){
if(token){
data.form_data +='&cf-turnstile-response=' + encodeURIComponent(token);
}
if(nonce){
data.form_data +='&kitgenix_captcha_for_cloudflare_turnstile_nonce=' + encodeURIComponent(nonce);
}}
if(!token){
const $inter=$form.find('.cf-turnstile[data-appearance="interaction-only"]');
if($inter.length){
const el=$inter.get(0);
if(el.classList.contains('kitgenix-ts-collapsed')){
el.classList.remove('kitgenix-ts-collapsed');
}
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit){
KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}
try { if(typeof turnstile!=='undefined') turnstile.reset(el); } catch (err){}
try { if(jqXHR&&jqXHR.abort) jqXHR.abort(); } catch (err){}
return false;
}}
});
$(document).on('elementor-pro/forms/submit/error elementor-pro/forms/ajax:error', function (e){
const $form=$(e.target).closest('form');
$form.find('.cf-turnstile').each(function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'error');
});
});
$(document).on('elementor-pro/forms/new elementor/forms/new', function (){
setTimeout(()=> KitgenixCaptchaForCloudflareTurnstile.renderElementorWidgets(), 100);
});
$(window).on('elementor/popup/show', function (_e, id){
const reRenderInPopup=()=> {
try {
const popup=document.querySelector('.elementor-popup-modal[data-id="' + id + '"]')||document.querySelector('.elementor-popup-modal:last-of-type');
try { KitgenixCaptchaForCloudflareTurnstile._dedupeElementorContainers(popup||document); } catch (e){}
const list=popup ? popup.querySelectorAll('.cf-turnstile'):document.querySelectorAll('.elementor-popup-modal .cf-turnstile');
list.forEach(function (el){
const already = !!el.dataset.rendered;
const iframe=el.querySelector('iframe');
const visible=iframe&&iframe.offsetHeight > 0&&iframe.offsetWidth > 0;
if(el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1'){ try { delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering; } catch (e){}}
if(!already){
try { KitgenixCaptchaForCloudflareTurnstile.ensureHiddenInput(el); } catch (e){}}else if(!visible){
try { if(typeof turnstile!=='undefined') turnstile.reset(el); } catch (e){}
try { el.removeAttribute('data-rendered'); } catch (e){}
try { delete el.dataset.rendered; } catch (e){}}
});
KitgenixCaptchaForCloudflareTurnstile.renderElementorWidgets();
} catch (e){ if(window.console) console.error(e); }};
requestAnimationFrame(()=> setTimeout(reRenderInPopup, 60));
});
},
attachGlobalSubmitGuard: function (){
if(this._globalSubmitGuardAttached) return;
this._globalSubmitGuardAttached=true;
$(document).on('submit', 'form', function (e){
try {
const $form=$(this);
if(!$form.find('.cf-turnstile').length) return;
const token=$form.find('input[name="cf-turnstile-response"]').val()||'';
if(token) return;
const $inter=$form.find('.cf-turnstile[data-appearance="interaction-only"]');
if(!$inter.length) return;
const el=$inter.get(0);
if(el.classList.contains('kitgenix-ts-collapsed')){
el.classList.remove('kitgenix-ts-collapsed');
}
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit){
KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}
try { if(typeof turnstile!=='undefined') turnstile.reset(el); } catch (err){}
try { el.scrollIntoView({ behavior: 'smooth', block: 'center' });} catch (err){}
e.preventDefault();
return false;
} catch (err){  }});
},
fluentFormsIntegration: function (){
function renderFluentTurnstile(){
if(typeof turnstile==='undefined'){
return;
}
$('.fluentform-wrap .cf-turnstile, .fluentform .cf-turnstile').each(function (){
const el=this;
if(!el.dataset.rendered&&el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1'){
try { delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering; } catch (e){}}
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||KitgenixCaptchaForCloudflareTurnstile.config.theme||'auto',
size: KitgenixCaptchaForCloudflareTurnstile.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||KitgenixCaptchaForCloudflareTurnstile.config.appearance||'always',
callback: function (token){
KitgenixCaptchaForCloudflareTurnstile._clearInlineMsg(el);
KitgenixCaptchaForCloudflareTurnstile.setResponseInput(el, token);
KitgenixCaptchaForCloudflareTurnstile.enableSubmit(el);
KitgenixCaptchaForCloudflareTurnstile._scheduleTokenAgeReset(el);
},
'expired-callback': function (){ KitgenixCaptchaForCloudflareTurnstile.resetWidget(el, 'expired'); },
'error-callback': function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(el, 'error');
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}},
'unsupported-callback': function (){
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}},
'timeout-callback': function (){
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
try { el.innerHTML=''; } catch (e){}
try {
turnstile.render(el, params);
} catch (err){
try { delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering; } catch (e){}
if(window.console&&window.console.error){
console.error('[KitgenixTurnstile] Fluent Forms turnstile.render error', err);
}
return;
}
el.dataset.rendered='true';
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit&&(params.appearance!=='interaction-only')){
KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}
KitgenixCaptchaForCloudflareTurnstile._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
});
}
$(document).ready(renderFluentTurnstile);
$(document).on('fluentform_rendering_field_after fluentform_init_form fluentform_rendering_form_fields fluentform_after_form_render', function (){
setTimeout(renderFluentTurnstile, 100);
});
$(document).on('fluentform_submission_failed', function (e){
const $form=$(e.target).closest('form');
$form.find('.cf-turnstile').each(function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'error');
});
});
document.querySelectorAll('.fluentform-wrap').forEach(function (wrap){
new MutationObserver(()=> {
setTimeout(renderFluentTurnstile, 100);
}).observe(wrap, { childList: true, subtree: true });
});
}};
var kadenceEnabled=typeof Kadence_Blocks_Form!=='undefined'||(window.KitgenixCaptchaForCloudflareTurnstileConfig&&window.KitgenixCaptchaForCloudflareTurnstileConfig.enable_kadenceforms);
if(kadenceEnabled){
KitgenixCaptchaForCloudflareTurnstile.renderKadenceFormsWidgets=function (){
if(typeof turnstile==='undefined') return;
$('.kb-form .cf-turnstile').each(function (){
const el=this;
if(el.dataset.rendered||el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering==='1') return;
$(el).find('.kitgenix-captcha-for-cloudflare-turnstile-spinner').remove();
el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering='1';
const params={
sitekey: el.getAttribute('data-sitekey'),
theme: el.getAttribute('data-theme')||KitgenixCaptchaForCloudflareTurnstile.config.theme||'auto',
size: KitgenixCaptchaForCloudflareTurnstile.sizeMap[el.getAttribute('data-size')]||'normal',
appearance: el.getAttribute('data-appearance')||KitgenixCaptchaForCloudflareTurnstile.config.appearance||'always',
callback: function (token){
KitgenixCaptchaForCloudflareTurnstile._clearInlineMsg(el);
KitgenixCaptchaForCloudflareTurnstile.setResponseInput(el, token);
KitgenixCaptchaForCloudflareTurnstile.enableSubmit(el);
KitgenixCaptchaForCloudflareTurnstile._scheduleTokenAgeReset(el);
},
'expired-callback': function (){ KitgenixCaptchaForCloudflareTurnstile.resetWidget(el, 'expired'); },
'error-callback': function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(el, 'error');
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}},
'unsupported-callback': function (){
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}},
'timeout-callback': function (){
if(el.getAttribute('data-appearance')==='interaction-only'){
el.classList.remove('kitgenix-ts-collapsed');
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
}}
};
if(params.appearance==='interaction-only'){ el.classList.add('kitgenix-ts-collapsed'); }
try { el.innerHTML=''; } catch (e){}
turnstile.render(el, params);
el.dataset.rendered='true';
if(KitgenixCaptchaForCloudflareTurnstile.config.disable_submit&&(params.appearance!=='interaction-only')) KitgenixCaptchaForCloudflareTurnstile.disableSubmit(el);
KitgenixCaptchaForCloudflareTurnstile._scheduleIdleReset(el);
delete el.dataset.KitgenixCaptchaForCloudflareTurnstileRendering;
if(params.appearance==='interaction-only'){
KitgenixCaptchaForCloudflareTurnstile._scheduleRevealIfNoToken(el);
}});
};}
document.addEventListener('wpcf7invalid', handleCF7Error, true);
document.addEventListener('wpcf7spam', handleCF7Error, true);
document.addEventListener('wpcf7mailfailed', handleCF7Error, true);
function handleCF7Error(e){
const form=e.target&&e.target.closest ? e.target.closest('form'):null;
if(!form) return;
$(form).find('.cf-turnstile').each(function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'error');
});
}
$(document).on('wpformsAjaxSubmitError', function(e, details){
const $form=$(details&&details.form||e.target).closest('form');
$form.find('.cf-turnstile').each(function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'error');
});
});
$(document).on('gform_post_render', function (){
setTimeout(()=> {
try {
$('.gform_wrapper form').each(function(){
$(this).find('.cf-turnstile').each(function(){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'expired');
});
});
KitgenixCaptchaForCloudflareTurnstile.renderGravityFormsWidgets();
} catch (e){ if(window.console) console.error(e); }}, 100);
});
$(document).on('forminator:form:submit:error forminator:form:submit:failed', function(e){
const $form=$(e.target).closest('form');
$form.find('.cf-turnstile').each(function (){
KitgenixCaptchaForCloudflareTurnstile.resetWidget(this, 'error');
});
});
$(document).ready(function (){
KitgenixCaptchaForCloudflareTurnstile.init();
KitgenixCaptchaForCloudflareTurnstile.observeDOM();
KitgenixCaptchaForCloudflareTurnstile.elementorIntegration();
KitgenixCaptchaForCloudflareTurnstile.attachGlobalSubmitGuard();
KitgenixCaptchaForCloudflareTurnstile.fluentFormsIntegration();
KitgenixCaptchaForCloudflareTurnstile.renderGravityFormsWidgets();
KitgenixCaptchaForCloudflareTurnstile.renderFormidableFormsWidgets();
KitgenixCaptchaForCloudflareTurnstile.renderForminatorWidgets();
KitgenixCaptchaForCloudflareTurnstile.renderJetpackFormsWidgets();
if(KitgenixCaptchaForCloudflareTurnstile.renderKadenceFormsWidgets) KitgenixCaptchaForCloudflareTurnstile.renderKadenceFormsWidgets();
setTimeout(()=> {
try { KitgenixCaptchaForCloudflareTurnstile.renderForminatorWidgets(); } catch (e){ if(window.console) console.error(e); }}, 500);
['login', 'register', 'lostpassword', 'comment'].forEach(function (context){
const el=document.getElementById('cf-turnstile-' + context);
if(el&&typeof turnstile!=='undefined'){
try { KitgenixCaptchaForCloudflareTurnstile.renderWidgets(); } catch (e){ if(window.console) console.error(e); }}
});
setTimeout(()=> {
try { KitgenixCaptchaForCloudflareTurnstile.renderElementorWidgets(); } catch (e){ if(window.console) console.error(e); }}, 100);
});
$(document).ajaxSuccess(function (_e, _xhr, settings){
try {
var data=settings&&settings.data ? String(settings.data):'';
if(data.indexOf('action=elementor_pro_forms_send_form')!==-1){
jQuery('.elementor-form .cf-turnstile[data-appearance="interaction-only"]').each(function (){
this.classList.add('kitgenix-ts-collapsed');
});
}} catch (err){  }});
$(window).on('elementor/frontend/init', function (){
setTimeout(()=> { try { KitgenixCaptchaForCloudflareTurnstile.renderElementorWidgets(); } catch (e){ if(window.console) console.error(e); }}, 100);
});
try {
document.addEventListener('KitgenixCaptchaForCloudflareTurnstile:turnstile-containers-added', function (){
try { KitgenixCaptchaForCloudflareTurnstile.init(); } catch (e){ if(window.console) console.error(e); }});
document.addEventListener('kitgenixcaptchaforcloudflareturnstile:turnstile-containers-added', function (){
try { KitgenixCaptchaForCloudflareTurnstile.init(); } catch (e){ if(window.console) console.error(e); }});
} catch (e){}
$(document).on('gform_post_render', function (){
setTimeout(()=> { try { KitgenixCaptchaForCloudflareTurnstile.renderGravityFormsWidgets(); } catch (e){ if(window.console) console.error(e); }}, 100);
});
$(document).on('frmFormComplete frmAfterFormRendered', function (){
setTimeout(()=> { try { KitgenixCaptchaForCloudflareTurnstile.renderFormidableFormsWidgets(); } catch (e){ if(window.console) console.error(e); }}, 100);
});
$(document).on('forminator:form:rendered forminator:form:ajax:rendered', function(){
setTimeout(function(){
if(typeof KitgenixCaptchaForCloudflareTurnstile!=='undefined'&&KitgenixCaptchaForCloudflareTurnstile.renderForminatorWidgets){
KitgenixCaptchaForCloudflareTurnstile.renderForminatorWidgets();
}}, 100);
});
$(document).on('kb-form-rendered', function (){
if(KitgenixCaptchaForCloudflareTurnstile.renderKadenceFormsWidgets){
setTimeout(()=> { try { KitgenixCaptchaForCloudflareTurnstile.renderKadenceFormsWidgets(); } catch (e){ if(window.console) console.error(e); }}, 100);
}});
window.KitgenixCaptchaForCloudflareTurnstile=KitgenixCaptchaForCloudflareTurnstile;
})(jQuery);