blob: bfe41b8d93e23c6ec01446ebd043c23701837a57 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
const overlayEl = document.getElementById("solve-overlay");
const firstBloodEl = document.getElementById("solve-first");
const teamEl = document.getElementById("solve-team");
const challengeEl = document.getElementById("solve-challenge");
const valueEl = document.getElementById("solve-value");
const scoreboardFrameEl = document.getElementById("scoreboard-frame");
const solveQueue = [];
let isShowingOverlay = false;
function pollNextSolve() {
if (isShowingOverlay) {
return;
}
if (solveQueue.length > 0) {
const nextSolve = solveQueue.shift();
showSolve(nextSolve.team, nextSolve.challenge, nextSolve.value, nextSolve.first);
}
}
function showSolve(team, challenge, value, first) {
teamEl.textContent = team;
teamEl.setAttribute("data-text", team);
challengeEl.textContent = challenge;
challengeEl.setAttribute("data-text", challenge);
valueEl.textContent = `+${value}`;
valueEl.setAttribute("data-text", `+${value}`);
if (first) {
firstBloodEl.classList.add("visible");
}
overlayEl.classList.add("visible");
isShowingOverlay = true;
setTimeout(() => {
overlayEl.classList.remove("visible");
firstBloodEl.classList.remove("visible");
setTimeout(() => {
isShowingOverlay = false;
pollNextSolve();
}, 1000);
}, first ? 8500 : 4500);
}
let reloadTimeout = null;
function reloadScoreboard(delay = 1000) {
if (reloadTimeout) {
clearTimeout(reloadTimeout);
}
reloadTimeout = setTimeout(() => {
scoreboardFrameEl.src = "/scoreboard?ts=" + Date.now();
reloadTimeout = null;
}, delay);
}
const es = new EventSource("/presenter/events");
es.onmessage = (e) => {
const data = JSON.parse(e.data);
if (data.type === "solve") {
solveQueue.push(data);
reloadScoreboard();
pollNextSolve();
}
};
|