Files
Hugo_MAP-NSU-Komplex/assets/js/kiosk.js
T
maik d351ba2b3a feat: Externe Quellen mit klickbaren Links (neuer Tab) + Kiosk-Modus
- 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)
2026-08-18 17:58:53 +02:00

72 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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();
}
})();