diff --git a/public/auftrag-widerruf.js b/public/auftrag-widerruf.js new file mode 100644 index 0000000..082c1ab --- /dev/null +++ b/public/auftrag-widerruf.js @@ -0,0 +1,56 @@ +/* Widerrufsseite: Vertragsart „Projektauftrag“ mit freiwilliger Nummer der Auftragsbestätigung (Feld abNummer). + Rechtsfunktion: dieses Modul darf die anderen Vertragsarten nie stören. Fällt es aus, funktioniert der Widerruf wie bisher. + Das Feld ist nur bei „Projektauftrag“ sichtbar; eine eingegebene, aber unpassende Nummer wird gemeldet und stoppt das Absenden, + ein leeres Feld lässt den Widerruf durch (der Widerruf bleibt formfrei). Die Meldung steht in auftrag-ansicht.js. */ +import { abNummerNormalisiert, texte } from './auftrag-ansicht.js' + +export function initProjektWiderruf(form) { + const wrap = form?.querySelector('#ab-nummer-wrap') + const feld = form?.querySelector('#abNummer') + const fehler = form?.querySelector('#form-error') + if (!form || !wrap || !feld || !fehler) return + const gewaehlt = () => form.querySelector('[name="order"]:checked')?.value + let eigeneMeldung = false + + const meldungWeg = () => { + if (!eigeneMeldung) return + eigeneMeldung = false + fehler.textContent = '' + fehler.classList.add('hidden') + } + const zeige = () => { + const projekt = gewaehlt() === 'projekt' + wrap.classList.toggle('hidden', !projekt) + if (!projekt) { + feld.value = '' + meldungWeg() + } + } + + form.addEventListener('change', zeige) + form.addEventListener('click', (ev) => { + if (!ev.target?.closest?.('button[type="submit"], input[type="submit"]') || gewaehlt() !== 'projekt') return + const eingabe = feld.value.trim() + if (!eingabe) { + feld.value = '' + meldungWeg() + return + } + const nummer = abNummerNormalisiert(eingabe) + if (!nummer) { + ev.preventDefault() + fehler.textContent = texte().abNummerUngueltig + fehler.classList.remove('hidden') + eigeneMeldung = true + feld.focus() + return + } + feld.value = nummer + meldungWeg() + }) + zeige() +} + +if (typeof document !== 'undefined' && document.getElementById('decl-form') && document.getElementById('ab-nummer-wrap')) { + initProjektWiderruf(document.getElementById('decl-form')) +} diff --git a/public/widerrufen.html b/public/widerrufen.html index 231320a..76fab22 100644 --- a/public/widerrufen.html +++ b/public/widerrufen.html @@ -24,8 +24,15 @@ + + +