From 047177c88bf27e6956fa1134660cab911ce1da16 Mon Sep 17 00:00:00 2001 From: Arne Baeumler Date: Sun, 7 Jun 2026 19:43:06 +0200 Subject: [PATCH] feat: localize ui and remove demo mode --- src/server/request-handler.ts | 208 +++++++++++++++++----------------- 1 file changed, 102 insertions(+), 106 deletions(-) diff --git a/src/server/request-handler.ts b/src/server/request-handler.ts index 5eae7a7..529a2da 100644 --- a/src/server/request-handler.ts +++ b/src/server/request-handler.ts @@ -33,7 +33,7 @@ function resolveDavUrlFromShareUrl(shareUrl: string): string { return `${url.origin}/public.php/dav/files/${davShare[1]}/`; } - throw new Error("Bitte einen öffentlichen Nextcloud-Share-Link einfügen."); + throw new Error("Please enter a public Nextcloud share link."); } async function proxyUpstream(url: string, init?: RequestInit) { @@ -47,45 +47,6 @@ async function proxyUpstream(url: string, init?: RequestInit) { }; } -const demoPhotos: Photo[] = [ - { - id: "demo-1", - name: "berlin-brandenburg-gate.jpg", - latitude: 52.516275, - longitude: 13.377704, - capturedAt: "2026-06-07T08:20:00.000Z", - thumbUrl: - "https://images.unsplash.com/photo-1467269204594-9661b134dd2b?auto=format&fit=crop&w=240&q=60", - fullUrl: - "https://images.unsplash.com/photo-1467269204594-9661b134dd2b?auto=format&fit=crop&w=1600&q=80", - source: "demo" - }, - { - id: "demo-2", - name: "museum-island.jpg", - latitude: 52.5169, - longitude: 13.4015, - capturedAt: "2026-06-07T08:42:00.000Z", - thumbUrl: - "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?auto=format&fit=crop&w=240&q=60", - fullUrl: - "https://images.unsplash.com/photo-1477959858617-67f85cf4f1df?auto=format&fit=crop&w=1600&q=80", - source: "demo" - }, - { - id: "demo-3", - name: "alexanderplatz.jpg", - latitude: 52.521918, - longitude: 13.413215, - capturedAt: "2026-06-07T09:05:00.000Z", - thumbUrl: - "https://images.unsplash.com/photo-1494526585095-c41746248156?auto=format&fit=crop&w=240&q=60", - fullUrl: - "https://images.unsplash.com/photo-1494526585095-c41746248156?auto=format&fit=crop&w=1600&q=80", - source: "demo" - } -]; - function htmlPage(): string { return ` @@ -228,6 +189,24 @@ function htmlPage(): string { padding: 10px 14px; font: inherit; cursor: pointer; + display: inline-flex; + align-items: center; + gap: 8px; + } + + .button-icon { + width: 1em; + height: 1em; + display: inline-flex; + align-items: center; + justify-content: center; + flex: 0 0 auto; + } + + .button-icon svg { + display: block; + width: 100%; + height: 100%; } .primary { @@ -354,6 +333,15 @@ function htmlPage(): string { font-size: 0.82rem; } + .empty-state { + padding: 14px; + border-radius: 14px; + border: 1px dashed rgba(15, 23, 42, 0.16); + color: var(--muted); + background: rgba(255, 255, 255, 0.45); + text-align: center; + } + main { position: relative; min-height: 0; @@ -464,33 +452,48 @@ function htmlPage(): string {

mapy-mg

-

Fotos laden, EXIF lokal im Browser auslesen und auf OpenStreetMap anzeigen.

+

Load photos, read EXIF locally in the browser, and show them on OpenStreetMap.

-
Client-only Import · kein Bildspeicher auf dem Server
+
Client-side import · no image storage on the server
-
Hover: Thumbnail · Klick: Vollbild · Route: zeitlich sortiert
+
Hover: thumbnail · click: fullscreen · route: time sorted
@@ -520,8 +525,15 @@ function htmlPage(): string {