Feltmodus: dagsplan først med lokasjon per oppgave

Feltmodus hopper til dagsplan-visning og legger dagsplan-kolonnen øverst
(backlog under). Hver plan-oppgave viser lokasjon under tittelen. Mobil ved
første besøk lander på dagsplanen automatisk.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jon Vanvik 2026-06-15 14:07:27 +02:00
parent bdeb6254b9
commit 7287f33e47
2 changed files with 20 additions and 9 deletions

View file

@ -77,16 +77,18 @@ const $ = id => document.getElementById(id);
// ---------- Persistens av UI-valg ----------
function loadPrefs() {
try {
const p = JSON.parse(localStorage.getItem('netops.prefs') || '{}');
let p = {};
try { p = JSON.parse(localStorage.getItem('netops.prefs') || '{}') || {}; }
catch { /* ignorer korrupt localStorage */ }
if (p.filters) Object.assign(state.filters, p.filters);
if (p.sort) state.sort = p.sort;
if (VIEWS.includes(p.view)) state.view = p.view;
if (typeof p.fieldMode === 'boolean') state.fieldMode = p.fieldMode;
} catch { /* ignorer korrupt localStorage */ }
// Slå på feltmodus automatisk på små skjermer hvis brukeren ikke har valgt selv.
// Slå på feltmodus automatisk på små skjermer hvis brukeren ikke har valgt selv,
// og land på dagsplanen hvis det er første besøk (ingen lagret visning).
if (localStorage.getItem('netops.fieldModeSet') !== '1' && window.innerWidth < 640) {
state.fieldMode = true;
if (!VIEWS.includes(p.view)) state.view = 'plan';
}
}
function savePrefs() {
@ -873,6 +875,7 @@ function renderPlanItem(t, i, own = true) {
<span class="plan-num">${i + 1}</span>
<div class="plan-item-main">
<div class="plan-item-title" onclick="openEdit('${t.id}')">${escapeHtml(t.title)}</div>
${t.location ? `<div class="plan-item-loc">📍 ${escapeHtml(t.location)}</div>` : ''}
<div class="plan-item-meta">
<span class="badge prio-${t.priority}">${t.priority}</span>
${catBadge(t)}
@ -1367,9 +1370,12 @@ function applyFieldMode() {
function toggleFieldMode() {
state.fieldMode = !state.fieldMode;
localStorage.setItem('netops.fieldModeSet', '1'); // brukeren har valgt selv
// I felt vil man ha dagsplanen først; hopp dit når feltmodus slås på.
if (state.fieldMode) state.view = 'plan';
savePrefs();
applyFieldMode();
toast(state.fieldMode ? 'Feltmodus på' : 'Feltmodus av');
renderView();
toast(state.fieldMode ? 'Feltmodus på — viser dagsplan' : 'Feltmodus av');
}
// ---------- Navnevalg (cookie-auth) ----------

View file

@ -371,6 +371,7 @@ tbody tr.status-done .task-title { text-decoration: line-through; }
.plan-item-main { flex: 1; min-width: 0; }
.plan-item-title { font-size: 13px; font-weight: 500; cursor: pointer; }
.plan-item-title:hover { color: var(--accent); }
.plan-item-loc { font-family: var(--mono); font-size: 12px; color: var(--accent); margin-top: 2px; }
.plan-item-meta { display: flex; gap: 8px; align-items: center; margin-top: 3px;
font-size: 11px; font-family: var(--mono); color: var(--text-faint); flex-wrap: wrap; }
.plan-item-actions { display: flex; gap: 2px; flex-shrink: 0; }
@ -453,6 +454,10 @@ body.field-mode input[type="date"] { min-height: 44px; font-size: 15px; }
/* Tavle og planner i én kolonne for tommelvennlig scrolling */
body.field-mode .board { grid-template-columns: 1fr; }
body.field-mode .planner { grid-template-columns: 1fr; }
/* I felt vil man ha dagsplanen øverst, backlogen under */
body.field-mode .plan-today { order: -1; }
body.field-mode .plan-item-loc { font-size: 14px; }
body.field-mode .plan-item-title { font-size: 15px; }
body.field-mode .card { padding: 14px; }
body.field-mode .card-title { font-size: 15px; }
body.field-mode .avail-row, body.field-mode .plan-item { padding: 12px; }