/* WP Multi Formular – Frontend JS v2.0 */ (function($){ 'use strict'; $(document).ready(function(){ $('.wmf-form').each(function(){ WMF_Form.init($(this)); }); }); var WMF_Form = { init: function($form){ this.initConditional($form); this.initMultiStep($form); this.initRating($form); this.initSignature($form); this.initRange($form); this.initCharCount($form); this.initLiveValidation($form); this.initSubmit($form); }, /* BEDINGTE LOGIK */ initConditional: function($form){ var self = this; var $fields = $form.find('[data-condition="1"]'); if(!$fields.length) return; function evalAll(){ $fields.each(function(){ var $field = $(this); var action = $field.data('condition-action') || 'show'; var match = $field.data('condition-match') || 'all'; var rules = $field.data('condition-rules'); if(typeof rules === 'string'){ try{ rules=JSON.parse(rules); }catch(e){ rules=[]; } } if(!rules||!rules.length) return; var results = $.map(rules, function(rule){ if(!rule.field) return true; var $t = $form.find('[name="wmf_fields['+rule.field+']"],[name="wmf_fields['+rule.field+'][]"]'); var val = ''; if($t.is('[type=checkbox]')){ var c=[]; $t.filter(':checked').each(function(){ c.push($(this).val()); }); val=c; } else if($t.is('[type=radio]')){ val=$t.filter(':checked').val()||''; } else { val=$t.val()||''; } switch(rule.operator){ case '=': return Array.isArray(val)?val.indexOf(rule.value)!==-1:val===rule.value; case '!=': return Array.isArray(val)?val.indexOf(rule.value)===-1:val!==rule.value; case 'contains': return (Array.isArray(val)?val.join(','):val).indexOf(rule.value)!==-1; case 'not_empty':return Array.isArray(val)?val.length>0:val.trim()!==''; default: return true; } }); var passed = (match==='all') ? results.every(Boolean) : results.some(Boolean); var $wrap = $field.closest('.wmf-field-wrap'); var hide = (action==='show') ? !passed : passed; $wrap.toggleClass('wmf-cond-hidden', hide); $wrap.find('input,select,textarea').prop('disabled', hide); }); } $form.on('change input','input,select,textarea', evalAll); evalAll(); }, /* MULTI STEP */ initMultiStep: function($form){ var ms = $form.data('multi-step'); if(ms!==1&&ms!=='1') return; var self = this; var $steps = $form.find('.wmf-step'); var total = $steps.length; var current = 0; var $prog = $form.closest('.wmf-form-wrap').find('.wmf-progress-bar'); function show(idx){ $steps.hide().eq(idx).show(); current = idx; $prog.find('.wmf-step-indicator').each(function(i){ $(this).toggleClass('active',i===idx).toggleClass('done',i=max); }); }); } }; /* VALIDIERUNG */ var WMF_Validate = { field: function($i,$w){ var req=$i.prop('required'), type=$i.attr('type')||$i.prop('tagName').toLowerCase(), val=$i.val(); var i18n=(typeof WMF_Frontend!=='undefined'&&WMF_Frontend.i18n)||{}; if(type==='checkbox'){ var $boxes=$w.find('input[type=checkbox]'); if($boxes.first().prop('required')&&!$boxes.filter(':checked').length) return i18n.required||'Pflichtfeld.'; return true; } if(type==='radio'){ var $radios=$w.find('input[type=radio]'); if($radios.first().prop('required')&&!$radios.filter(':checked').length) return i18n.required||'Pflichtfeld.'; return true; } if($i.is('select[multiple]')){ if(req&&(!val||!val.length)) return i18n.required||'Pflichtfeld.'; return true; } if(req&&(!val||val.trim()==='')) return i18n.required||'Pflichtfeld.'; if(!val||val.trim()==='') return true; if(type==='email'&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)) return i18n.email||'Ungültige E-Mail.'; if(type==='url'){ try{ new URL(val); }catch(e){ return i18n.url||'Ungültige URL.'; } } return true; } }; /* SHORTCODE KOPIEREN */ $(document).on('click','.wmf-sc-copy',function(){ var t=$(this).text().trim(); if(navigator.clipboard) navigator.clipboard.writeText(t).then(function(){ WMF_Form.toast && WMF_Form.toast('Shortcode kopiert!'); }); }); WMF_Form.toast = function(msg){ var $t=$('
'+msg+'
').appendTo('body'); setTimeout(function(){$t.addClass('show');},10); setTimeout(function(){$t.removeClass('show');setTimeout(function(){$t.remove();},400);},2500); }; })(jQuery);