From 24954cb8937a6c8295cd703be88446decdcdd4ba Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Sat, 16 May 2026 06:10:01 +0000 Subject: [PATCH] fix: kiosk settings button position + opened-item expiry badge consistency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - kiosk: add gear button (⚙) to the left overlay (between ✕ and ↻) so settings are reachable from within kiosk mode without a native Android button. The web button calls showPage('settings'). - kiosk: permanently hide the native Android settings button via setNativeSettingsVisible(false) after overlay injection. Removes the touch bleed-through that caused the camera button tap to open kiosk settings instead of the scan page. - kiosk: closeModal() no longer restores native settings visibility (native button is replaced, must stay hidden) - dashboard opened-items panel: items expired by opened shelf-life but classified as safe by getExpiredSafety (level='ok', e.g. jam, condiments) now show a gentler amber 'Check soon' badge instead of the red ⛔ 'Scaduto!' that was misleading users. Red ⛔ is now reserved for warning/danger safety levels only, consistent with the top banner which already filtered out safe-level expired items. - header: version label corrected to v1.7.13 - translations: added expiry.badge_check_soon (it/en/de) --- assets/js/app.js | 31 +++++++++++++++++++++++++++---- index.html | 2 +- translations/de.json | 3 ++- translations/en.json | 3 ++- translations/it.json | 3 ++- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 169ed5c..ed1486b 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -2499,9 +2499,24 @@ function _injectKioskOverlay() { _kioskBridge.hardReload(); }); + // Settings button — replaces the native Android settings button + const settBtn = document.createElement('button'); + settBtn.id = '_kiosk_settings_btn'; + settBtn.textContent = '\u2699\uFE0F'; + settBtn.title = t('settings.title') || 'Settings'; + settBtn.style.cssText = btnStyle.replace('font-size:15px', 'font-size:16px'); + settBtn.addEventListener('click', (e) => { + e.stopPropagation(); + showPage('settings'); + }); + wrap.appendChild(exitBtn); wrap.appendChild(refBtn); + wrap.appendChild(settBtn); headerLeft.appendChild(wrap); + + // Permanently hide the native Android settings button — replaced by the web overlay button above. + try { _kioskBridge.setNativeSettingsVisible(false); } catch(_) {} } function renderAppliances(appliances) { @@ -3604,8 +3619,16 @@ async function loadDashboard() { if (days !== null && days !== undefined) { let expiryClass, expiryText; if (!isEdible) { - expiryClass = 'opened-expiry-spoiled'; - expiryText = t('expiry.badge_expired'); + // Only show the red ⛔ badge for items that are genuinely dangerous. + // For conserve/condiments classified as safe, use a gentler amber badge. + const spoiledSafety = getExpiredSafety(item, Math.abs(item.days_to_expiry ?? 1)); + if (spoiledSafety.level === 'ok') { + expiryClass = 'opened-expiry-soon'; + expiryText = '\u26A0\uFE0F ' + t('expiry.badge_check_soon'); + } else { + expiryClass = 'opened-expiry-spoiled'; + expiryText = t('expiry.badge_expired'); + } } else if (days > 365) { expiryClass = 'opened-expiry-ok'; expiryText = t('expiry.badge_stable'); @@ -4887,8 +4910,8 @@ function showItemDetail(inventoryId, productId) { function closeModal() { document.getElementById('modal-overlay').style.display = 'none'; clearMoveModalTimer(); - // Restore native kiosk settings button visibility - try { if (typeof _kioskBridge !== 'undefined') _kioskBridge.setNativeSettingsVisible(true); } catch (_) {} + // Native kiosk settings button is permanently replaced by the web overlay button — keep hidden. + try { if (typeof _kioskBridge !== 'undefined') _kioskBridge.setNativeSettingsVisible(false); } catch (_) {} _cancelScaleAutoConfirm(false); _scaleRecipeAutoFillPaused = false; _scaleUserDismissed = false; diff --git a/index.html b/index.html index 031884d..5b1cb1d 100644 --- a/index.html +++ b/index.html @@ -67,7 +67,7 @@

- EverShelfv1.7.12 + EverShelfv1.7.13

diff --git a/translations/de.json b/translations/de.json index 337806d..8dbde5c 100644 --- a/translations/de.json +++ b/translations/de.json @@ -717,7 +717,8 @@ "opened_suffix": "— Zu lange geöffnet!", "opened_suffix_ok": "— Geöffnet (noch ok)", "opened_suffix_warning": "— Geöffnet (erst prüfen)", - "days_compact": "{n}T" + "days_compact": "{n}T", + "badge_check_soon": "Bald prüfen" }, "status": { "ok": "OK", diff --git a/translations/en.json b/translations/en.json index 1cb474a..f3ff1b6 100644 --- a/translations/en.json +++ b/translations/en.json @@ -717,7 +717,8 @@ "opened_suffix": "— Opened too long!", "opened_suffix_ok": "— Opened (still ok)", "opened_suffix_warning": "— Opened (check first)", - "days_compact": "{n}d" + "days_compact": "{n}d", + "badge_check_soon": "Check soon" }, "status": { "ok": "OK", diff --git a/translations/it.json b/translations/it.json index 6bbff69..ee3de8b 100644 --- a/translations/it.json +++ b/translations/it.json @@ -717,7 +717,8 @@ "opened_suffix": "— Aperto da troppo tempo!", "opened_suffix_ok": "— Aperto (ancora ok)", "opened_suffix_warning": "— Aperto (controlla)", - "days_compact": "{n}gg" + "days_compact": "{n}gg", + "badge_check_soon": "Controlla presto" }, "status": { "ok": "OK",