Die Weboberfläche öffnet ihr Ergebnis unmittelbar und wechselt die Domäne

Zwei Verbesserungen an der Browserfassung:

Erstens wird die Browserfassung künftig unter https://aendggner.kellertomaten.de/
betrieben. Der kanonische Verweis in index.html, die Erwähnungen im Handbuch
(README.md) und der Kommentar der Nginx-Konfigurationsvorlage sind entsprechend
angepasst.

Zweitens öffnet das Formularskript (app.js) nach abgeschlossener Auswertung die
Synopse (bzw. bei Nur-Text-Ausgabe den gelesenen Text) unmittelbar per
window.open in einem neuen Reiter. Der Verweis unter „Verfügung der Zentralstelle“
bleibt als Hilfsmittel und für die fortgeschriebene Fassung erhalten.

Change-Id: I961773b9bb1035613b4adf7b5f7101671cd44bc8
diff --git a/FASSUNGEN.txt b/FASSUNGEN.txt
index 37da343..269cd7a 100644
--- a/FASSUNGEN.txt
+++ b/FASSUNGEN.txt
@@ -21,6 +21,34 @@
 
 
 ════════════════════════════════════════════════════════════════════════════════
+ Fassung vom 29. August 2026 (zweite Fassung des Tages),
+ zuletzt geändert durch die am 29. August 2026 vorgenommenen Änderungen
+════════════════════════════════════════════════════════════════════════════════
+
+Die kanonische Web-Adresse der Browserfassung lautet fortan
+aendggner.kellertomaten.de (Artikel 1). Das Ergebnis des Vordrucks öffnet sich
+beim Absenden unmittelbar in einem neuen Reiter (Artikel 2).
+
+
+Artikel 1
+Kanonische Web-Adresse
+
+Die Browserfassung wird unter der Domäne aendggner.kellertomaten.de betrieben.
+Die Angabe des kanonischen Verweises in index.html, das Handbuch (README.md) und
+die Konfigurationsvorlage (deploy/nginx-aendggner.conf) sind entsprechend
+angepasst.
+
+
+Artikel 2
+Unmittelbare Öffnung der Synopse
+
+Nach dem Absenden des Vordrucks und abgeschlossener Berechnung öffnet das Skript
+(app.js) das berechnete Ergebnis unmittelbar in einem neuen Browser-Reiter
+(window.open). Der Verweis unter „Verfügung der Zentralstelle“ bleibt als
+Hilfsmittel und für etwaige Zusatzdateien unverändert erhalten.
+
+
+════════════════════════════════════════════════════════════════════════════════
  Fassung vom 29. August 2026,
  zuletzt geändert durch die am 29. August 2026 vorgenommenen Änderungen
 ════════════════════════════════════════════════════════════════════════════════
diff --git a/README.md b/README.md
index 6bf124c..c960a80 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@
 ```
 
 Ohne Einrichtung läuft dasselbe im Browser unter
-<https://aendggner.app.kellertomaten.de/>; die dort angebotenen zwei
+<https://aendggner.kellertomaten.de/>; die dort angebotenen zwei
 durchgerechneten Beispiele sind der kürzeste Weg zum ersten Ergebnis
 (§ 14).
 
@@ -147,7 +147,7 @@
 ## § 3 Bezugsquellen und Anschriften
 
 (1) Die Browserfassung wird betrieben unter
-<https://aendggner.app.kellertomaten.de/>.
+<https://aendggner.kellertomaten.de/>.
 
 (2) Fortlaufende Quelltextquelle ist
 <https://git.benkard.de/mulk/aendggner>. Die jeweils betriebene
@@ -1003,7 +1003,7 @@
 Browserfassung dient.
 
 (2) Wer die Fassung stattdessen selbst ausliefert — unter einem Unterpfad einer
-bestehenden Domain, wie zuvor unter <https://aendggner.app.kellertomaten.de/> —,
+bestehenden Domain, wie zuvor unter <https://aendggner.kellertomaten.de/> —,
 braucht die Vorkompression und fordert sie beim Bau an:
 
 ```shell
