diff options
Diffstat (limited to 'src/webui_live.js')
-rw-r--r-- | src/webui_live.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/webui_live.js b/src/webui_live.js new file mode 100644 index 0000000..12b5fef --- /dev/null +++ b/src/webui_live.js @@ -0,0 +1,31 @@ +/// <reference lib="dom" /> + +const ws = new WebSocket("/webui_ws") +ws.onopen = () => console.log("ws open"); +ws.onclose = () => console.warn("ws close"); +ws.onerror = () => console.warn("ws error"); +ws.onmessage = ev => { + const u = JSON.parse(ev.data) + if (u.t == "update_worker") { + const e = document.getElementById(`worker-${u.id}`) + if (e) e.outerHTML = u.html + else document.getElementById("workers").innerHTML += u.html + } else if (u.t == "remove_worker") { + document.getElementById(`worker-${u.id}`)?.remove() + } else if (u.t == "update_task") { + const e = document.getElementById(u.key) + const parent_id = u.bin == "queue" ? "bin-queue" : u.bin == "loading" ? "bin-loading" : "bin-complete" + const parent = document.querySelector(`#${parent_id} > ul`) + if (e && e.parentElement == parent) e.outerHTML = u.html + else { + e?.remove() + parent.innerHTML += u.html + } + } else if (u.t == "remove_task") { + document.getElementById(u.key)?.remove() + } else if (u.t == "counters") { + document.querySelector("#bin-queue .count").textContent = `${u.queue} tasks` + document.querySelector("#bin-loading .count").textContent = `${u.loading} tasks` + document.querySelector("#bin-complete .count").textContent = `${u.complete} tasks` + } +} |