Š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) {