feat (ui): series onthouden in pulldown menu

This commit is contained in:
kodi
2026-03-09 14:52:36 +01:00
parent 0a294e9bd5
commit 836d89f80e
4 changed files with 67 additions and 18 deletions
+37 -14
View File
@@ -31,6 +31,9 @@
outputBox: document.getElementById("outputBox"), outputBox: document.getElementById("outputBox"),
searchInput: document.getElementById("searchInput"), searchInput: document.getElementById("searchInput"),
searchDropdownBtn: document.getElementById("searchDropdownBtn"), searchDropdownBtn: document.getElementById("searchDropdownBtn"),
searchCombobox: document.getElementById("searchCombobox"),
searchComboboxDropdown: document.getElementById("searchComboboxDropdown"),
rememberedDropdownList: document.getElementById("rememberedDropdownList"),
searchBtn: document.getElementById("searchBtn"), searchBtn: document.getElementById("searchBtn"),
searchResults: document.getElementById("searchResults"), searchResults: document.getElementById("searchResults"),
seriesInfo: document.getElementById("seriesInfo"), seriesInfo: document.getElementById("seriesInfo"),
@@ -330,26 +333,36 @@
}); });
} }
function openRememberedDropdown() {
renderRememberedDropdown();
el.searchComboboxDropdown.classList.remove("hidden");
}
function closeRememberedDropdown() {
el.searchComboboxDropdown.classList.add("hidden");
}
function toggleRememberedDropdown() {
if (el.searchComboboxDropdown.classList.contains("hidden")) {
openRememberedDropdown();
return;
}
closeRememberedDropdown();
}
function renderRememberedDropdown() { function renderRememberedDropdown() {
const query = (el.searchInput.value || "").trim(); const query = (el.searchInput.value || "").trim();
const items = rememberedForQuery(query); const items = rememberedForQuery(query);
el.searchResults.innerHTML = ""; el.rememberedDropdownList.innerHTML = "";
items.forEach((item) => { items.forEach((item) => {
const li = document.createElement("li"); const li = document.createElement("li");
const left = document.createElement("span"); const left = document.createElement("span");
const label = item.display_name || item.name || "(series)"; const label = item.display_name || item.name || "(series)";
left.textContent = label; left.textContent = label;
const right = document.createElement("div");
const tag = document.createElement("span");
tag.className = "badge";
tag.textContent = "Remembered";
right.appendChild(tag);
li.appendChild(left); li.appendChild(left);
li.appendChild(right);
li.addEventListener("click", () => withHandler(() => selectSeries(item), li)); li.addEventListener("click", () => withHandler(() => selectSeries(item), li));
el.searchResults.appendChild(li); el.rememberedDropdownList.appendChild(li);
}); });
} }
@@ -366,6 +379,7 @@
} }
async function selectSeries(item) { async function selectSeries(item) {
closeRememberedDropdown();
state.selectedSeries = item; state.selectedSeries = item;
state.selectedSeriesSummary = null; state.selectedSeriesSummary = null;
el.seriesInfo.textContent = `Selected: ${item.display_name || item.name}`; el.seriesInfo.textContent = `Selected: ${item.display_name || item.name}`;
@@ -470,12 +484,13 @@
const query = (el.searchInput.value || "").trim(); const query = (el.searchInput.value || "").trim();
if (!query || query.length < 2) { if (!query || query.length < 2) {
state.liveSearchItems = []; state.liveSearchItems = [];
renderRememberedDropdown(); el.searchResults.innerHTML = "";
return; return;
} }
const data = await api(`/api/tvdb/search?q=${encodeURIComponent(query)}`); const data = await api(`/api/tvdb/search?q=${encodeURIComponent(query)}`);
state.liveSearchItems = data.items || []; state.liveSearchItems = data.items || [];
renderSearchResults(state.liveSearchItems); renderSearchResults(state.liveSearchItems);
closeRememberedDropdown();
out("Search result", data); out("Search result", data);
} }
@@ -785,10 +800,17 @@
function bindEvents() { function bindEvents() {
el.searchBtn.addEventListener("click", () => withHandler(doSearch, el.searchBtn)); el.searchBtn.addEventListener("click", () => withHandler(doSearch, el.searchBtn));
el.searchInput.addEventListener("focus", renderRememberedDropdown); el.searchInput.addEventListener("focus", openRememberedDropdown);
el.searchInput.addEventListener("click", renderRememberedDropdown); el.searchInput.addEventListener("click", openRememberedDropdown);
el.searchInput.addEventListener("input", renderRememberedDropdown); el.searchInput.addEventListener("input", openRememberedDropdown);
el.searchDropdownBtn.addEventListener("click", renderRememberedDropdown); el.searchDropdownBtn.addEventListener("click", (e) => {
e.stopPropagation();
toggleRememberedDropdown();
});
el.searchCombobox.addEventListener("click", (e) => {
e.stopPropagation();
});
document.addEventListener("click", closeRememberedDropdown);
el.settingsBtn.addEventListener("click", openSettingsModal); el.settingsBtn.addEventListener("click", openSettingsModal);
el.closeSettingsModalBtn.addEventListener("click", closeSettingsModal); el.closeSettingsModalBtn.addEventListener("click", closeSettingsModal);
el.saveSettingsBtn.addEventListener("click", () => withHandler(saveSettings, el.saveSettingsBtn)); el.saveSettingsBtn.addEventListener("click", () => withHandler(saveSettings, el.saveSettingsBtn));
@@ -853,6 +875,7 @@
await loadSettings(); await loadSettings();
await loadRememberedSeries(); await loadRememberedSeries();
renderRememberedDropdown(); renderRememberedDropdown();
closeRememberedDropdown();
await loadSelectedEpisodes(); await loadSelectedEpisodes();
await loadSelectedFiles(); await loadSelectedFiles();
await loadRoots(); await loadRoots();
+21
View File
@@ -120,6 +120,27 @@ body {
padding-right: 8px; padding-right: 8px;
} }
.search-combobox {
position: relative;
}
.combobox-dropdown {
position: absolute;
left: 0;
right: 0;
top: calc(100% - 6px);
z-index: 20;
background: #ffffff;
border: 1px solid #d7dee9;
border-radius: 6px;
box-shadow: 0 8px 22px rgba(15, 23, 42, 0.12);
padding: 6px;
}
#rememberedDropdownList {
max-height: 220px;
}
.stack { .stack {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
+9 -4
View File
@@ -19,10 +19,15 @@
<div class="panel-head-actions panel-head-actions-empty" aria-hidden="true"></div> <div class="panel-head-actions panel-head-actions-empty" aria-hidden="true"></div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="row search-combobox-row"> <div class="search-combobox" id="searchCombobox">
<input id="searchInput" type="text" placeholder="Search series..." /> <div class="row search-combobox-row">
<button id="searchDropdownBtn" class="secondary" aria-label="Show remembered series"></button> <input id="searchInput" type="text" placeholder="Search series..." />
<button id="searchBtn">Search</button> <button id="searchDropdownBtn" class="secondary" aria-label="Show remembered series"></button>
<button id="searchBtn">Search</button>
</div>
<div id="searchComboboxDropdown" class="combobox-dropdown hidden">
<ul id="rememberedDropdownList" class="list"></ul>
</div>
</div> </div>
<div id="seriesInfo" class="muted"></div> <div id="seriesInfo" class="muted"></div>
<ul id="searchResults" class="list"></ul> <ul id="searchResults" class="list"></ul>
Binary file not shown.