- Label "Externe Quelle (Links)" -> "Externe Quellen" (de/en) - Quelle-URLs werden via linkify-Partial anklickbar, oeffnen in neuem Tab - Neuer Kiosk-Modus: ?kiosk=true macht externe Links unklickbar (bleibt fuer die Session aktiv, verlassen mit ?kiosk=false) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
/*
|
||
* Kiosk-Modus für Ausstellungs-/Terminal-Betrieb.
|
||
*
|
||
* Aktivieren: beliebige URL mit ?kiosk=true (oder ?kiosk=1) aufrufen.
|
||
* Deaktivieren: ?kiosk=false (oder ?kiosk=0).
|
||
*
|
||
* Ist der Modus aktiv, bleibt er für die gesamte Browser-Session erhalten
|
||
* (auch beim Weiterklicken im Menü, ohne den Parameter erneut anzuhängen).
|
||
* Externe Links (anderer Host) sowie mailto:/tel: werden dann unklickbar
|
||
* gemacht – der Linktext bleibt lesbar. Interne Navigation bleibt möglich,
|
||
* damit Karte und Schauplätze weiter erkundet werden können.
|
||
*/
|
||
(function () {
|
||
"use strict";
|
||
|
||
var KEY = "op-kiosk";
|
||
var params = new URLSearchParams(window.location.search);
|
||
|
||
// Parameter setzt/löscht den Session-Zustand
|
||
if (params.has("kiosk")) {
|
||
var v = params.get("kiosk").toLowerCase();
|
||
var on = v === "" || v === "true" || v === "1" || v === "yes";
|
||
try {
|
||
if (on) { sessionStorage.setItem(KEY, "1"); }
|
||
else { sessionStorage.removeItem(KEY); }
|
||
} catch (e) { /* Storage evtl. gesperrt – dann nur für diese Seite aktiv */ }
|
||
if (!on) { document.documentElement.classList.remove("op-kiosk"); return; }
|
||
}
|
||
|
||
var active = false;
|
||
try { active = sessionStorage.getItem(KEY) === "1"; } catch (e) { /* ignore */ }
|
||
if (!active && !params.has("kiosk")) { return; }
|
||
if (!active && params.has("kiosk")) {
|
||
// Storage gesperrt, aber Parameter aktiv → nur für diese Seite
|
||
active = params.get("kiosk").toLowerCase() !== "false";
|
||
}
|
||
if (!active) { return; }
|
||
|
||
document.documentElement.classList.add("op-kiosk");
|
||
|
||
function neutralize() {
|
||
var host = window.location.hostname;
|
||
var links = document.querySelectorAll("a[href]");
|
||
for (var i = 0; i < links.length; i++) {
|
||
var a = links[i];
|
||
var url;
|
||
try { url = new URL(a.href, window.location.href); } catch (e) { continue; }
|
||
|
||
var web = url.protocol === "http:" || url.protocol === "https:";
|
||
var block =
|
||
(web && url.hostname !== host) ||
|
||
url.protocol === "mailto:" ||
|
||
url.protocol === "tel:";
|
||
|
||
if (!block) { continue; }
|
||
|
||
a.classList.add("op-link-disabled");
|
||
a.setAttribute("aria-disabled", "true");
|
||
a.setAttribute("tabindex", "-1");
|
||
a.removeAttribute("target");
|
||
a.dataset.kioskHref = a.getAttribute("href");
|
||
a.removeAttribute("href");
|
||
}
|
||
}
|
||
|
||
if (document.readyState === "loading") {
|
||
document.addEventListener("DOMContentLoaded", neutralize);
|
||
} else {
|
||
neutralize();
|
||
}
|
||
})();
|