app.js
1// Confirm danger buttons, split the trigger form's select, and stream the log.
2document.addEventListener("submit", (e) => {
3 const q = e.target.dataset.confirm;
4 if (q && !confirm(q)) e.preventDefault();
5});
6document.addEventListener("DOMContentLoaded", () => {
7 const target = document.getElementById("target");
8 if (target) {
9 const sync = () => {
10 const [repo, wf] = target.value.split("|");
11 document.getElementById("trigger-repo").value = repo;
12 document.getElementById("trigger-workflow").value = wf;
13 };
14 target.addEventListener("change", sync);
15 sync();
16 }
17 const log = document.getElementById("log");
18 if (log && log.dataset.live && window.EventSource) {
19 const atBottom = () => window.innerHeight + window.scrollY >= document.body.offsetHeight - 40;
20 const es = new EventSource(log.dataset.live);
21 es.onmessage = (m) => {
22 const l = JSON.parse(m.data);
23 const follow = atBottom();
24 const span = document.createElement("span");
25 span.className = "l " + l.class;
26 span.textContent = l.text;
27 log.append(span, "\n");
28 if (follow) window.scrollTo(0, document.body.scrollHeight);
29 };
30 es.addEventListener("end", () => { es.close(); location.reload(); });
31 }
32});