fix: kiosk settings button position + opened-item expiry badge consistency

- 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)
This commit is contained in:
dadaloop82
2026-05-16 06:10:01 +00:00
parent da4bd635db
commit 24954cb893
5 changed files with 34 additions and 8 deletions
+27 -4
View File
@@ -2499,9 +2499,24 @@ function _injectKioskOverlay() {
_kioskBridge.hardReload(); _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(exitBtn);
wrap.appendChild(refBtn); wrap.appendChild(refBtn);
wrap.appendChild(settBtn);
headerLeft.appendChild(wrap); 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) { function renderAppliances(appliances) {
@@ -3604,8 +3619,16 @@ async function loadDashboard() {
if (days !== null && days !== undefined) { if (days !== null && days !== undefined) {
let expiryClass, expiryText; let expiryClass, expiryText;
if (!isEdible) { if (!isEdible) {
expiryClass = 'opened-expiry-spoiled'; // Only show the red ⛔ badge for items that are genuinely dangerous.
expiryText = t('expiry.badge_expired'); // 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) { } else if (days > 365) {
expiryClass = 'opened-expiry-ok'; expiryClass = 'opened-expiry-ok';
expiryText = t('expiry.badge_stable'); expiryText = t('expiry.badge_stable');
@@ -4887,8 +4910,8 @@ function showItemDetail(inventoryId, productId) {
function closeModal() { function closeModal() {
document.getElementById('modal-overlay').style.display = 'none'; document.getElementById('modal-overlay').style.display = 'none';
clearMoveModalTimer(); clearMoveModalTimer();
// Restore native kiosk settings button visibility // Native kiosk settings button is permanently replaced by the web overlay button — keep hidden.
try { if (typeof _kioskBridge !== 'undefined') _kioskBridge.setNativeSettingsVisible(true); } catch (_) {} try { if (typeof _kioskBridge !== 'undefined') _kioskBridge.setNativeSettingsVisible(false); } catch (_) {}
_cancelScaleAutoConfirm(false); _cancelScaleAutoConfirm(false);
_scaleRecipeAutoFillPaused = false; _scaleRecipeAutoFillPaused = false;
_scaleUserDismissed = false; _scaleUserDismissed = false;
+1 -1
View File
@@ -67,7 +67,7 @@
<!-- Title — left-aligned; grows to fill space --> <!-- Title — left-aligned; grows to fill space -->
<div class="header-title-wrap"> <div class="header-title-wrap">
<h1 class="header-title" onclick="showPage('dashboard')"> <h1 class="header-title" onclick="showPage('dashboard')">
<img src="assets/img/logo/logo_icon.png" alt="" class="header-logo-icon" aria-hidden="true" /><span data-i18n="nav.title">EverShelf</span><span class="header-version">v1.7.12</span> <img src="assets/img/logo/logo_icon.png" alt="" class="header-logo-icon" aria-hidden="true" /><span data-i18n="nav.title">EverShelf</span><span class="header-version">v1.7.13</span>
</h1> </h1>
<!-- Update badge — shown alongside title, never replaces it --> <!-- Update badge — shown alongside title, never replaces it -->
<span class="header-update-badge" id="header-update-badge" style="display:none"></span> <span class="header-update-badge" id="header-update-badge" style="display:none"></span>
+2 -1
View File
@@ -717,7 +717,8 @@
"opened_suffix": "— Zu lange geöffnet!", "opened_suffix": "— Zu lange geöffnet!",
"opened_suffix_ok": "— Geöffnet (noch ok)", "opened_suffix_ok": "— Geöffnet (noch ok)",
"opened_suffix_warning": "— Geöffnet (erst prüfen)", "opened_suffix_warning": "— Geöffnet (erst prüfen)",
"days_compact": "{n}T" "days_compact": "{n}T",
"badge_check_soon": "Bald prüfen"
}, },
"status": { "status": {
"ok": "OK", "ok": "OK",
+2 -1
View File
@@ -717,7 +717,8 @@
"opened_suffix": "— Opened too long!", "opened_suffix": "— Opened too long!",
"opened_suffix_ok": "— Opened (still ok)", "opened_suffix_ok": "— Opened (still ok)",
"opened_suffix_warning": "— Opened (check first)", "opened_suffix_warning": "— Opened (check first)",
"days_compact": "{n}d" "days_compact": "{n}d",
"badge_check_soon": "Check soon"
}, },
"status": { "status": {
"ok": "OK", "ok": "OK",
+2 -1
View File
@@ -717,7 +717,8 @@
"opened_suffix": "— Aperto da troppo tempo!", "opened_suffix": "— Aperto da troppo tempo!",
"opened_suffix_ok": "— Aperto (ancora ok)", "opened_suffix_ok": "— Aperto (ancora ok)",
"opened_suffix_warning": "— Aperto (controlla)", "opened_suffix_warning": "— Aperto (controlla)",
"days_compact": "{n}gg" "days_compact": "{n}gg",
"badge_check_soon": "Controlla presto"
}, },
"status": { "status": {
"ok": "OK", "ok": "OK",