diff --git a/assets/js/scoreboard.js b/assets/js/scoreboard.js index 733e8d7..e3ef264 100644 --- a/assets/js/scoreboard.js +++ b/assets/js/scoreboard.js @@ -6,17 +6,28 @@ import { embed } from "./utils/graphs/echarts"; window.Alpine = Alpine; window.CTFd = CTFd; +// Default scoreboard polling interval to every 5 minutes +const scoreboardUpdateInterval = window.scoreboardUpdateInterval || 300000; + Alpine.data("ScoreboardDetail", () => ({ data: {}, show: true, - async init() { + async update() { this.data = await CTFd.pages.scoreboard.getScoreboardDetail(10); let option = getOption(CTFd.config.userMode, this.data); embed(this.$refs.scoregraph, option); this.show = Object.keys(this.data).length > 0; }, + + async init() { + this.update(); + + setInterval(() => { + this.update(); + }, scoreboardUpdateInterval); + }, })); Alpine.data("ScoreboardList", () => ({ @@ -24,7 +35,7 @@ Alpine.data("ScoreboardList", () => ({ brackets: [], activeBracket: null, - async init() { + async update() { let response = await CTFd.fetch(`/api/v1/brackets?type=${CTFd.config.userMode}`, { method: "GET", }); @@ -32,6 +43,14 @@ Alpine.data("ScoreboardList", () => ({ this.brackets = body["data"]; this.standings = await CTFd.pages.scoreboard.getScoreboard(); }, + + async init() { + this.update(); + + setInterval(() => { + this.update(); + }, scoreboardUpdateInterval); + }, })); Alpine.start(); diff --git a/static/assets/scoreboard.4ec57e19.js b/static/assets/scoreboard.4ec57e19.js new file mode 100644 index 0000000..2597d61 --- /dev/null +++ b/static/assets/scoreboard.4ec57e19.js @@ -0,0 +1 @@ +import{m as a,C as t}from"./index.7e48942e.js";import{g as r,e as d}from"./index.6c6d1611.js";import"./echarts.128204f2.js";window.Alpine=a;window.CTFd=t;const s=window.scoreboardUpdateInterval||3e5;a.data("ScoreboardDetail",()=>({data:{},show:!0,async update(){this.data=await t.pages.scoreboard.getScoreboardDetail(10);let e=r(t.config.userMode,this.data);d(this.$refs.scoregraph,e),this.show=Object.keys(this.data).length>0},async init(){this.update(),setInterval(()=>{this.update()},s)}}));a.data("ScoreboardList",()=>({standings:[],brackets:[],activeBracket:null,async update(){const o=await(await t.fetch(`/api/v1/brackets?type=${t.config.userMode}`,{method:"GET"})).json();this.brackets=o.data,this.standings=await t.pages.scoreboard.getScoreboard()},async init(){this.update(),setInterval(()=>{this.update()},s)}}));a.start(); diff --git a/static/assets/scoreboard.58978844.js b/static/assets/scoreboard.58978844.js deleted file mode 100644 index 14e721b..0000000 --- a/static/assets/scoreboard.58978844.js +++ /dev/null @@ -1 +0,0 @@ -import{m as a,C as t}from"./index.7e48942e.js";import{g as o,e as i}from"./index.6c6d1611.js";import"./echarts.128204f2.js";window.Alpine=a;window.CTFd=t;a.data("ScoreboardDetail",()=>({data:{},show:!0,async init(){this.data=await t.pages.scoreboard.getScoreboardDetail(10);let e=o(t.config.userMode,this.data);i(this.$refs.scoregraph,e),this.show=Object.keys(this.data).length>0}}));a.data("ScoreboardList",()=>({standings:[],brackets:[],activeBracket:null,async init(){const s=await(await t.fetch(`/api/v1/brackets?type=${t.config.userMode}`,{method:"GET"})).json();this.brackets=s.data,this.standings=await t.pages.scoreboard.getScoreboard()}}));a.start(); diff --git a/static/manifest.json b/static/manifest.json index cbb0140..8f15350 100644 --- a/static/manifest.json +++ b/static/manifest.json @@ -38,7 +38,7 @@ ] }, "assets/js/scoreboard.js": { - "file": "assets/scoreboard.58978844.js", + "file": "assets/scoreboard.4ec57e19.js", "src": "assets/js/scoreboard.js", "isEntry": true, "imports": [