Feature: Ratings, Lightbox, Forum-Standort, Notifications, Routen-Recording, Chat-Picker
- Bewertungssystem (ratings.py): Sterne für Sitter/Walks/Places/Routen - Admin: Server-Log-Viewer + OSM-Cache-Statistiken - Chat: "Neue Nachricht"-Button mit Freundesliste-Picker - Forum: 5 neue Kategorien, Standorteingabe (locationPicker), Absende-Toast, Lightbox - Freunde: Aktivitäts-Filter (Chips), Freundschaftsanfrage → In-App-Notification - Sitter: locationPicker statt manuelle Koordinateneingabe + ratingStars - Tagebuch: Bilder-Lightbox im Detail-View, iOS-Modal-Header-Fix (90svh) - Routen: Start/Stopp-Button wechselt Zustand, nutzt Page_map.isRecording() - Benachrichtigungen: Delete-Button sichtbar, typ-basierte Navigation, Toast-Feedback - OSM: globales Semaphore + 429-Retry-Logic; Scheduler: München-Umland, täglich - SW by-v225, APP_VER 202
This commit is contained in:
parent
aa70a838f2
commit
e56183b642
21 changed files with 648 additions and 175 deletions
|
|
@ -17,6 +17,8 @@ window.Page_routes = (() => {
|
|||
let _sortBy = 'newest';
|
||||
let _onlyMine = false;
|
||||
|
||||
let _isRecording = false;
|
||||
|
||||
// 'mine' | 'discover'
|
||||
let _browseMode = 'mine';
|
||||
|
||||
|
|
@ -57,7 +59,7 @@ window.Page_routes = (() => {
|
|||
}
|
||||
}
|
||||
|
||||
function refresh() { _loadData(); }
|
||||
function refresh() { _syncRecBtn(); _loadData(); }
|
||||
function onDogChange() {}
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
|
@ -132,8 +134,16 @@ window.Page_routes = (() => {
|
|||
document.getElementById('rk-view-list').addEventListener('click', () => _switchView('list'));
|
||||
document.getElementById('rk-view-map').addEventListener('click', () => _switchView('map'));
|
||||
document.getElementById('rk-rec-btn').addEventListener('click', () => {
|
||||
App.navigate('map');
|
||||
setTimeout(() => window.Page_map?.startRecording?.(), 600);
|
||||
if (_isRecording) {
|
||||
_isRecording = false;
|
||||
_syncRecBtn();
|
||||
window.Page_map?.stopRecording?.();
|
||||
} else {
|
||||
_isRecording = true;
|
||||
_syncRecBtn();
|
||||
App.navigate('map');
|
||||
setTimeout(() => window.Page_map?.startRecording?.(), 600);
|
||||
}
|
||||
});
|
||||
document.getElementById('rk-import-input').addEventListener('change', e => {
|
||||
const file = e.target.files?.[0];
|
||||
|
|
@ -159,6 +169,22 @@ window.Page_routes = (() => {
|
|||
document.getElementById('rk-mode-discover').addEventListener('click', () => _setBrowseMode('discover'));
|
||||
}
|
||||
|
||||
function _syncRecBtn() {
|
||||
// Falls Page_map bereits initialisiert ist, echten State abfragen
|
||||
if (window.Page_map?.isRecording) {
|
||||
_isRecording = window.Page_map.isRecording();
|
||||
}
|
||||
const btn = document.getElementById('rk-rec-btn');
|
||||
if (!btn) return;
|
||||
if (_isRecording) {
|
||||
btn.className = 'btn btn-danger btn-sm rk-rec-btn rk-rec-btn--active';
|
||||
btn.innerHTML = UI.icon('stop-circle') + ' Stopp';
|
||||
} else {
|
||||
btn.className = 'btn btn-primary btn-sm rk-rec-btn';
|
||||
btn.innerHTML = UI.icon('path') + ' Aufzeichnen';
|
||||
}
|
||||
}
|
||||
|
||||
function _setBrowseMode(mode) {
|
||||
_browseMode = mode;
|
||||
document.getElementById('rk-mode-mine')?.classList.toggle('active', mode === 'mine');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue