From c621c851af2fcdba25b221e3d6442295fe5e18f5 Mon Sep 17 00:00:00 2001 From: Koala <6156589+Shik3i@users.noreply.github.com> Date: Sat, 30 May 2026 11:49:04 +0200 Subject: [PATCH] style(website): optimize SEO, UX, accessibility, and navigation icons --- eslint.config.mjs | 1 + website/app.js | 18 +++++++++++- website/datenschutz.html | 59 ++++++++++++++++++++++++++++++++++------ website/impressum.html | 20 ++++++++++---- website/index.html | 39 ++++++++++++++++++++------ website/join.html | 12 +++++--- 6 files changed, 121 insertions(+), 28 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 3fc4c14..a194c59 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -20,6 +20,7 @@ export default [ fetch: "readonly", CustomEvent: "readonly", MutationObserver: "readonly", + IntersectionObserver: "readonly", Uint32Array: "readonly", Set: "readonly", Map: "readonly", diff --git a/website/app.js b/website/app.js index cb55753..ba1b763 100644 --- a/website/app.js +++ b/website/app.js @@ -297,6 +297,18 @@ document.addEventListener('DOMContentLoaded', () => { if (badgeDe) { badgeDe.textContent = `v${version} JETZT VERFÜGBAR • ${relativeTimeDe}`; } + + // Update Schema.org structured data dynamically + const schemaScript = document.getElementById('schema-software'); + if (schemaScript) { + try { + const schema = JSON.parse(schemaScript.textContent); + schema.softwareVersion = version; + schemaScript.textContent = JSON.stringify(schema, null, 2); + } catch (err) { + console.warn('Failed to dynamically update schema version:', err); + } + } } catch (e) { console.warn('Failed to fetch dynamic version info:', e); } @@ -370,8 +382,12 @@ document.addEventListener('DOMContentLoaded', () => { const hamburger = document.querySelector('.hamburger'); const navLinks = document.querySelector('.nav-links'); if (hamburger && navLinks) { + // Initialize accessibility attribute + hamburger.setAttribute('aria-expanded', 'false'); + hamburger.addEventListener('click', () => { - navLinks.classList.toggle('open'); + const isOpen = navLinks.classList.toggle('open'); + hamburger.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); }); } diff --git a/website/datenschutz.html b/website/datenschutz.html index 363ea3b..0895eb3 100644 --- a/website/datenschutz.html +++ b/website/datenschutz.html @@ -4,6 +4,7 @@
+ Um ihren technischen Zweck zu erfüllen, benötigt die Browser-Erweiterung bestimmte Berechtigungen. Jede Berechtigung wird ausschließlich für die Kernfunktionalität genutzt: +
++ To fulfill its technical purpose, the browser extension requires certain permissions. Each permission is used exclusively for core functionality: +
+
Zur Sicherheit unserer Nutzer speichern wir fehlgeschlagene Login-Versuche (IP-Adresse und Raum-ID) für maximal 15 Minuten im RAM, um automatisierte Angriffe zu verhindern. Diese Daten werden danach rückstandslos gelöscht.
@@ -115,8 +156,8 @@
Sie haben das Recht auf Auskunft, Berichtigung oder Löschung Ihrer Daten. Da wir jedoch keine personenbezogenen Daten dauerhaft speichern, ist eine Zuordnung zu Ihrer Person in der Regel technisch nicht möglich.
diff --git a/website/impressum.html b/website/impressum.html
index bf7906d..ad36fb0 100644
--- a/website/impressum.html
+++ b/website/impressum.html
@@ -4,6 +4,7 @@
- 6. Ihre Rechte
- 6. Your Rights
+ 7. Ihre Rechte
+ 7. Your Rights