diff options
| -rw-r--r-- | FASSUNGEN.txt | 63 | ||||
| -rw-r--r-- | README.md | 27 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/app.js | 19 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/index.html | 20 | ||||
| -rw-r--r-- | src/main/resources/eu/mulk/aendggner/web/style.css | 30 |
5 files changed, 140 insertions, 19 deletions
diff --git a/FASSUNGEN.txt b/FASSUNGEN.txt index cec0075..ea23530 100644 --- a/FASSUNGEN.txt +++ b/FASSUNGEN.txt @@ -21,6 +21,69 @@ Vorbemerkung zur Führung dieses Verzeichnisses ════════════════════════════════════════════════════════════════════════════════ + Fassung vom 25. August 2026, + zuletzt geändert durch die am 25. August 2026 vorgenommenen Änderungen +════════════════════════════════════════════════════════════════════════════════ + +Der Vordruck der Browserfassung führte im Block „Angaben zu den Änderungen“ fünf +Eintragungen untereinander auf: die Dateiwahl und vier Nebenangaben. Drei davon — +der anzuwendende Artikel, der Stichtag und die reine Textausgabe — sind +Sonderfälle, die im Regelfall leer bleiben; sie verstellten den Blick auf das +Wesentliche. Zugleich war das Ankreuzfeld für die unveränderten Vorschriften +leer, obgleich die vollständige Synopse dem entspricht, was erwartet, wer +ein Gesetz in seiner neuen Fassung ansehen will. + + +Artikel 1 +Ausklappbarer Abschnitt „Weitere Angaben“ + +(1) Die Felder „Anzuwendender Artikel“ und „Stichtag“ sowie das Ankreuzfeld + „Statt der Synopse nur den maschinell gelesenen Text der Änderungsdokumente + ausgeben“ treten aus dem Block „Angaben zu den Änderungen“ heraus und stehen + fortan hinter der zugeklappten Aufschrift „Weitere Angaben“. Beschriftungen, + Erläuterungen und Bezeichner bleiben unberührt; die Auslesestellen in + „app.js“ gelten unverändert fort, weil eingeklappte Felder ihren Wert + behalten. + +(2) Die Aufschrift tritt an die Stelle der Leitspalte und läuft über die volle + Breite des Vordrucks — dieselbe Form, die die Leitspalte auf schmalem Schirm + ohnehin annimmt. Das Klappzeichen ist dasselbe wie an der Ausfüllhilfe. + +(3) Ein geschlossenes „details“ druckt seinen Inhalt nicht; ein Vordruck gehört + aber vollständig aufs Papier. Der Abschnitt klappt daher vor dem Druck + selbsttätig auf und nimmt danach seinen vorherigen Zustand wieder ein. + + +Artikel 2 +Vorankreuzung der vollständigen Synopse + +(1) Das Ankreuzfeld „Unveränderte Vorschriften mit in die Synopse aufnehmen“ ist + im Vordruck vorangekreuzt. Die Befehlszeile bleibt unberührt: Dort ist + „--vollstaendig“ weiterhin ausdrücklich anzugeben. + +(2) Die Verfügung der Zentralstelle wies die Zahl der Einträge der Synopse als + „geänderte Normen“ aus. Das traf schon bisher nur zu, solange die + unveränderten Vorschriften fehlten, und wäre nunmehr im Regelfall unrichtig + geworden. Sind sie aufgenommen, so heißt die Zahl fortan „Normen in der + Synopse“. + + +Artikel 3 +Fortschreibung des Handbuchs + +(1) § 14 erhält einen Absatz über die Anordnung der Angaben im Vordruck, die + Vorankreuzung und das Verhalten beim Drucken. Die nachfolgenden Absätze + werden fortlaufend weitergezählt; der Verweis in § 4 Absatz 3 wird angepasst. + + +Die Prüfung geht auf: Am UWG mit dem Dritten Gesetz zu seiner Änderung ergeben +sich vorangekreuzt 19 Befehle, nichts manuell zu prüfen und 31 Normen in der +Synopse, ohne Ankreuzung dieselben 19 Befehle und 6 geänderte Normen; der +Abschnitt „Weitere Angaben“ steht beim Laden zu, klappt auf Druckanforderung auf +und danach wieder zu. + + +════════════════════════════════════════════════════════════════════════════════ Fassung vom 24. August 2026, zuletzt geändert durch die am 24. August 2026 vorgenommenen Änderungen ════════════════════════════════════════════════════════════════════════════════ @@ -157,7 +157,7 @@ Fassungen (`FASSUNGEN.txt`) geführt. `mvnw` abweichend bestimmt wird. (3) Vorausgesetzt wird ein Java-Entwicklungsbausatz der Fassung 21 oder neuer. -Für die Herstellung der Browserfassung gilt abweichend § 14 Absatz 4. +Für die Herstellung der Browserfassung gilt abweichend § 14 Absatz 5. ## § 5 Zulässige Eingaben @@ -547,7 +547,16 @@ unerklärlich unangewandten Befehl auf den Grund zu gehen. Der ausgegebene Text ist derselbe, den der Parser bekommt; er lässt sich sichern, von Hand berichtigen und als Klartextdatei wieder einreichen. -(3) Über dem Formular steht ein zugeklappter Einführungsblock, der zwei +(3) Von diesen Angaben stehen die drei selten auszufüllenden — „Anzuwendender +Artikel“, „Stichtag“ und die Textausgabe — hinter der zugeklappten Aufschrift +„Weitere Angaben“; die beiden Dateifelder und das Ankreuzfeld für die +unveränderten Vorschriften bleiben offen im Vordruck. Dieses Ankreuzfeld ist +abweichend von der Befehlszeile vorangekreuzt: Wer eine Synopse ansieht, will in +aller Regel das ganze Gesetz vor sich haben und nicht nur seine geänderten +Stellen. Beim Drucken klappt der Abschnitt selbsttätig auf, damit der Vordruck +vollständig aufs Papier kommt, und schließt sich danach wieder. + +(4) Über dem Formular steht ein zugeklappter Einführungsblock, der zwei durchgerechnete Fälle mit Verweisen auf die amtlichen Fundstellen anbietet, nämlich das UWG (`gesetze-im-internet.de/uwg_2004/xml.zip`) mit dem Dritten Gesetz zu seiner Änderung (BGBl. 2026 I Nr. 43) und das AGG @@ -555,7 +564,7 @@ zu seiner Änderung (BGBl. 2026 I Nr. 43) und das AGG Mitausgeliefert wird nichts; die Seite ruft die Dateien auch nicht selbst ab, sie verweist nur darauf. -(4) Ein Server ist nicht erforderlich: Die vollständige Verarbeitung — +(5) Ein Server ist nicht erforderlich: Die vollständige Verarbeitung — PDF-Textgewinnung mit PDFBox eingeschlossen — läuft als WebAssembly-Modul im Browser, übersetzt mit GraalVM Web Image aus demselben Java-Quelltext. Ausgeliefert werden nur statische Dateien; die gewählten Dokumente verlassen den @@ -567,7 +576,7 @@ nicht in der Community Edition: JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package ``` -(5) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`, +(6) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`, `style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 17 MB, komprimiert etwa 5 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar: `deploy/webpaket.sh` läuft am Ende desselben Befehls, wirft den mehrere hundert @@ -575,7 +584,7 @@ Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, schickt das Modul durch `wasm-opt -Oz` und legt den Quelltext der gebauten Fassung als `aendggner-quelltext.tar.gz` samt `quelltext-fassung.txt` bei. -(6) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt, +(7) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt, handelt sich die Megabyte wieder ein: 1. `-Os` beim Übersetzen statt der auf Durchsatz gerichteten Voreinstellung; @@ -593,7 +602,7 @@ handelt sich die Megabyte wieder ein: nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul scheitert erst beim Instanziieren. -(7) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt +(8) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt `src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und Drucksachentexte fremder Urheberschaft, an denen allein die Tests messen — Quelltext im Sinne der AGPLv3 sind sie nicht, gebaut wird ohne sie, und sie @@ -603,18 +612,18 @@ die Anschrift nach § 3 Absatz 2. Wächst das Archiv wieder über 8 MiB, so bric `webpaket.sh` ab; alsdann sind Massendaten ins Repository geraten, die dort nicht hingehören. -(8) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung +(9) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung nach Absatz 4 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute. Für einen Probelauf hilft `QUELLTEXT_UNGEPRUEFT=1`. -(9) Zur örtlichen Ansicht genügt `file://` nicht; Browser laden Wasm-Module und +(10) Zur örtlichen Ansicht genügt `file://` nicht; Browser laden Wasm-Module und Worker nur über HTTP (<http://localhost:8000/>): ```shell jwebserver -d target/web ``` -(10) Die Befehlszeilenfassung (§ 6) bleibt hiervon unberührt und ist weiterhin der +(11) Die Befehlszeilenfassung (§ 6) bleibt hiervon unberührt und ist weiterhin der Weg für Massenläufe. ## § 15 Ausrollen diff --git a/src/main/resources/eu/mulk/aendggner/web/app.js b/src/main/resources/eu/mulk/aendggner/web/app.js index a592612..fb55cbd 100644 --- a/src/main/resources/eu/mulk/aendggner/web/app.js +++ b/src/main/resources/eu/mulk/aendggner/web/app.js @@ -52,6 +52,7 @@ formular.addEventListener("submit", async (ereignis) => { const artikel = document.querySelector("#artikel").value.trim(); const stichtag = document.querySelector("#stichtag").value.trim(); const nurText = document.querySelector("#nurtext").checked; + const vollstaendig = document.querySelector("#vollstaendig").checked; knopf.disabled = true; zeige("Lade das Rechenwerk (einmalig einige Megabyte) und werte aus …", "arbeit"); @@ -72,7 +73,7 @@ formular.addEventListener("submit", async (ereignis) => { worker.postMessage({ stamm, patches, - vollstaendig: document.querySelector("#vollstaendig").checked, + vollstaendig, artikel: artikel === "" ? null : artikel, stichtag: stichtag === "" ? null : stichtag, nurText, @@ -97,9 +98,11 @@ formular.addEventListener("submit", async (ereignis) => { return; } + // Die Zahl zählt die Einträge der Synopse. Sind die unveränderten Vorschriften mit + // aufgenommen, so sind das nicht die geänderten Normen, und sie heißen dann anders. zeige( `${ergebnis.angewandt} Befehle angewandt, ${ergebnis.manuell} manuell zu prüfen, ` + - `${ergebnis.normen} geänderte Normen. `, + `${ergebnis.normen} ${vollstaendig ? "Normen in der Synopse" : "geänderte Normen"}. `, "fertig", ); oeffne(ergebnis.html, "text/html;charset=utf-8", "Synopse öffnen"); @@ -109,3 +112,15 @@ formular.addEventListener("submit", async (ereignis) => { knopf.disabled = false; } }); + +// Ein geschlossenes <details> druckt seinen Inhalt nicht; ein Vordruck gehört aber +// vollständig aufs Papier, auch der eingeklappte Teil. +const weitere = document.querySelector(".weitere"); +let warOffen = false; +addEventListener("beforeprint", () => { + warOffen = weitere.open; + weitere.open = true; +}); +addEventListener("afterprint", () => { + weitere.open = warOffen; +}); diff --git a/src/main/resources/eu/mulk/aendggner/web/index.html b/src/main/resources/eu/mulk/aendggner/web/index.html index 31ca03b..69adbdb 100644 --- a/src/main/resources/eu/mulk/aendggner/web/index.html +++ b/src/main/resources/eu/mulk/aendggner/web/index.html @@ -132,6 +132,18 @@ gewählten Reihenfolge nacheinander angewendet)</span></label> <input type="file" id="aenderung" name="aenderung" multiple required> </div> + <div class="feld ankreuzfeld"> + <label> + <input type="checkbox" id="vollstaendig" name="vollstaendig" checked> + Unveränderte Vorschriften mit in die Synopse aufnehmen + </label> + </div> + </div> + </div> + + <details class="weitere"> + <summary>Weitere Angaben</summary> + <div class="felder"> <div class="feld"> <label for="artikel">Anzuwendender Artikel <span class="erl">(nur auszufüllen, wenn abweichend: ohne Angabe werden alle @@ -150,12 +162,6 @@ </div> <div class="feld ankreuzfeld"> <label> - <input type="checkbox" id="vollstaendig" name="vollstaendig"> - Unveränderte Vorschriften mit in die Synopse aufnehmen - </label> - </div> - <div class="feld ankreuzfeld"> - <label> <input type="checkbox" id="nurtext" name="nurtext"> Statt der Synopse nur den maschinell gelesenen Text der Änderungsdokumente ausgeben </label> @@ -164,7 +170,7 @@ oben wieder einreichen.</p> </div> </div> - </div> + </details> <div class="block"> <div class="leitspalte">Antragstellung</div> diff --git a/src/main/resources/eu/mulk/aendggner/web/style.css b/src/main/resources/eu/mulk/aendggner/web/style.css index 21f5942..ce64a6f 100644 --- a/src/main/resources/eu/mulk/aendggner/web/style.css +++ b/src/main/resources/eu/mulk/aendggner/web/style.css @@ -250,6 +250,33 @@ input[type="file"]::file-selector-button:hover { background: var(--grund); } +/* Nebenangaben, die selten auszufüllen sind, stehen hinter einer Klappe. Deren Aufschrift + tritt an die Stelle der Leitspalte und läuft über die volle Breite — dieselbe Form, die + die Leitspalte auf dem Telefon ohnehin annimmt. Das Dreieck ist dasselbe wie an der + Ausfüllhilfe. */ +.weitere summary { + padding: 0.4rem 0.5rem; + border-right: 1px solid var(--linie); + border-bottom: 1px solid var(--linie); + background: var(--grund); + font-size: 0.6875rem; + font-weight: bold; + cursor: pointer; + list-style: none; +} + +.weitere summary::-webkit-details-marker { + display: none; +} + +.weitere summary::before { + content: "\25B8\00A0"; +} + +.weitere[open] summary::before { + content: "\25BE\00A0"; +} + /* Der Nachsatz zu einem Ankreuzfeld steht unter dem Text, nicht neben ihm, und rückt bis unter die Aufschrift ein. */ .nachsatz { @@ -531,7 +558,8 @@ code { a { text-decoration: none; } .block, .beachtung, .verfuegung { break-inside: avoid; } - .leitspalte, .ausfuellhinweis, .verfuegung, .verfuegung h2, .kreuz, .ausfuellhilfe { + .leitspalte, .ausfuellhinweis, .verfuegung, .verfuegung h2, .kreuz, .ausfuellhilfe, + .weitere summary { -webkit-print-color-adjust: exact; print-color-adjust: exact; } |
