diff --git a/app.css b/app.css index c19d428..32be8f7 100644 --- a/app.css +++ b/app.css @@ -352,6 +352,30 @@ body { border-color: #fff; } +/* Auswahl-Mode in der Dokumenten-Liste (PDFs etc.) */ +.doc-item .doc-check { + display: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: transparent; + border: 2px solid #888; + color: transparent; + font-size: 14px; + font-weight: bold; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.doc-list.selecting .doc-item .doc-check { display: flex; } +.doc-list.selecting .doc-item .doc-open { pointer-events: none; opacity: 0.4; } +.doc-list.selecting .doc-item.selected { background: rgba(90,176,255,0.15); outline: 2px solid #5ab0ff; } +.doc-list.selecting .doc-item.selected .doc-check { + background: #5ab0ff; + border-color: #5ab0ff; + color: #fff; +} + /* Sticky Aktions-Bar am unteren Bildschirmrand */ .select-bar { position: fixed; diff --git a/app.js b/app.js index 8f71bdb..a137082 100644 --- a/app.js +++ b/app.js @@ -45,6 +45,9 @@ function setBack(visible, hash) { const modalStack = []; let _skipNextPopstate = false; let _lastBackAt = 0; +// Aktiver Select-Mode-Cleanup: wird von popstate gerufen, damit Android-Back +// eine laufende Mehrfachauswahl beendet statt die Seite zu verlassen. +let selectModeCleanup = null; function pushModal(el, cleanup) { modalStack.push({ el, cleanup: cleanup || null }); @@ -83,6 +86,12 @@ window.addEventListener('popstate', () => { try { top.cleanup && top.cleanup(); } catch {} return; } + if (selectModeCleanup) { + const fn = selectModeCleanup; + selectModeCleanup = null; + try { fn(); } catch {} + return; + } if (isTopLevelHash(location.hash)) { const now = Date.now(); if (now - _lastBackAt < 2000) return; @@ -535,7 +544,7 @@ router.on('/orders/:id', async (args) => {