fix(shell): geschlossenes Spenden-Banner kommt beim Sprachwechsel auch ohne localStorage nicht zurück

Das Banner merkte sich „geschlossen“ nur in localStorage. Bei gesperrtem Speicher (privates Fenster, gesperrte Website-Daten) baute der Neuaufbau
des Rahmens beim Sprachwechsel (main.ts) es wieder auf.

- donate-banner.ts: zusätzlich ein Merker im Speicher des Moduls (closedThisSession); er gilt neben localStorage.
- Tests: donate-banner.test.ts lädt je Test eine frische Modulkopie (der Merker lebt im Modul); neue Fälle: gesperrter Speicher, erneutes Einhängen
  nach dem Schließen (bleibt weg) und ohne Schließen (kommt wieder); main.test.ts: Sprachwechsel nach dem Schließen bei gesperrtem Speicher.
  Die beiden schon vorhandenen Fälle zum gesperrten Speicher sperren jetzt wirklich (vi.stubGlobal): vi.spyOn(Storage.prototype, …) greift in
  happy-dom nicht, die Fälle waren leer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 05:31:38 +00:00
1 parent af05e5f1f1
commit 0bcdfe258d
3 files changed
+74 -11

No files matched your search

+7 -2
View File
@@ -5,19 +5,24 @@ import { t } from '../i18n/i18n';
const CLOSED_KEY = 'aircard.donateBannerClosed';
// Auch im Speicher des Moduls gemerkt: bei gesperrtem localStorage bringt sonst der Neuaufbau des Rahmens (Sprachwechsel) das Banner zurück.
let closedThisSession = false;
function isClosed(): boolean {
if (closedThisSession) return true;
try {
return localStorage.getItem(CLOSED_KEY) !== null;
} catch {
return false; // Speicher gesperrt: das Banner bleibt sichtbar, bis die Seite neu geladen wird
return false; // Speicher gesperrt: das Banner bleibt sichtbar, bis es jemand schließt
}
}
function rememberClosed(): void {
closedThisSession = true;
try {
localStorage.setItem(CLOSED_KEY, '1');
} catch {
// gilt dann nur für diese Sitzung
// gilt dann nur, solange die Seite offen ist
}
}