diff --git a/deploy/nginx-aendggner.conf b/deploy/nginx-aendggner.conf
index 5df1c91..1745438 100644
--- a/deploy/nginx-aendggner.conf
+++ b/deploy/nginx-aendggner.conf
@@ -2,7 +2,7 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
 # Vorlage für die Auslieferung der ÄndGgner-Browserfassung unter
-# https://aendggner.app.kellertomaten.de/.
+# https://aendggner.kellertomaten.de/.
 #
 # Es gibt keinen Anwendungsprozess: Der Server liefert nur statische Dateien aus
 # (Inhalt von target/web/), gerechnet wird im Browser. Weil der Dienst unter einem
diff --git a/src/main/resources/eu/mulk/aendggner/web/app.js b/src/main/resources/eu/mulk/aendggner/web/app.js
index b72db3c..a8bcb22 100644
--- a/src/main/resources/eu/mulk/aendggner/web/app.js
+++ b/src/main/resources/eu/mulk/aendggner/web/app.js
@@ -38,10 +38,12 @@
     meldung.append(" · ");
   }
   const verweis = document.createElement("a");
-  verweis.href = URL.createObjectURL(new Blob([inhalt], { type: art }));
+  const url = URL.createObjectURL(new Blob([inhalt], { type: art }));
+  verweis.href = url;
   verweis.target = "_blank";
   verweis.textContent = aufschrift;
   meldung.append(verweis);
+  return url;
 }
 
 formular.addEventListener("submit", async (ereignis) => {
@@ -94,16 +96,14 @@
       return;
     }
 
-    // Kein window.open: Der Aufruf käme nach dem Warten auf den Worker und gälte dem Browser
-    // nicht mehr als Nutzerhandlung — er würde als Popup blockiert. Stattdessen ein Link, der
-    // sich öffnen und ebenso gut speichern lässt.
     if (nurText) {
       zeige(
         `${ergebnis.text.length.toLocaleString("de-DE")} Zeichen gelesen; ` +
           `keine Synopse erstellt. `,
         "fertig",
       );
-      oeffne(ergebnis.text, "text/plain;charset=utf-8", "Gelesenen Text öffnen");
+      const url = oeffne(ergebnis.text, "text/plain;charset=utf-8", "Gelesenen Text öffnen");
+      window.open(url, "_blank");
       return;
     }
 
@@ -115,7 +115,8 @@
         (ergebnis.abgleich ? `Abgleich: ${ergebnis.abgleich}. ` : ""),
       "fertig",
     );
-    oeffne(ergebnis.html, "text/html;charset=utf-8", "Synopse öffnen");
+    const url = oeffne(ergebnis.html, "text/html;charset=utf-8", "Synopse öffnen");
+    window.open(url, "_blank");
     if (neufassungGewuenscht) {
       oeffne(
         ergebnis.neufassung,
diff --git a/src/main/resources/eu/mulk/aendggner/web/index.html b/src/main/resources/eu/mulk/aendggner/web/index.html
index 40a6649..19618b3 100644
--- a/src/main/resources/eu/mulk/aendggner/web/index.html
+++ b/src/main/resources/eu/mulk/aendggner/web/index.html
@@ -9,7 +9,7 @@
   <meta name="description" content="Wendet Änderungsgesetze und Gesetzentwürfe selbsttätig auf ein
     Stammgesetz an und zeigt das Ergebnis als zweispaltige Synopse. Die Auswertung läuft
     vollständig im Browser; die gewählten Dateien werden nicht übertragen.">
-  <link rel="canonical" href="https://aendggner.app.kellertomaten.de/">
+  <link rel="canonical" href="https://aendggner.kellertomaten.de/">
   <link rel="icon" href="favicon.svg" type="image/svg+xml">
   <link rel="stylesheet" href="style.css">
   <script src="app.js" defer></script>