Filter: alle / Nahverkehr / Fernverkehr

Einteilung nach Gattung (Schweiz: route_desc, Deutschland: Präfix der
Linie): ICE, IC, EC, ECE, EN, NJ, RJ(X), TGV, IR, … = Fernverkehr.
Auswahl bleibt im Browser gespeichert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb
This commit is contained in:
Claude
2026-10-22 06:01:38 +02:00
parent 085a129a85
commit 8865e7abcf
5 changed files with 41 additions and 2 deletions
+14
View File
@@ -108,6 +108,17 @@ function setMode(mode) {
}
for (const m of MODES) document.getElementById("btn-" + m).onclick = () => setMode(m);
// ---------- Filter: alle / Nahverkehr / Fernverkehr ----------
const FILTERS = { all: null, local: ["!", ["get", "fv"]], long: ["get", "fv"] };
function setFilter(name) {
if (!(name in FILTERS)) name = "all";
for (const id of ["trains", "train-labels"]) map.setFilter(id, FILTERS[name]);
for (const n of Object.keys(FILTERS)) document.getElementById("flt-" + n).setAttribute("aria-pressed", String(n === name));
try { localStorage.setItem("filter", name); } catch (e) { /* privater Modus */ }
}
for (const n of Object.keys(FILTERS)) document.getElementById("flt-" + n).onclick = () => setFilter(n);
// ---------- Züge ----------
// Server liefert je Zug die Position jetzt und alle `step` Sekunden danach (entlang der Strecke);
@@ -328,6 +339,9 @@ map.on("load", () => {
let mode = "light";
try { mode = localStorage.getItem("mode") || (localStorage.getItem("sat") === "1" ? "sat" : "light"); } catch (e) { /* egal */ }
setMode(mode);
let filter = "all";
try { filter = localStorage.getItem("filter") || "all"; } catch (e) { /* egal */ }
setFilter(filter);
statusLoop();
setInterval(refreshTrains, 5000);
requestAnimationFrame(animate);