diff options
| author | akiyamn | 2023-11-02 22:29:09 +1100 |
|---|---|---|
| committer | akiyamn | 2023-11-02 22:29:09 +1100 |
| commit | 5461621c421130bd359efff4a10c3e1ba330e85c (patch) | |
| tree | 32ab149b5993b89c42a46449c23c102858faa3a2 /fe/leaderboard.js | |
| download | jacbday-5461621c421130bd359efff4a10c3e1ba330e85c.tar.gz jacbday-5461621c421130bd359efff4a10c3e1ba330e85c.zip | |
Init
Diffstat (limited to 'fe/leaderboard.js')
| -rw-r--r-- | fe/leaderboard.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/fe/leaderboard.js b/fe/leaderboard.js new file mode 100644 index 0000000..426fb47 --- /dev/null +++ b/fe/leaderboard.js @@ -0,0 +1,70 @@ +import { API_ROOT, INGORED_USERS } from "./global.js" + +const element = (e) => document.querySelector(e) + +async function update() { + const data = await get_leaderboard_data() + fill_metadata(data.settings) + fill_leaderboard(data.points, data.settings.multiplier) +} + + +function sentenceCase(string) { + const out = string.slice(0, 1).toUpperCase() + string.slice(1).toLowerCase() + return out +} + +async function get_leaderboard_data() { + const response = await fetch(`${API_ROOT}/leaderboard/`) + console.log(API_ROOT) + const data = await response.json() + return data +} + +function fill_metadata(settings) { + element("#prompt").innerHTML = `"${settings.prompt}"` +} + +function clear_leaderboard() { + element(`#team-container`).innerHTML = "" +} + +function fill_leaderboard(points, multipliers) { + clear_leaderboard() + for (let team of ["green", "purple"]) { + console.log(team) + const html = ` + <div class="team-box ${team}-team"> + <div id="team-data"></div> + <div id="team-name">${sentenceCase(team)} Team</div> + <div id="team-multiplier">x${multipliers[team]}</div> + <div id="team-total">Total: ${points[team]["__total"]}</div> + ${team_member_entry(points[team])} + </div> + ` + element(`#team-container`).innerHTML += html + } +} + +function team_member_entry(teamPoints) { + let html = "" + for (let member in teamPoints) { + if (!INGORED_USERS.includes(member)) { + html += ` + <div class="team-member-row"> + <div class="team-member-name">${sentenceCase(member)}</div> + <div class="team-member-score">${teamPoints[member]}</div> + </div> + ` + } + } + return html +} + +document.addEventListener("DOMContentLoaded", async () => { + update() + const urlParams = new URLSearchParams(window.location.search); + const poll = urlParams.get("poll") || 3000 + const polling = setInterval(update, poll) +}); + |
