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:
+27
-4
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user