aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}