1(function($){'use strict';function getOrCreateStorageValue(key,fallbackPrefix){try{var existing=window.localStorage.getItem(key);if(existing){return existing;} 2var value=fallbackPrefix+'-'+Math.random().toString(36).slice(2,12);window.localStorage.setItem(key,value);return value;}catch(e){return fallbackPrefix+'-'+Math.random().toString(36).slice(2,12);}} 3function currentVisitorId(){return getOrCreateStorageValue('klicktipp_visitor_id','visitor');} 4function currentSessionId(){return getOrCreateStorageValue('klicktipp_session_id','session');} 5function hashString(input){var value=String(input||'');var hash=0;for(var i=0;i<value.length;i++){hash=((hash<<5)-hash)+value.charCodeAt(i);hash|=0;} 6return String(Math.abs(hash));} 7function showMessage($container,message,type){$container.removeClass('kt-msg-success kt-msg-error').addClass(type==='success'?'kt-msg-success':'kt-msg-error').text(String(message||'')).stop(true,true).fadeIn(120);} 8function refreshStartedTimestamps(){$('.kt-optin-form input[name="kt_started"]').each(function(){$(this).val(String(Date.now()));});} 9function normalizeTemporalFieldValue(rawValue,inputType){var raw=String(rawValue||'').trim();var type=String(inputType||'').toLowerCase();if(!raw||(type!=='date'&&type!=='time'&&type!=='datetime-local')){return raw;} 10if(/^-?[0-9]{1,12}$/.test(raw)){return raw;} 11if(type==='datetime-local'){var dt=new Date(raw);if(!isNaN(dt.getTime())){return String(Math.floor(dt.getTime()/1000));} 12return raw;} 13if(type==='date'){var dateParts=raw.split('-');if(dateParts.length===3){var y=parseInt(dateParts[0],10);var m=parseInt(dateParts[1],10);var d=parseInt(dateParts[2],10);if(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){var dateObj=new Date(y,m-1,d,0,0,0,0);return String(Math.floor(dateObj.getTime()/1000));}} 14return raw;} 15var timeMatch=raw.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);if(timeMatch){var now=new Date();var hh=parseInt(timeMatch[1],10);var mm=parseInt(timeMatch[2],10);var ss=parseInt(timeMatch[3]||'0',10);if(!isNaN(hh)&&!isNaN(mm)&&!isNaN(ss)){var timeObj=new Date(now.getFullYear(),now.getMonth(),now.getDate(),hh,mm,ss,0);return String(Math.floor(timeObj.getTime()/1000));}} 16return raw;} 17function readFieldData($form){var payload={};$form.find('[name^="kt_field_"]').each(function(){var $input=$(this);var name=String($input.attr('name')||'');if(!name){return;} 18var key=name.replace(/^kt_field_/,'').replace(/\[\]$/,'');if(!key){return;} 19var payloadKey='field_'+key;if($input.is(':checkbox')){if(!$input.is(':checked')){return;} 20if(!Array.isArray(payload[payloadKey])){payload[payloadKey]=[];} 21payload[payloadKey].push(String($input.val()||'').trim());return;} 22var value=$input.val();var inputType=String($input.attr('type')||'').toLowerCase();if(Array.isArray(value)){payload[payloadKey]=value.map(function(item){return String(item||'').trim();}).filter(Boolean);}else{payload[payloadKey]=normalizeTemporalFieldValue(value,inputType);}});return payload;} 23function isEmail(value){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);} 24function validateFieldFormat($control,value){var tag=String($control.prop('tagName')||'').toLowerCase();var type='textarea'===tag?'textarea':String($control.attr('type')||'text').toLowerCase();var name=String($control.attr('name')||'');var isEmailField='kt_field_email'===name||'email'===type;if(isEmailField){return isEmail(value)?'':klicktippFrontend.messages.email;} 25if('url'===type){return/^https?:\/\/[^\s]+\.[^\s]+/i.test(value)?'':klicktippFrontend.messages.field_invalid_url;} 26if('text'===type&&'decimal'===String($control.attr('inputmode')||'').toLowerCase()){return/^[+-]?[\d.,\s]+$/.test(value)?'':klicktippFrontend.messages.field_invalid_decimal;} 27if('number'===type){var isWholeNumber=value.indexOf('.')===-1&&/^[+-]?[\d,]+$/.test(value);return isWholeNumber?'':klicktippFrontend.messages.field_invalid_number;} 28if('tel'===type){return/^[0-9+\-\s()]{6,}$/.test(value)?'':klicktippFrontend.messages.field_invalid_phone;} 29if('date'===type){return/^\d{4}-\d{2}-\d{2}$/.test(value)?'':klicktippFrontend.messages.field_invalid_date;} 30if('time'===type){return/^\d{2}:\d{2}(:\d{2}
30)?$/.test(value)?'':klicktippFrontend.messages.field_invalid_time;} 31if('datetime-local'===type){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(value)?'':klicktippFrontend.messages.field_invalid_datetime;} 32return'';} 33function clearFieldErrors($form){$form.find('.kt-field-group, .kt-gdpr-group').removeClass('kt-field-invalid');$form.find('.kt-field-error').remove();$form.find('[aria-invalid="true"]').removeAttr('aria-invalid');} 34function buildFieldValidationErrors($form,data){var errors=[];var $emailGroup=null;$form.find('.kt-field-group').each(function(){var $group=$(this);var $multiDropdown=$group.find('.kt-multi-dropdown').not('.kt-single-dropdown');if($multiDropdown.length){var isRequired='1'===String($multiDropdown.attr('data-required')||'');var checkedCount=$multiDropdown.find('.kt-multi-dropdown-option:checked').length;if(isRequired&&0===checkedCount){errors.push({$group:$group,$focusTarget:$multiDropdown.find('.kt-multi-dropdown-trigger').first(),message:klicktippFrontend.messages.field_required});} 35return;} 36var $singleInput=$group.find('.kt-single-dropdown-input');if($singleInput.length){var singleValue=$.trim(String($singleInput.val()||''));if($singleInput.prop('required')&&''===singleValue){errors.push({$group:$group,$focusTarget:$group.find('.kt-single-dropdown .kt-multi-dropdown-trigger').first(),message:klicktippFrontend.messages.field_required});} 37return;} 38var $control=$group.find('input.kt-input, textarea.kt-input').first();if(!$control.length){return;} 39if('email'===String($control.attr('type')||'').toLowerCase()||$control.is('[data-kt-email-field="1"]')){$emailGroup=$group;} 40var value=$.trim(String($control.val()||''));var isControlRequired=!!$control.prop('required');if(isControlRequired&&''===value){errors.push({$group:$group,$focusTarget:$control,message:klicktippFrontend.messages.field_required});return;} 41if(''===value){return;} 42var formatError=validateFieldFormat($control,value);if(formatError){errors.push({$group:$group,$focusTarget:$control,message:formatError});}});if(!$emailGroup){var $hiddenEmailField=$form.find('input[data-kt-email-field="1"]');var fallbackEmail=$hiddenEmailField.length?$.trim(String($hiddenEmailField.val()||'')):'';if(!isEmail(fallbackEmail)){errors.push({$group:null,$focusTarget:null,message:klicktippFrontend.messages.email});}} 43var $gdprInput=$form.find('input[name="kt_gdpr"]');if($gdprInput.length&&'1'!==String(data.gdpr)){var gdprErrorMessage=String($form.attr('data-gdpr-error-message')||'').trim();errors.push({$group:$form.find('.kt-gdpr-group'),$focusTarget:$gdprInput,message:gdprErrorMessage||klicktippFrontend.messages.field_required});} 44return errors;} 45function applyFieldErrors(errors){errors.forEach(function(error){if(error.$group&&error.$group.length){error.$group.addClass('kt-field-invalid');error.$group.append($('<div class="kt-field-error" role="alert"></div>').text(error.message));} 46if(error.$focusTarget&&error.$focusTarget.length){error.$focusTarget.attr('aria-invalid','true');}});} 47function trackFormViews(){var visitorId=currentVisitorId();var sessionId=currentSessionId();$('.kt-optin-form').each(function(){var $form=$(this);var formId=String($form.find('input[name="kt_form_id"]').val()||'').trim();if(!formId){return;} 48var viewKey='klicktipp_view_'+formId+'_'+hashString(visitorId+':'+sessionId);try{if(window.sessionStorage.getItem(viewKey)){return;} 49window.sessionStorage.setItem(viewKey,'1');}catch(e){} 50$.ajax({url:klicktippFrontend.ajax_url,method:'POST',timeout:3000,data:{action:'klicktipp_track_view',nonce:klicktippFrontend.nonce,form_id:formId,visitor_hash:hashString(visitorId),session_id:sessionId,is_test:isPreviewFrame()?'1':'0'}});});} 51function isPreviewFrame(){return document.body&&document.body.classList.contains('klicktipp-plugin-frontend-preview');} 52function hidePreviewNoise(){if(!isPreviewFrame()){return;} 53var selectors=['#query-monitor-main','#query-monitor-container','#qm-wrapper','#qm-panel-menu','#qm-overview','#qm-admin-bar-menu','[id^="qm-"]','[class*="query-monitor"]'];selectors.forEach(function(selector){document.querySelectorAll(selector).forEach(function(node){if(node&&node.parentNode){node.parentNode.removeChild(node);}});});} 54function sendPreviewHeight(){if(!isPreviewFrame()){return;} 55try{hidePreviewNoise();var shell=document.querySelector('.kt-optin-preview-shell');var form=document.querySelector('.kt-optin-wrap');var shellHeight=shell?Math.max(shell.scrollHeight||0,shell.offsetHeight||0):0;var formHeight=form?Math.max(form.scrollHeight||0,form.offsetHeight||0):0;var fallbackHeight=Math.max(document.body?(document.body.scrollHeight||0):0,document.documentElement?(document.documentElement.scrollHeight||0):0);window.parent.postMessage({type:'ktOptinPreviewHeight',height:Math.max(shellHeight,formHeight,fallbackHeight)},'*');}catch(e){}} 56function installPreviewHeightSync(){if(!isPreviewFrame()){return;} 57var queued=false;function queuePreviewHeightSync(){if(queued){return;} 58queued=true;window.requestAnimationFrame(function(){queued=false;sendPreviewHeight();});} 59if(typeof window.ResizeObserver==='function'){var resizeObserver=new ResizeObserver(function(){queuePreviewHeightSync();});if(document.body){resizeObserver.observe(document.body);} 60if(document.documentElement){resizeObserver.observe(document.documentElement);}} 61if(typeof window.MutationObserver==='function'&&document.body){var mutationObserver=new MutationObserver(function(){queuePreviewHeightSync();});mutationObserver.observe(document.body,{childList:true,subtree:true,attributes:true,characterData:true});} 62window.addEventListener('resize',queuePreviewHeightSync);window.addEventListener('orientationchange',queuePreviewHeightSync);window.addEventListener('load',function(){hidePreviewNoise();sendPreviewHeight();});setTimeout(sendPreviewHeight,50);setTimeout(sendPreviewHeight,250);} 63function updateMultiDropdownLabel($dropdown){if(!$dropdown||!$dropdown.length){return;} 64var selectedLabels=[];$dropdown.find('.kt-multi-dropdown-option:checked').each(function(){var $option=$(this);var labelText=String($option.closest('.kt-multi-dropdown-option-row').find('span').first().text()||'').trim();if(labelText){selectedLabels.push(labelText);}});var $value=$dropdown.find('.kt-multi-dropdown-value');var emptyLabel=String($value.attr('data-empty-label')||'Choose options').trim();$value.text(selectedLabels.length?selectedLabels.join(', '):emptyLabel);$value.attr('title',selectedLabels.length?selectedLabels.join(', '):'');} 65function syncSingleDropdownSelection($dropdown,value){if(!$dropdown||!$dropdown.length){return;} 66var selectedValue=String(value||'').trim();var $options=$dropdown.find('.kt-single-dropdown-option');var hasMatch=false;$options.each(function(){var $option=$(this);var optionValue=String($option.data('value')||'').trim();var isSelected=selectedValue!==''&&optionValue===selectedValue;$option.toggleClass('is-selected',isSelected);if(isSelected){hasMatch=true;}});var $input=$dropdown.find('.kt-single-dropdown-input');if($input.length){$input.val(hasMatch?selectedValue:'');} 67var $value=$dropdown.find('.kt-multi-dropdown-value');var emptyLabel=String($value.attr('data-empty-label')||'Please choose').trim();var labelText='';if(hasMatch){var $selected=$options.filter('.is-selected').first();labelText=String($selected.text()||'').trim();} 68$value.text(labelText||emptyLabel);$value.attr('title',labelText||'');} 69$(document).on('submit','.kt-optin-form',function(e){e.preventDefault();var $form=$(this);var $button=$form.find('.kt-submit-btn');var $buttonText=$button.find('.kt-btn-text');var $buttonLoading=$button.find('.kt-btn-loading');var $message=$form.find('.kt-optin-message');var hasRetried=false;if($button.prop('disabled')){return;} 70var unlockTimer=window.setTimeout(function(){$button.prop('disabled',false);$buttonLoading.hide();$buttonText.show();},10000);function proceedWithSubmit(captchaEuSolution){var data={action:'klicktipp_submit',nonce:klicktippFrontend.nonce,klicktipp_locale:(klicktippFrontend&&klicktippFrontend.locale)?String(klicktippFrontend.locale):'',form_id:$form.find('input[name="kt_form_id"]').val()||'',idempotency_key:$form.find('input[name="kt_idempotency_key"]').val()||'',tag_id:$form.find('input[name="kt_tag_id"]').val()||'',list_id:$form.find('input[name="kt_list_id"]').val()||'',gdpr:$form.find('input[name="kt_gdpr"]').is(':checked')?'1':'0',started:$form.find('input[name="kt_started"]').val()||'',hp:$form.find('input[name="kt_hp"]').val()||'',visitor_hash:hashString(currentVisitorId()),session_id:currentSessionId(),'g-recaptcha-response':$form.find('textarea[name="g-recaptcha-response"]').val()||'',captcha_eu_solution:captchaEuSolution||'',is_test:isPreviewFrame()?'1':'0'};$.extend(data,readFieldData($form));clearFieldErrors($form);var validationErrors=buildFieldValidationErrors($form,data);if(validationErrors.length){applyFieldErrors(validationErrors);showMessage($message,klicktippFrontend.messages.form_invalid||klicktippFrontend.messages.required,'error');
70var $firstFocusTarget=validationErrors[0].$focusTarget;if($firstFocusTarget&&$firstFocusTarget.length&&typeof $firstFocusTarget.focus==='function'){$firstFocusTarget.focus();} 71return;} 72$button.prop('disabled',true);$buttonText.hide();$buttonLoading.show();$message.hide();var submitTimeoutMs=parseInt((klicktippFrontend&&klicktippFrontend.submit_timeout_ms)?klicktippFrontend.submit_timeout_ms:9000,10);if(isNaN(submitTimeoutMs)||submitTimeoutMs<4000){submitTimeoutMs=9000;} 73function doSubmit(){return $.ajax({url:klicktippFrontend.ajax_url,method:'POST',timeout:submitTimeoutMs,data:data});} 74function handleSubmitDone(response){if(response&&response.success){if(response.data&&response.data.redirect_url){if(isPreviewFrame()){window.parent.open(response.data.redirect_url,'_blank');}else{window.location.href=response.data.redirect_url;} 75return;} 76showMessage($message,response.data.message,'success');if(response.data&&response.data.email_warning){$message.append($('<div class="kt-optin-warning">').text(String(response.data.email_warning||'')));} 77if($form.length){$form.find('.kt-multi-dropdown').each(function(){updateMultiDropdownLabel($(this));});} 78return;} 79var code=(response&&response.data&&response.data.code)?response.data.code:'';if(code==='security'&&!hasRetried){hasRetried=true;$.ajax({url:klicktippFrontend.ajax_url,method:'POST',timeout:5000,data:{action:'klicktipp_refresh_nonce'}}).done(function(refreshResponse){if(refreshResponse&&refreshResponse.success&&refreshResponse.data&&refreshResponse.data.nonce){klicktippFrontend.nonce=refreshResponse.data.nonce;data.nonce=refreshResponse.data.nonce;doSubmit().done(handleSubmitDone).fail(handleSubmitFail).always(handleSubmitAlways);}else{handleSubmitAlways();showMessage($message,(klicktippFrontend.messages&&klicktippFrontend.messages.security_cached)?klicktippFrontend.messages.security_cached:klicktippFrontend.messages.error,'error');}}).fail(function(){handleSubmitAlways();showMessage($message,(klicktippFrontend.messages&&klicktippFrontend.messages.security_cached)?klicktippFrontend.messages.security_cached:klicktippFrontend.messages.error,'error');});return;} 80var fallback=(response&&response.data&&response.data.message)?response.data.message:klicktippFrontend.messages.error;if(code==='security'){fallback=(klicktippFrontend.messages&&klicktippFrontend.messages.security_cached)?klicktippFrontend.messages.security_cached:fallback;} 81showMessage($message,fallback,'error');} 82function handleSubmitFail(error){if(error&&String(error.statusText||'').toLowerCase()==='timeout'){showMessage($message,(klicktippFrontend.messages&&klicktippFrontend.messages.timeout)?klicktippFrontend.messages.timeout:klicktippFrontend.messages.error,'error');return;} 83if(error&&error.responseJSON&&error.responseJSON.data&&error.responseJSON.data.message){showMessage($message,error.responseJSON.data.message,'error');return;} 84showMessage($message,klicktippFrontend.messages.error,'error');} 85function handleSubmitAlways(){window.clearTimeout(unlockTimer);$button.prop('disabled',false);$buttonLoading.hide();$buttonText.show();} 86doSubmit().done(handleSubmitDone).fail(handleSubmitFail).always(handleSubmitAlways);} 87var $captchaGroup=$form.find('.kt-captcha-group');var captchaProvider=$captchaGroup.length?String($captchaGroup.attr('data-captcha-provider')||''):'';if(captchaProvider==='captcha_eu'&&window.KROT&&typeof window.KROT.getSolution==='function'){window.KROT.getSolution().then(function(solution){proceedWithSubmit(solution?JSON.stringify(solution):'');},function(){proceedWithSubmit('');});}else{proceedWithSubmit('');}});function clearGroupError($el){var $group=$el.closest('.kt-field-group, .kt-gdpr-group');if($group.length){$group.removeClass('kt-field-invalid');$group.find('.kt-field-error').remove();} 88$el.removeAttr('aria-invalid');} 89$(document).on('input change','.kt-optin-form input.kt-input, .kt-optin-form textarea.kt-input, .kt-optin-form input[name="kt_gdpr"]',function(){clearGroupError($(this));});$(document).on('change','.kt-multi-dropdown-option',function(){var $dropdown=$(this).closest('.kt-multi-dropdown');updateMultiDropdownLabel($dropdown);clearGroupError($dropdown);});$(document).on('click','.kt-single-dropdown-option',function(e){e.preventDefault();var $option=$(this);var $dropdown=$option.closest('.kt-single-dropdown');if(!$dropdown.length){return;} 90var value=String($option.data('value')||'').trim();syncSingleDropdownSelection($dropdown,value);clearGroupError($dropdown);$dropdown.removeAttr('open');});$(document).on('click','.kt-multi-dropdown-trigger',function(e){e.preventDefault();var $dropdown=$(this).closest('.kt-multi-dropdown');if(!$dropdown.length){return;} 91var shouldOpen=!$dropdown.prop('open');$('.kt-multi-dropdown[open]').not($dropdown).removeAttr('open');if(shouldOpen){$dropdown.attr('open','open');}else{$dropdown.removeAttr('open');}});$(document).on('click',function(e){var $target=$(e.target);if($target.closest('.kt-multi-dropdown').length){return;} 92$('.kt-multi-dropdown[open]').removeAttr('open');});$(document).on('keydown',function(e){if(e.key==='Escape'||e.keyCode===27){$('.kt-multi-dropdown[open]').removeAttr('open');}});$(function(){refreshStartedTimestamps();$('.kt-multi-dropdown').each(function(){updateMultiDropdownLabel($(this));});$('.kt-single-dropdown').each(function(){var $dropdown=$(this);var initialValue=String($dropdown.find('.kt-single-dropdown-input').val()||'').trim();syncSingleDropdownSelection($dropdown,initialValue);});trackFormViews();installPreviewHeightSync();});})(jQuery);
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.