diff --git a/netops-todo-node/public/app.js b/netops-todo-node/public/app.js index 1884a9d..5bfc3a5 100644 --- a/netops-todo-node/public/app.js +++ b/netops-todo-node/public/app.js @@ -77,16 +77,18 @@ const $ = id => document.getElementById(id); // ---------- Persistens av UI-valg ---------- function loadPrefs() { - try { - const p = JSON.parse(localStorage.getItem('netops.prefs') || '{}'); - 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. + 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; + // 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) { ${i + 1}
${escapeHtml(t.title)}
+ ${t.location ? `
📍 ${escapeHtml(t.location)}
` : ''}
${t.priority} ${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) ---------- diff --git a/netops-todo-node/public/style.css b/netops-todo-node/public/style.css index fdf1564..c7793d4 100644 --- a/netops-todo-node/public/style.css +++ b/netops-todo-node/public/style.css @@ -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; }