Compare commits
2 commits
33f550a313
...
8f39c22a7f
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f39c22a7f | |||
| 9deb04c02d |
7 changed files with 62 additions and 15 deletions
|
|
@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request):
|
||||||
raise _HE(404, "Nicht gefunden.")
|
raise _HE(404, "Nicht gefunden.")
|
||||||
return _media_response(filepath)
|
return _media_response(filepath)
|
||||||
|
|
||||||
APP_VER = "883" # muss mit APP_VER in app.js übereinstimmen
|
APP_VER = "885" # muss mit APP_VER in app.js übereinstimmen
|
||||||
|
|
||||||
@app.get("/.well-known/assetlinks.json")
|
@app.get("/.well-known/assetlinks.json")
|
||||||
async def assetlinks():
|
async def assetlinks():
|
||||||
|
|
|
||||||
|
|
@ -3563,7 +3563,7 @@ html.modal-open {
|
||||||
padding-top: 52px;
|
padding-top: 52px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
/* Liste: feste Breite links, scrollbar */
|
/* Liste: feste Breite links, scrollbar unsichtbar */
|
||||||
#walks-list-view {
|
#walks-list-view {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
width: 380px;
|
width: 380px;
|
||||||
|
|
@ -3571,6 +3571,10 @@ html.modal-open {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
border-right: 1px solid var(--c-border);
|
border-right: 1px solid var(--c-border);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
}
|
||||||
|
#walks-list-view::-webkit-scrollbar {
|
||||||
|
display: none; /* Chrome / Safari / macOS */
|
||||||
}
|
}
|
||||||
/* Karte: Rest des Platzes, sticky */
|
/* Karte: Rest des Platzes, sticky */
|
||||||
#walks-map-view {
|
#walks-map-view {
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,9 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
|
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
|
||||||
<link rel="stylesheet" href="/css/design-system.css?v=883">
|
<link rel="stylesheet" href="/css/design-system.css?v=885">
|
||||||
<link rel="stylesheet" href="/css/layout.css?v=883">
|
<link rel="stylesheet" href="/css/layout.css?v=885">
|
||||||
<link rel="stylesheet" href="/css/components.css?v=883">
|
<link rel="stylesheet" href="/css/components.css?v=885">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
|
@ -583,10 +583,10 @@
|
||||||
<div id="modal-container"></div>
|
<div id="modal-container"></div>
|
||||||
|
|
||||||
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
||||||
<script src="/js/api.js?v=883"></script>
|
<script src="/js/api.js?v=885"></script>
|
||||||
<script src="/js/ui.js?v=883"></script>
|
<script src="/js/ui.js?v=885"></script>
|
||||||
<script src="/js/app.js?v=883"></script>
|
<script src="/js/app.js?v=885"></script>
|
||||||
<script src="/js/worlds.js?v=883"></script>
|
<script src="/js/worlds.js?v=885"></script>
|
||||||
|
|
||||||
<!-- Feature-Seiten werden lazy geladen -->
|
<!-- Feature-Seiten werden lazy geladen -->
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '883'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '885'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
||||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
||||||
|
|
|
||||||
|
|
@ -1582,10 +1582,14 @@ window.Page_map = (() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function _acquireWakeLock() {
|
async function _acquireWakeLock() {
|
||||||
if (!('wakeLock' in navigator)) return;
|
if (!('wakeLock' in navigator) || _wakeLock) return;
|
||||||
try {
|
try {
|
||||||
_wakeLock = await navigator.wakeLock.request('screen');
|
_wakeLock = await navigator.wakeLock.request('screen');
|
||||||
_wakeLock.addEventListener('release', () => { _wakeLock = null; });
|
_wakeLock.addEventListener('release', () => {
|
||||||
|
_wakeLock = null;
|
||||||
|
// OS hat Lock entzogen → sofort neu anfordern wenn noch aufzeichnet
|
||||||
|
if (_recActive) _acquireWakeLock();
|
||||||
|
});
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -763,7 +763,8 @@ window.Page_routes = (() => {
|
||||||
|
|
||||||
_recPolyline = L.polyline([], { color: '#ef4444', weight: 5, opacity: 0.9 }).addTo(_recMap);
|
_recPolyline = L.polyline([], { color: '#ef4444', weight: 5, opacity: 0.9 }).addTo(_recMap);
|
||||||
|
|
||||||
navigator.wakeLock?.request('screen').then(wl => { _recWakeLock = wl; }).catch(() => {});
|
await _recAcquireWakeLock();
|
||||||
|
document.addEventListener('visibilitychange', _recOnVisibility);
|
||||||
|
|
||||||
_recWatchId = navigator.geolocation.watchPosition(pos => {
|
_recWatchId = navigator.geolocation.watchPosition(pos => {
|
||||||
const lat = pos.coords.latitude, lon = pos.coords.longitude;
|
const lat = pos.coords.latitude, lon = pos.coords.longitude;
|
||||||
|
|
@ -852,6 +853,24 @@ window.Page_routes = (() => {
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function _recAcquireWakeLock() {
|
||||||
|
if (!('wakeLock' in navigator) || _recWakeLock) return;
|
||||||
|
try {
|
||||||
|
_recWakeLock = await navigator.wakeLock.request('screen');
|
||||||
|
_recWakeLock.addEventListener('release', () => {
|
||||||
|
_recWakeLock = null;
|
||||||
|
// OS hat Lock entzogen (Anruf, Tab-Wechsel etc.) → sofort neu anfordern
|
||||||
|
if (_recActive) _recAcquireWakeLock();
|
||||||
|
});
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _recOnVisibility() {
|
||||||
|
if (_recActive && document.visibilityState === 'visible' && !_recWakeLock) {
|
||||||
|
_recAcquireWakeLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function _stopRecInOvl(save) {
|
async function _stopRecInOvl(save) {
|
||||||
if (!_recActive && save) return;
|
if (!_recActive && save) return;
|
||||||
_recActive = false;
|
_recActive = false;
|
||||||
|
|
@ -859,6 +878,7 @@ window.Page_routes = (() => {
|
||||||
if (_recTimerInt) { clearInterval(_recTimerInt); _recTimerInt = null; }
|
if (_recTimerInt) { clearInterval(_recTimerInt); _recTimerInt = null; }
|
||||||
if (_recInactTimer){ clearTimeout(_recInactTimer); _recInactTimer = null; }
|
if (_recInactTimer){ clearTimeout(_recInactTimer); _recInactTimer = null; }
|
||||||
if (_recWakeLock) { try { await _recWakeLock.release(); } catch {} _recWakeLock = null; }
|
if (_recWakeLock) { try { await _recWakeLock.release(); } catch {} _recWakeLock = null; }
|
||||||
|
document.removeEventListener('visibilitychange', _recOnVisibility);
|
||||||
_recOvl?.removeEventListener('touchstart', _onRecOvlTouch);
|
_recOvl?.removeEventListener('touchstart', _onRecOvlTouch);
|
||||||
_recOvl?.removeEventListener('pointerdown', _onRecOvlTouch);
|
_recOvl?.removeEventListener('pointerdown', _onRecOvlTouch);
|
||||||
|
|
||||||
|
|
@ -1706,7 +1726,8 @@ window.Page_routes = (() => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// GPS-Watch
|
// GPS-Watch
|
||||||
navigator.wakeLock?.request('screen').then(wl => { _navWakeLock = wl; }).catch(() => {});
|
await _navAcquireWakeLock();
|
||||||
|
document.addEventListener('visibilitychange', _navOnVisibility);
|
||||||
let _navFirstFix = true;
|
let _navFirstFix = true;
|
||||||
_navWatchId = navigator.geolocation.watchPosition(pos => {
|
_navWatchId = navigator.geolocation.watchPosition(pos => {
|
||||||
const { latitude: lat, longitude: lon } = pos.coords;
|
const { latitude: lat, longitude: lon } = pos.coords;
|
||||||
|
|
@ -1852,10 +1873,28 @@ window.Page_routes = (() => {
|
||||||
}, 10000);
|
}, 10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function _navAcquireWakeLock() {
|
||||||
|
if (!('wakeLock' in navigator) || _navWakeLock) return;
|
||||||
|
try {
|
||||||
|
_navWakeLock = await navigator.wakeLock.request('screen');
|
||||||
|
_navWakeLock.addEventListener('release', () => {
|
||||||
|
_navWakeLock = null;
|
||||||
|
if (_navWatchId !== null) _navAcquireWakeLock();
|
||||||
|
});
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _navOnVisibility() {
|
||||||
|
if (_navWatchId !== null && document.visibilityState === 'visible' && !_navWakeLock) {
|
||||||
|
_navAcquireWakeLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function _closeNav() {
|
function _closeNav() {
|
||||||
if (_navWatchId !== null) { navigator.geolocation.clearWatch(_navWatchId); _navWatchId = null; }
|
if (_navWatchId !== null) { navigator.geolocation.clearWatch(_navWatchId); _navWatchId = null; }
|
||||||
if (_navInactTimer) { clearTimeout(_navInactTimer); _navInactTimer = null; }
|
if (_navInactTimer) { clearTimeout(_navInactTimer); _navInactTimer = null; }
|
||||||
if (_navWakeLock) { try { _navWakeLock.release(); } catch {} _navWakeLock = null; }
|
if (_navWakeLock) { try { _navWakeLock.release(); } catch {} _navWakeLock = null; }
|
||||||
|
document.removeEventListener('visibilitychange', _navOnVisibility);
|
||||||
if (_navWalkMeta && _navWalkMeta.trackLen > 1) {
|
if (_navWalkMeta && _navWalkMeta.trackLen > 1) {
|
||||||
const pct = Math.round(_navMaxIdx / (_navWalkMeta.trackLen - 1) * 100);
|
const pct = Math.round(_navMaxIdx / (_navWalkMeta.trackLen - 1) * 100);
|
||||||
if (pct >= 50) {
|
if (pct >= 50) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v883';
|
const CACHE_VERSION = 'by-v885';
|
||||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||||
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue