{"version":3,"file":"sliding-form.js","sources":["../../../javascript/schnellestelle/sliding-form.js"],"sourcesContent":["document.querySelectorAll('.slider-form').forEach(form => {\n form.querySelectorAll('.slider').forEach(slider => {\n let currentSlide = 0;\n let progressBar\n const slides = slider.querySelectorAll('.slide');\n if (slider.dataset.progressBar) {\n progressBar = document.querySelector(slider.dataset.progressBar);\n }\n\n function showSlide(index) {\n const offset = -index * 100 + '%';\n slider.style.transform = 'translateY(' + offset + ')';\n if (progressBar !== undefined) {\n updateProgressBar(index);\n }\n }\n\n function nextSlide() {\n formData = new FormData(form)\n inputs = Array.from(slides[currentSlide].querySelectorAll(\"input[required]\"))\n\n const validationBox = (field) => field.closest(\".validation\") || field.parentElement\n\n // reset highlighting invalid form elements\n inputs.forEach(field => validationBox(field).classList.remove(\"invalid\"))\n\n invalid_fields = inputs.filter(input => formData.getAll(input.name).filter(f => f).length == 0)\n if (invalid_fields.length === 0) {\n if (currentSlide < slides.length - 1) {\n currentSlide++;\n showSlide(currentSlide);\n }\n }\n invalid_fields.forEach(field => validationBox(field).classList.add(\"invalid\"))\n }\n\n function prevSlide() {\n if (currentSlide > 0) {\n currentSlide--;\n showSlide(currentSlide);\n }\n }\n\n slider.querySelectorAll(\"input\").forEach(input => {\n input.onkeydown = (event) => {\n if (event.target.value) {\n event.target.parentElement.classList.remove(\"invalid\")\n }\n if (event.which == 13) {\n event.target.closest(\"slide\")?.nextElementSibling()?.querySelector(\"input\")?.focus()\n event.preventDefault()\n nextSlide()\n }\n }\n })\n\n function updateProgressBar(index) {\n const progress = ((index + 1) / slides.length) * 100;\n progressBar.style.width = progress + '%';\n }\n\n slider.querySelectorAll('[data-clone-previous]').forEach(button => {\n button.onclick = () => {\n const template = button.previousElementSibling\n const id = template.querySelector(\"input\").id + button.parentElement.children.length\n const label = template.dataset.templateLabel || template.querySelector(\"label\").innerHTML\n const clone = document.createElement('div')\n clone.className = template.dataset.templateClass\n clone.innerHTML = ``\n button.parentElement.appendChild(clone)\n button.parentElement.scrollTo({ top: button.parentElement.scrollTop + 65, behavior: \"smooth\" })\n }\n })\n\n slider.querySelectorAll('[data-update]').forEach(trigger => {\n const selector = trigger.dataset.update\n trigger.onkeyup = () => {\n slider.querySelectorAll(selector).forEach(el => el.textContent = trigger.value)\n }\n })\n\n slider.querySelectorAll('a.prev').forEach(prev => {\n prev.onclick = prevSlide\n })\n\n slider.querySelectorAll('a.next').forEach(next => {\n next.onclick = nextSlide\n })\n })\n})\n"],"names":["document","querySelectorAll","forEach","form","slider","let","currentSlide","progressBar","slides","showSlide","index","style","transform","undefined","progress","length","width","nextSlide","formData","FormData","inputs","Array","from","validationBox","field","closest","parentElement","classList","remove","invalid_fields","filter","input","getAll","name","f","add","prevSlide","dataset","querySelector","onkeydown","event","target","value","which","nextElementSibling","focus","preventDefault","button","onclick","template","previousElementSibling","id","children","label","templateLabel","innerHTML","clone","createElement","className","templateClass","templateInputClass","templateInputName","appendChild","scrollTo","top","scrollTop","behavior","trigger","selector","update","onkeyup","el","textContent","prev","next"],"mappings":"AAAAA,SAASC,iBAAiB,cAAc,EAAEC,QAAQC,IAChDA,EAAKF,iBAAiB,SAAS,EAAEC,QAAQE,IACvCC,IAAIC,EAAe,EACfC,EACEC,EAASJ,EAAOH,iBAAiB,QAAQ,EAK/C,SAASQ,EAAUC,GAEjBN,EAAOO,MAAMC,UAAY,eADD,IAAT,CAACF,EAAc,KACoB,IAC9BG,KAAAA,IAAhBN,IA6CEO,IADmBJ,EA3CLA,GA4CO,GAAKF,EAAOO,OAAU,IACjDR,EAAYI,MAAMK,MAAQF,EAAW,IA3CtC,CAED,SAASG,IACPC,SAAW,IAAIC,SAAShB,CAAI,EAC5BiB,OAASC,MAAMC,KAAKd,EAAOF,GAAcL,iBAAiB,iBAAiB,CAAC,EAE5E,IAAMsB,EAAgB,GAAWC,EAAMC,QAAQ,aAAa,GAAKD,EAAME,cAGvEN,OAAOlB,QAAQsB,GAASD,EAAcC,CAAK,EAAEG,UAAUC,OAAO,SAAS,CAAC,EAG1C,KAD9BC,eAAiBT,OAAOU,OAAOC,GAA8D,GAArDb,SAASc,OAAOD,EAAME,IAAI,EAAEH,OAAOI,GAAKA,CAAC,EAAEnB,MAAW,GAC3EA,QACbT,EAAeE,EAAOO,OAAS,GAEjCN,EADAH,EAAAA,CACsB,EAG1BuB,eAAe3B,QAAQsB,GAASD,EAAcC,CAAK,EAAEG,UAAUQ,IAAI,SAAS,CAAC,CAC9E,CAED,SAASC,IACY,EAAf9B,GAEFG,EADAH,EAAAA,CACsB,CAEzB,CApCGF,EAAOiC,QAAQ9B,cACjBA,EAAcP,SAASsC,cAAclC,EAAOiC,QAAQ9B,WAAW,GAqCjEH,EAAOH,iBAAiB,OAAO,EAAEC,QAAQ6B,IACvCA,EAAMQ,UAAY,IACZC,EAAMC,OAAOC,OACfF,EAAMC,OAAOf,cAAcC,UAAUC,OAAO,SAAS,EAEpC,IAAfY,EAAMG,QACRH,EAAMC,OAAOhB,QAAQ,OAAO,GAAGmB,mBAAkB,GAAIN,cAAc,OAAO,GAAGO,MAAO,EACpFL,EAAMM,eAAgB,EACtB7B,EAAW,EAEd,CACP,CAAK,EAODb,EAAOH,iBAAiB,uBAAuB,EAAEC,QAAQ6C,IACvDA,EAAOC,QAAU,KACf,IAAMC,EAAWF,EAAOG,uBAClBC,EAAKF,EAASX,cAAc,OAAO,EAAEa,GAAKJ,EAAOrB,cAAc0B,SAASrC,OACxEsC,EAAQJ,EAASZ,QAAQiB,eAAiBL,EAASX,cAAc,OAAO,EAAEiB,UAC1EC,EAAQxD,SAASyD,cAAc,KAAK,EAC1CD,EAAME,UAAYT,EAASZ,QAAQsB,cACnCH,EAAMD,sCAAwCN,EAASZ,QAAQuB,2BAA2BX,EAASZ,QAAQwB,yBAAyBV,kBAAmBA,MAAOE,YAC9JN,EAAOrB,cAAcoC,YAAYN,CAAK,EACtCT,EAAOrB,cAAcqC,SAAS,CAAEC,IAAKjB,EAAOrB,cAAcuC,UAAY,GAAIC,SAAU,QAAQ,CAAE,CAC/F,CACP,CAAK,EAED9D,EAAOH,iBAAiB,eAAe,EAAEC,QAAQiE,IAC/C,IAAMC,EAAWD,EAAQ9B,QAAQgC,OACjCF,EAAQG,QAAU,KAChBlE,EAAOH,iBAAiBmE,CAAQ,EAAElE,QAAQqE,GAAMA,EAAGC,YAAcL,EAAQzB,KAAK,CAC/E,CACP,CAAK,EAEDtC,EAAOH,iBAAiB,QAAQ,EAAEC,QAAQuE,IACxCA,EAAKzB,QAAUZ,CACrB,CAAK,EAEDhC,EAAOH,iBAAiB,QAAQ,EAAEC,QAAQwE,IACxCA,EAAK1B,QAAU/B,CACrB,CAAK,CACL,CAAG,CACH,CAAC"}