Klima: Glossar-Links via DB-Alias-Map + Graph-Overlay iPad-Höhe

- KLIMA_TO_DB_KEY mappt Klima-Slugs auf DB-key_slug
  (windpark→windenergie, solaranlage→photovoltaik,
  erneuerbar→erneuerbare-energie, kohlekraftwerk→fossile-brennstoffe)
- GLOSSAR_DB_KNOWN-Set für alle bekannten DB-Slugs
- resolveGlossarDbKey: liefert den DB-Key oder null; tote Links
  werden ausgeblendet statt ins Leere zu führen
- ggs-graph-zoom-card iPad: 78dvh statt max-height 400 px,
  damit SVG + Header reinpassen + safe-area-padding-bottom
This commit is contained in:
2026-05-02 21:16:05 +02:00
parent 9c8d12c3cd
commit e941293d93
3 changed files with 166 additions and 6 deletions
+44 -3
View File
@@ -574,6 +574,17 @@
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-badges,
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-demolish { display: revert !important; }
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-count { position: static; }
/* Graph-Zoom-Overlay: design-system kappt auf max-height: 400 px, was am
iPad-Landscape (~820 px hoch) den Inhalt unten abschneidet. Lokal
größer machen, damit SVG + Header sicher reinpassen. */
.ggs-graph-zoom-card {
height: 78dvh !important;
max-height: 92dvh !important;
width: 92vw !important;
max-width: 92vw !important;
padding-bottom: max(var(--ggs-gap-lg), env(safe-area-inset-bottom)) !important;
}
}
@keyframes kw-build-slidein {
@@ -4109,6 +4120,32 @@ function resolveGlossarEntry(key) {
return GLOSSAR_API_CACHE[key] || GLOSSAR[key] || null;
}
/* Klima-Sim verwendet teils andere data-glossar-Keys als die zentrale
Glossar-DB. Damit der „Voller Glossar-Eintrag →"-Link nicht ins
Leere führt, hier die Übersetzung Klima-Key → DB-key_slug. Keys ohne
Eintrag im KLIMA_TO_DB-Mapping UND ohne Treffer in der API-Cache
bekommen keinen Glossar-Link mehr (statt einer toten URL). */
const KLIMA_TO_DB_KEY = {
windpark: 'windenergie',
solaranlage: 'photovoltaik',
erneuerbar: 'erneuerbare-energie',
kohlekraftwerk: 'fossile-brennstoffe',
};
const GLOSSAR_DB_KNOWN = new Set([
'albedo','biodiversitaet','co2','co2-aequivalent','co2-fussabdruck',
'emissionen','energiemix','erneuerbare-energie','fossile-brennstoffe',
'fotosynthese','kilowatt','kilowattstunde','kipppunkt','klimaneutralitaet',
'klimawandel','kohlenstoffkreislauf','megawatt','methan','nachhaltigkeit',
'pariser-abkommen','permafrost','photovoltaik','ppm','treibhauseffekt',
'treibhausgas','wasserkraft','watt','windenergie',
]);
function resolveGlossarDbKey(key) {
const aliased = KLIMA_TO_DB_KEY[key] || key;
if (GLOSSAR_DB_KNOWN.has(aliased)) return aliased;
if (GLOSSAR_API_CACHE[aliased]) return aliased; // dynamisch nachgeladen
return null;
}
let _glossarPopup = null;
document.addEventListener('click', (e) => {
if (_glossarPopup && !_glossarPopup.contains(e.target)) {
@@ -4130,10 +4167,14 @@ document.addEventListener('click', (e) => {
let html = '<div class="ggs-glossar-title">'+entry.title+'</div>';
html += '<div class="ggs-glossar-text">'+entry.text+'</div>';
if (entry.unit) html += '<div class="ggs-glossar-unit">'+entry.unit+'</div>';
// Voller Eintrag im Glossar — öffnet in neuem Tab
html += '<br><a href="'+GLOSSAR_PAGE+'?term='+encodeURIComponent(key)+'" target="_blank" rel="noopener" class="ggs-glossar-link">Voller Glossar-Eintrag →</a>';
// Voller Eintrag im Glossar — nur verlinken, wenn der Begriff in der
// zentralen Glossar-DB existiert (Alias-Mapping inklusive).
const dbKey = resolveGlossarDbKey(key);
if (dbKey) {
html += '<br><a href="'+GLOSSAR_PAGE+'?term='+encodeURIComponent(dbKey)+'" target="_blank" rel="noopener" class="ggs-glossar-link">Voller Glossar-Eintrag →</a>';
}
if (entry.link && !entry.fromApi) {
html += ' <a href="'+entry.link+'" target="_blank" rel="noopener" class="ggs-glossar-link" style="margin-left:8px">Wikipedia →</a>';
html += (dbKey ? ' ' : '<br>') + '<a href="'+entry.link+'" target="_blank" rel="noopener" class="ggs-glossar-link"' + (dbKey ? ' style="margin-left:8px"' : '') + '>Wikipedia →</a>';
}
popup.innerHTML = html;
document.body.appendChild(popup);
+42 -3
View File
@@ -702,6 +702,17 @@
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-badges,
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-demolish { display: revert !important; }
.ggs-zone-actions.kw-build-expanded .ggs-card .ggs-card-count { position: static; }
/* Graph-Zoom-Overlay: design-system kappt auf max-height: 400 px, was am
iPad-Landscape (~820 px hoch) den Inhalt unten abschneidet. Lokal
größer machen, damit SVG + Header sicher reinpassen. */
.ggs-graph-zoom-card {
height: 78dvh !important;
max-height: 92dvh !important;
width: 92vw !important;
max-width: 92vw !important;
padding-bottom: max(var(--ggs-gap-lg), env(safe-area-inset-bottom)) !important;
}
}
@keyframes kw-build-slidein {
@@ -5622,6 +5633,30 @@ function resolveGlossarEntry(key) {
return GLOSSAR_API_CACHE[key] || GLOSSAR[key] || null;
}
/* Klima-Sim verwendet teils andere data-glossar-Keys als die zentrale
Glossar-DB. Damit der „Voller Glossar-Eintrag →"-Link nicht ins
Leere führt, hier die Übersetzung Klima-Key → DB-key_slug. */
const KLIMA_TO_DB_KEY = {
windpark: 'windenergie',
solaranlage: 'photovoltaik',
erneuerbar: 'erneuerbare-energie',
kohlekraftwerk: 'fossile-brennstoffe',
};
const GLOSSAR_DB_KNOWN = new Set([
'albedo','biodiversitaet','co2','co2-aequivalent','co2-fussabdruck',
'emissionen','energiemix','erneuerbare-energie','fossile-brennstoffe',
'fotosynthese','kilowatt','kilowattstunde','kipppunkt','klimaneutralitaet',
'klimawandel','kohlenstoffkreislauf','megawatt','methan','nachhaltigkeit',
'pariser-abkommen','permafrost','photovoltaik','ppm','treibhauseffekt',
'treibhausgas','wasserkraft','watt','windenergie',
]);
function resolveGlossarDbKey(key) {
const aliased = KLIMA_TO_DB_KEY[key] || key;
if (GLOSSAR_DB_KNOWN.has(aliased)) return aliased;
if (GLOSSAR_API_CACHE[aliased]) return aliased;
return null;
}
let _glossarPopup = null;
document.addEventListener('click', (e) => {
if (_glossarPopup && !_glossarPopup.contains(e.target)) {
@@ -5643,10 +5678,14 @@ document.addEventListener('click', (e) => {
let html = '<div class="ggs-glossar-title">'+entry.title+'</div>';
html += '<div class="ggs-glossar-text">'+entry.text+'</div>';
if (entry.unit) html += '<div class="ggs-glossar-unit">'+entry.unit+'</div>';
// Voller Eintrag im Glossar — öffnet in neuem Tab
html += '<br><a href="'+GLOSSAR_PAGE+'?term='+encodeURIComponent(key)+'" target="_blank" rel="noopener" class="ggs-glossar-link">Voller Glossar-Eintrag →</a>';
// Voller Eintrag im Glossar — nur verlinken, wenn der Begriff in der
// zentralen Glossar-DB existiert (Alias-Mapping inklusive).
const dbKey = resolveGlossarDbKey(key);
if (dbKey) {
html += '<br><a href="'+GLOSSAR_PAGE+'?term='+encodeURIComponent(dbKey)+'" target="_blank" rel="noopener" class="ggs-glossar-link">Voller Glossar-Eintrag →</a>';
}
if (entry.link && !entry.fromApi) {
html += ' <a href="'+entry.link+'" target="_blank" rel="noopener" class="ggs-glossar-link" style="margin-left:8px">Wikipedia →</a>';
html += (dbKey ? ' ' : '<br>') + '<a href="'+entry.link+'" target="_blank" rel="noopener" class="ggs-glossar-link"' + (dbKey ? ' style="margin-left:8px"' : '') + '>Wikipedia →</a>';
}
popup.innerHTML = html;
document.body.appendChild(popup);