Navigation an iOS-Tabs angleichen, Benachrichtigungscenter, Einfacher Modus
Phase 2-4 der WebApp-Angleichung an die iOS-App: - Navigation: Favoriten und Störungen sind jetzt eigene Top-Level-Tabs (Desktop-Tableiste + mobile Bottom-Nav) statt nur über das Mehr-Grid bzw. den Stern im Header erreichbar. Neue Header-Icons für Einstellungen (⚙) und Benachrichtigungen (🔔, mit rotem Punkt bei ungelesenen Einträgen). "Mehr" ist jetzt schlanker (In der Nähe, Tickets, Verlauf, App-Info mit Verbindungstest gegen /health/full) und die Sprachauswahl in einen neuen eigenen "Einstellungen"-Tab umgezogen. - Benachrichtigungscenter (js/notifications.js, neu): persistenter Verlauf über IndexedDB, sowohl vom Service Worker (eingehende Web-Push- Nachrichten, auch bei geschlossenem Tab) als auch von der Seite selbst (Störungs-Matches bei Favoriten, Fahrtalarm) beschrieben. Neuer "Benachrichtigungen"-Tab zeigt den Verlauf, Badge am Glocken-Icon zeigt ungelesene Einträge, per postMessage vom Service Worker live aktualisiert. - Einfacher Modus: neuer Toggle im Einstellungen-Tab, persistiert in localStorage, setzt eine .simple-mode-Klasse auf <html> - moderat größere Schrift plus Ausblenden von Verkehrsmittel-Filter/Fahrrad-Option/ "Zwischenhalt hinzufügen" im Routenplaner, analog zur iOS-App (bewusst keine Accessibility-Schriftgrößenstufe, die ist für Screenreader gedacht). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
This commit is contained in:
8 files changed
+455
-12
No files matched your search
+38
@@ -23,6 +23,8 @@ const I18N = (() => {
|
||||
'nav.route': 'Route',
|
||||
'nav.map': 'Karte',
|
||||
'nav.more': 'Mehr',
|
||||
'nav.settings': 'Einstellungen',
|
||||
'nav.notifications': 'Benachrichtigungen',
|
||||
'common.optional': 'OPTIONAL',
|
||||
'common.showAll': 'Alle anzeigen',
|
||||
'common.live': 'LIVE',
|
||||
@@ -124,10 +126,27 @@ const I18N = (() => {
|
||||
'more.nearbyText': 'Haltestellen in deiner Umgebung',
|
||||
'more.disruptionsText': 'Ortsbezogen & netzweit',
|
||||
'more.faresText': 'Preise & wo kaufen',
|
||||
'more.notificationsText': 'Verlauf & Push-Status',
|
||||
'more.settingsText': 'Sprache, Anzeige & mehr',
|
||||
'more.historyEyebrow': 'VERLAUF',
|
||||
'more.historyTitle': 'Zuletzt gesucht',
|
||||
'more.langEyebrow': 'SPRACHE / LANGUAGE',
|
||||
'more.langTitle': 'Sprache',
|
||||
'more.aboutEyebrow': 'ÜBER',
|
||||
'more.aboutTitle': 'App-Info',
|
||||
'more.backend': 'Backend',
|
||||
'more.testConnection': 'Verbindung testen',
|
||||
'more.connectionOk': 'Erreichbar',
|
||||
'more.connectionError': 'Nicht erreichbar',
|
||||
'notifications.eyebrow': 'VERLAUF',
|
||||
'notifications.title': 'Benachrichtigungen',
|
||||
'notifications.text': 'Alles, was zuletzt eine Push- oder In-App-Benachrichtigung ausgelöst hat.',
|
||||
'notifications.empty': 'Noch keine Benachrichtigungen.',
|
||||
'settings.eyebrow': 'EINSTELLUNGEN',
|
||||
'settings.text': 'Anzeige, Sprache und Benachrichtigungen anpassen.',
|
||||
'settings.displayTitle': 'Anzeige',
|
||||
'settings.simpleModeTitle': 'Einfacher Modus',
|
||||
'settings.simpleModeText': 'Größere Schrift, weniger Optionen auf einen Blick.',
|
||||
'search.noResults': 'Keine Treffer',
|
||||
'search.recentSearches': 'Zuletzt gesucht',
|
||||
'search.resultsLabel': 'Suchergebnisse',
|
||||
@@ -144,6 +163,8 @@ const I18N = (() => {
|
||||
'nav.route': 'Route',
|
||||
'nav.map': 'Map',
|
||||
'nav.more': 'More',
|
||||
'nav.settings': 'Settings',
|
||||
'nav.notifications': 'Notifications',
|
||||
'common.optional': 'OPTIONAL',
|
||||
'common.showAll': 'Show all',
|
||||
'common.live': 'LIVE',
|
||||
@@ -245,10 +266,27 @@ const I18N = (() => {
|
||||
'more.nearbyText': 'Stops around you',
|
||||
'more.disruptionsText': 'Local & network-wide',
|
||||
'more.faresText': 'Prices & where to buy',
|
||||
'more.notificationsText': 'History & push status',
|
||||
'more.settingsText': 'Language, display & more',
|
||||
'more.historyEyebrow': 'HISTORY',
|
||||
'more.historyTitle': 'Recently searched',
|
||||
'more.langEyebrow': 'SPRACHE / LANGUAGE',
|
||||
'more.langTitle': 'Language',
|
||||
'more.aboutEyebrow': 'ABOUT',
|
||||
'more.aboutTitle': 'App info',
|
||||
'more.backend': 'Backend',
|
||||
'more.testConnection': 'Test connection',
|
||||
'more.connectionOk': 'Reachable',
|
||||
'more.connectionError': 'Unreachable',
|
||||
'notifications.eyebrow': 'HISTORY',
|
||||
'notifications.title': 'Notifications',
|
||||
'notifications.text': 'Everything that recently triggered a push or in-app notification.',
|
||||
'notifications.empty': 'No notifications yet.',
|
||||
'settings.eyebrow': 'SETTINGS',
|
||||
'settings.text': 'Adjust display, language and notifications.',
|
||||
'settings.displayTitle': 'Display',
|
||||
'settings.simpleModeTitle': 'Simple mode',
|
||||
'settings.simpleModeText': 'Larger text, fewer options at a glance.',
|
||||
'search.noResults': 'No results',
|
||||
'search.recentSearches': 'Recently searched',
|
||||
'search.resultsLabel': 'Search results',
|
||||
|
||||
Reference in new issue
Block a user