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
+25 -2
View File
@@ -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) {
// 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;
+1 -1
View File
@@ -67,7 +67,7 @@
<!-- Title — left-aligned; grows to fill space -->
<div class="header-title-wrap">
<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>
<!-- Update badge — shown alongside title, never replaces it -->
<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_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",
+2 -1
View File
@@ -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",
+2 -1
View File
@@ -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",