diff --git a/templates/index.html b/templates/index.html index 7109317..847120f 100644 --- a/templates/index.html +++ b/templates/index.html @@ -411,10 +411,13 @@

moji reels

- +
+ + +
Še ni obdelav
@@ -980,18 +983,39 @@ } // ─── Jobs list ────────────────────────────────── + function jobMatchesSearch(job, query) { + if (!query) return true; + const q = query.toLowerCase().trim(); + if (!q) return true; + const haystack = [ + job.parsed_artist || "", + job.parsed_title || "", + job.filename || "", + job.id || "", + job.tv_station || "", + ].join(" ").toLowerCase(); + // vsaka beseda iz query-ja mora biti v haystacku (AND match) + return q.split(/\s+/).every(w => haystack.includes(w)); + } + async function refreshJobs() { const r = await fetch("/api/jobs"); if (!r.ok) return; const data = await r.json(); const list = $("#jobs-list"); const showUploaded = $("#show-uploaded") && $("#show-uploaded").checked; - // Filtriraj ven jobe ki so že naloženi in skriti — RAZEN če checkbox vklopljen - const visible = data.jobs.filter(j => showUploaded || !j.hidden_after_upload); + const searchQuery = ($("#jobs-search") && $("#jobs-search").value) || ""; + // Filtriraj: če iskanje aktivno → ignore hidden_after_upload (iskanje vidi vse) + const visible = data.jobs.filter(j => { + if (searchQuery.trim()) return jobMatchesSearch(j, searchQuery); + return showUploaded || !j.hidden_after_upload; + }); if (!visible.length) { - list.innerHTML = showUploaded - ? '
Še ni obdelav
' - : '
Vse obdelano in naloženo. Klikni "Pokaži tudi že naložene" če želiš popraviti.
'; + list.innerHTML = searchQuery.trim() + ? `
Ni zadetkov za "${escapeHtml(searchQuery)}"
` + : (showUploaded + ? '
Še ni obdelav
' + : '
Vse obdelano in naloženo. Klikni "Pokaži tudi že naložene" če želiš popraviti.
'); return; } list.innerHTML = ""; @@ -1004,10 +1028,18 @@ }); } - // Toggle pokaži/skrij že naložene + // Toggle pokaži/skrij že naložene + iskalnik document.addEventListener("DOMContentLoaded", () => { const toggle = $("#show-uploaded"); if (toggle) toggle.addEventListener("change", refreshJobs); + const search = $("#jobs-search"); + if (search) { + let searchTimer = null; + search.addEventListener("input", () => { + clearTimeout(searchTimer); + searchTimer = setTimeout(refreshJobs, 150); + }); + } }); function updateJobInList(job) {