Die Auswahlliste klappte hinter dem Dialog auf

Ein `<dialog>` mit `showModal()` liegt in der Top-Layer des Browsers,
über allem — unabhängig von `z-index`. Die Liste hing am `body` und
verschwand deshalb hinter genau dem Dialog, in dem ihr Knopf steht.
Jetzt wird sie in den Dialog gehängt, wenn es einen gibt. Mit
`elementFromPoint` nachgeprüft: an ihrer Stelle liegt wirklich ein
Listeneintrag obenauf.

Dazu zwei Stellen, die zu der Vermutung geführt haben, die
Spracheinstellung wirke nicht:

„Übersetzungen holen" stand stur auf en-US. Neben einem Server, der auf
Deutsch steht, liest sich das wie eine Aussage über den Server.
Vorgewählt wird jetzt die eigene Sprache, sonst die erste, die nicht
schon die des Servers ist — und der Text nennt die Serversprache.

Und „Meine Sprache" sagt jetzt deutlich, wenn sie abweicht. Sie ändert
nicht, was der Server holt, nur was man selbst sieht: steht sie auf
Englisch, während der Server auf Deutsch holt, sieht die ganze
Mediathek englisch aus und jedes Auffrischen scheint wirkungslos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-04 20:03:01 +02:00
co-authored by Claude Opus 5
parent e87d50e470
commit ce38da1376
2 changed files with 42 additions and 8 deletions
+7 -1
View File
@@ -126,7 +126,13 @@ export function auswahl(optionen: Option[], vorgabe = ''): Auswahlfeld {
if (e.key === 'Tab') schliessen();
};
document.body.appendChild(box);
// **In den Dialog, wenn es einen gibt.**
//
// Ein `<dialog>` mit `showModal()` liegt in der Top-Layer des Browsers —
// über allem, unabhängig von `z-index`. Eine Liste am `body` verschwand
// deshalb hinter dem Dialog, in dem ihr Knopf steht. Im Dialog selbst
// liegt sie mit ihm in derselben Ebene.
(knopf.closest('dialog') ?? document.body).appendChild(box);
offen = box;
knopf.setAttribute('aria-expanded', 'true');
+35 -7
View File
@@ -1140,12 +1140,27 @@ function sprachbereich(): HTMLElement {
// **Die eigene Sprache, getrennt von der des Servers.** Die obere
// bestimmt, was geholt wird; diese nur, was man selbst zu sehen bekommt.
// **Weicht sie ab, steht das deutlich dabei.**
//
// Eine eigene Sprache ändert nicht, was der Server holt — nur was man
// selbst sieht. Steht sie auf Englisch, während der Server auf Deutsch
// holt, sieht die ganze Mediathek englisch aus, und jedes „Metadaten
// auffrischen" scheint wirkungslos. Genau in diese Falle läuft man,
// ohne je zu erfahren, warum.
const weichtAb = eigeneSprache !== null && eigeneSprache !== stand.language;
const serversprache = sprachen.find(x => x.wert === stand.language)?.text ?? stand.language;
liste.appendChild(zeile(
'Meine Sprache',
weichtAb ? 'Meine Sprache — weicht ab' : 'Meine Sprache',
eigeneSprache ? (sprachen.find(x => x.wert === eigeneSprache)?.text ?? eigeneSprache)
: 'Wie der Server',
'Gilt nur für dich. Was nicht übersetzt vorliegt, erscheint weiterhin in '
+ 'der Sprache des Servers.',
weichtAb
? `Du siehst alles auf ${sprachen.find(x => x.wert === eigeneSprache)?.text ?? eigeneSprache}, `
+ `obwohl der Server auf ${serversprache} holt. Titel ohne Übersetzung bleiben `
+ `auf ${serversprache}. Auf „Wie der Server" stellen, um zu sehen, was wirklich `
+ 'gespeichert ist.'
: 'Gilt nur für dich. Was nicht übersetzt vorliegt, erscheint weiterhin in '
+ 'der Sprache des Servers.',
() => dialog({
titel: 'Meine Sprache',
text: 'Die Metadaten liegen in der Sprache des Servers vor. Eine andere '
@@ -1167,14 +1182,27 @@ function sprachbereich(): HTMLElement {
liste.appendChild(zeile(
'Übersetzungen holen',
'Füllt eine zweite Sprache für alle Titel auf',
'Kostet je Titel eine Anfrage an TMDB und dauert entsprechend. '
+ 'Danach sehen Benutzer mit dieser Sprache die übersetzten Titel.',
`Füllt eine zweite Sprache neben ${serversprache} auf`,
`Der Bestand liegt auf ${serversprache} vor. Das hier legt zusätzlich `
+ 'eine zweite Fassung an, für Benutzer, die eine andere Sprache gewählt '
+ 'haben — am Bestand selbst ändert es nichts. Kostet je Titel eine '
+ 'Anfrage an TMDB.',
() => dialog({
titel: 'Übersetzungen holen',
text: `Die Titel des Servers bleiben auf ${serversprache}. Geholt wird `
+ 'eine zusätzliche Fassung, die nur Benutzer mit genau dieser Sprache '
+ 'zu sehen bekommen.',
felder: [{
name: 'sprache', beschriftung: 'Für welche Sprache',
auswahl: sprachen, wert: eigeneSprache ?? 'en-US',
// **Nicht stur en-US.** Stand dort „Englisch", während der Server
// auf Deutsch steht, las sich das wie eine Aussage über den
// Server — und führte zu der Vermutung, die Spracheinstellung
// wirke nicht. Vorgewählt wird die eigene Sprache, sonst die
// erste, die nicht schon die des Servers ist.
auswahl: sprachen,
wert: eigeneSprache
?? sprachen.find(x => x.wert !== stand.language)?.wert
?? stand.language,
}],
bestaetigen: 'Holen',
tun: async wert => {