aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-25 07:07:14 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2026-08-25 07:07:14 +0200
commitba8cb029b9d92ccafeff423e7b8930067b91cf01 (patch)
tree4bf55661958f94ec4183ee04c5b2f4a79845beb2
parenta94bdec06417d3a8c44640f114b88000ff0bef9f (diff)
Die selten gebrauchten Angaben treten hinter eine KlappeHEADmaster
Der Vordruck der Browserfassung führte fünf Eintragungen untereinander auf, von denen drei im Regelfall leer bleiben: der anzuwendende Artikel, der Stichtag und die reine Textausgabe. Sie stehen nun hinter der zugeklappten Aufschrift „Weitere Angaben“, die an die Stelle der Leitspalte tritt und über die volle Breite läuft — dieselbe Form, die die Leitspalte auf schmalem Schirm ohnehin annimmt. Weil ein geschlossenes „details“ seinen Inhalt nicht druckt, ein Vordruck aber vollständig aufs Papier gehört, klappt der Abschnitt vor dem Druck selbsttätig auf und nimmt danach seinen vorherigen Zustand wieder ein. Das Ankreuzfeld für die unveränderten Vorschriften ist vorangekreuzt: Wer eine Synopse ansieht, will in aller Regel das ganze Gesetz vor sich haben. Damit wurde die Verfügung der Zentralstelle unrichtig, die die Zahl der Einträge als „geänderte Normen“ auswies; sind die unveränderten mit aufgenommen, so heißen sie fortan „Normen in der Synopse“. Die Befehlszeile bleibt unberührt. 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 klappt auf Druckanforderung auf und danach wieder zu. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Change-Id: I68897f8ab0b51eb4e475982d38b914dac93748d7
-rw-r--r--FASSUNGEN.txt63
-rw-r--r--README.md27
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/app.js19
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/index.html20
-rw-r--r--src/main/resources/eu/mulk/aendggner/web/style.css30
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
════════════════════════════════════════════════════════════════════════════════
diff --git a/README.md b/README.md
index cf7af9c..ff13037 100644
--- a/README.md
+++ b/README.md
@@ -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;
}