diff --git a/backend/routes/forum.py b/backend/routes/forum.py index 6f312c9..304722c 100644 --- a/backend/routes/forum.py +++ b/backend/routes/forum.py @@ -38,8 +38,11 @@ class ThreadPatch(BaseModel): is_locked: Optional[int] = None class ThreadUpdate(BaseModel): - titel: Optional[str] = None - text: Optional[str] = None + titel: Optional[str] = None + text: Optional[str] = None + thread_lat: Optional[float] = None + thread_lon: Optional[float] = None + thread_ort: Optional[str] = None class PostUpdate(BaseModel): text: str @@ -351,7 +354,10 @@ async def update_thread_content(thread_id: int, data: ThreadUpdate, user=Depends updates.append("titel=?"); vals.append(data.titel.strip()) if data.text is not None: updates.append("text=?"); vals.append(data.text.strip()) - if not updates: return {"ok": True} + # Location immer überschreiben (auch mit None zum Löschen) + updates += ["thread_lat=?", "thread_lon=?", "thread_ort=?"] + vals += [data.thread_lat, data.thread_lon, + data.thread_ort.strip() if data.thread_ort else None] conn.execute(f"UPDATE forum_threads SET {','.join(updates)} WHERE id=?", (*vals, thread_id)) return {"ok": True} diff --git a/backend/static/js/app.js b/backend/static/js/app.js index b088eaf..839e611 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '216'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '217'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const App = (() => { diff --git a/backend/static/js/pages/forum.js b/backend/static/js/pages/forum.js index d97e174..39c1418 100644 --- a/backend/static/js/pages/forum.js +++ b/backend/static/js/pages/forum.js @@ -1067,19 +1067,39 @@ window.Page_forum = (() => {
- + +
+
+ +
`, footer: ` `, }); + + let _picker = null; + setTimeout(() => { + _picker = UI.locationPicker({ containerId: 'forum-edit-location-picker' }); + if (thread.thread_lat && thread.thread_lon) { + _picker.setValue(thread.thread_lat, thread.thread_lon, thread.thread_ort || null); + } + }, 50); + document.getElementById(id)?.addEventListener('submit', async e => { e.preventDefault(); const fd = new FormData(e.target); + const loc = _picker ? _picker.getValue() : { lat: null, lon: null, name: null }; const btn = document.querySelector(`[form="${id}"][type="submit"]`); await UI.asyncButton(btn, async () => { - await API.forum.updateThread(thread.id, { titel: fd.get('titel'), text: fd.get('text') }); + await API.forum.updateThread(thread.id, { + titel: fd.get('titel'), + text: fd.get('text'), + thread_lat: loc.lat ?? null, + thread_lon: loc.lon ?? null, + thread_ort: loc.name ?? null, + }); UI.modal.close(); _loadThreads(true); UI.toast.success('Beitrag aktualisiert.');