From c5b873c63a0a6babd6b99de5cdc0bb61ec2fafb4 Mon Sep 17 00:00:00 2001 From: kodi Date: Mon, 9 Mar 2026 18:00:43 +0100 Subject: [PATCH] feat (ui): aired en airing verplaatst --- app/static/app.js | 46 ++++++++++++++++++++++++++++++++++++- app/static/styles.css | 22 ++++++++++++++++++ data/session_state.sqlite3 | Bin 225280 -> 274432 bytes 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/app/static/app.js b/app/static/app.js index 3ccbd3d..270d1ae 100644 --- a/app/static/app.js +++ b/app/static/app.js @@ -180,6 +180,36 @@ return title; } + function parseIsoDateOnly(value) { + const text = (value || "").toString().trim(); + const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(text); + if (!m) return null; + const year = Number(m[1]); + const month = Number(m[2]); + const day = Number(m[3]); + if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) return null; + const dt = new Date(year, month - 1, day); + if (Number.isNaN(dt.getTime())) return null; + return dt; + } + + function formatDateDdMmYyyy(value) { + const dt = parseIsoDateOnly(value); + if (!dt) return ""; + const day = String(dt.getDate()).padStart(2, "0"); + const month = String(dt.getMonth() + 1).padStart(2, "0"); + const year = dt.getFullYear(); + return `${day}-${month}-${year}`; + } + + function isFutureAiredDate(value) { + const aired = parseIsoDateOnly(value); + if (!aired) return false; + const today = new Date(); + const todayOnly = new Date(today.getFullYear(), today.getMonth(), today.getDate()); + return aired.getTime() > todayOnly.getTime(); + } + function basename(pathText) { const text = (pathText || "").toString(); const normalized = text.replace(/\\/g, "/"); @@ -649,7 +679,21 @@ const li = document.createElement("li"); const left = document.createElement("span"); - left.textContent = episode.label || `${episode.season_number}x${episode.episode_number} ${episode.title}`; + left.className = "episode-main"; + const title = document.createElement("div"); + title.className = "episode-title"; + title.textContent = compactEpisodeText(episode); + left.appendChild(title); + + const formattedDate = formatDateDdMmYyyy(episode.aired); + if (formattedDate) { + const dateLine = document.createElement("div"); + const future = isFutureAiredDate(episode.aired); + dateLine.className = future ? "episode-date episode-date-future" : "episode-date"; + dateLine.textContent = `${future ? "Airing" : "Aired"} ${formattedDate}`; + left.appendChild(dateLine); + } + const right = document.createElement("div"); right.appendChild(makeBtn("Add", async () => { const payload = { diff --git a/app/static/styles.css b/app/static/styles.css index 9e0b46c..0741c15 100644 --- a/app/static/styles.css +++ b/app/static/styles.css @@ -337,6 +337,28 @@ button.secondary { height: 100%; } +#episodesList .episode-main { + display: flex; + flex-direction: column; + min-width: 0; +} + +#episodesList .episode-title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#episodesList .episode-date { + margin-top: 2px; + font-size: 12px; + color: var(--text-muted); +} + +#episodesList .episode-date-future { + color: var(--button-primary-bg); +} + .badge { display: inline-block; font-size: 11px; diff --git a/data/session_state.sqlite3 b/data/session_state.sqlite3 index 1a892b9ae956c5a99267607c31a4982f6ac3a466..b869528817ea95ada4b622bc08fddd732e5948cb 100644 GIT binary patch delta 37574 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 fE}Lj95u^ zN=b0>PiEjh#ebFmHUAd=2S5e;`B(B!=AQ>tQqDhp@_xobAuhgt27V9zJN(=E{_$<$ z>*u? z*RwD)Hn5nUdY&Yu6z{FU<#>m&pz}E|Ob~E4h-aO`FMgY!zqXqx~