From 32f161483dbaf0fff008bc3a921508f277ae081d Mon Sep 17 00:00:00 2001 From: Florian Zumpe Date: Wed, 17 Jun 2026 16:08:01 +0200 Subject: [PATCH] simplify application and remove window references --- package-lock.json | 4 +- package.json | 2 +- public/css/app.css | 54 ++++-- public/index.html | 32 +-- public/js/api-client.js | 2 +- public/js/app.js | 25 ++- public/js/audio-player.js | 2 +- public/js/bootstrap-loader.js | 12 +- public/js/config.js | 4 +- public/js/distance.js | 2 +- public/js/geolocation.js | 40 ++-- public/js/orientation.js | 8 +- public/js/slideshow.js | 5 +- public/js/vibration.js | 4 +- src/middleware/upload.js | 167 +++++++++------- src/services/gpx.js | 62 ++++-- src/services/routes-service.js | 312 ++++++++++++++++++++++-------- src/services/storage.js | 65 +++++-- test/mobile-navigation-ui.test.js | 24 ++- test/vibration.test.js | 16 +- 20 files changed, 560 insertions(+), 282 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69d7fda..84e81b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wegwichtel-next", - "version": "0.12.8", + "version": "0.12.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wegwichtel-next", - "version": "0.12.8", + "version": "0.12.9", "hasInstallScript": true, "dependencies": { "@file-type/av": "0.2.0", diff --git a/package.json b/package.json index 0b95a70..fa5266e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wegwichtel-next", - "version": "0.12.8", + "version": "0.12.9", "private": true, "description": "GPS-gestützte Lern- und Wanderwege mit GPX, POIs, Bildern und Audioansagen.", "type": "module", diff --git a/public/css/app.css b/public/css/app.css index a5b0566..1f5bc8f 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -99,7 +99,7 @@ button, padding: .35rem; border-color: rgba(255, 255, 255, .45); border-radius: .45rem; - background: rgba(255, 255, 255, .12); + background: var(--primary-dark); color: #fff; } @@ -289,38 +289,45 @@ button, color: var(--muted); } -.route-facts { +#route-page dl { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; margin: 1rem 0; } -.route-facts div { +#route-page dl > div { padding: .75rem; border-radius: .5rem; background: var(--surface); text-align: center; } -.route-facts dt { +#route-page dt { color: var(--muted); font-size: .8rem; } -.route-facts dd { +#route-page dd { margin: .25rem 0 0; font-weight: 700; } -.route-controls { +#route-page fieldset, +#slideshow > fieldset { + min-width: 0; + border: 0; +} + +#route-page fieldset { display: grid; + padding: 0; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .5rem; margin: 0 0 1rem; } -.route-controls button { +#route-page fieldset button { display: grid; place-items: center; min-width: 0; @@ -334,23 +341,35 @@ button, touch-action: manipulation; } -.route-controls button:focus-visible { +#route-page fieldset button:focus-visible { outline: .2rem solid var(--focus); outline-offset: .15rem; } -.route-controls button:disabled { +#route-page fieldset button:disabled { cursor: default; filter: grayscale(.65); opacity: .42; } -.route-controls img { +#route-page fieldset img { width: 2rem; height: 2rem; pointer-events: none; } +#route-page fieldset > legend, +#slideshow > fieldset > legend { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + #start-route { background: var(--primary); border-color: var(--primary-dark); @@ -386,8 +405,9 @@ button, background: #111; } -#slide-controls { +#slideshow > fieldset { display: grid; + margin: 0; grid-template-columns: var(--icon-button-size) minmax(0, 1fr) var(--icon-button-size); align-items: stretch; gap: .5rem; @@ -396,7 +416,7 @@ button, padding: .65rem; } -#slide-controls .ui-button { +#slideshow > fieldset .ui-button { display: grid; place-items: center; min-width: 0; @@ -405,13 +425,13 @@ button, padding: .45rem; } -#slide-controls .ui-button img { +#slideshow > fieldset .ui-button img { width: 1.2rem; height: 1.2rem; pointer-events: none; } -.slide-meta { +#slideshow > fieldset > div { display: flex; min-width: 0; min-height: var(--icon-button-size); @@ -521,17 +541,17 @@ button, grid-template-columns: minmax(0, 1fr) 3rem; } - .route-facts { + #route-page dl { gap: .35rem; } - .route-facts div { + #route-page dl > div { padding: .6rem .25rem; } } @media (max-width: 22rem) { - .route-facts { + #route-page dl { grid-template-columns: 1fr; } } diff --git a/public/index.html b/public/index.html index 807cfa8..0b1d64d 100644 --- a/public/index.html +++ b/public/index.html @@ -8,8 +8,8 @@ -
-
+
+

Wegwichtel

Der Wegwichtel bereitet Routen und Medien vor.

@@ -31,20 +31,20 @@
-
+

Wegwichtel

-

Standort wird ermittelt.

+

Standort wird für nahe Routen lokal auf diesem Gerät ermittelt.

-
+

Routen in deiner Nähe

    -
    +

    Alle Routen

    @@ -64,7 +64,7 @@
    -
    +

    Stationen

    @@ -99,7 +100,7 @@ -