mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { formatSeconds } from '@hydrooj/utils/lib/common';
|
|
import NProgress from 'nprogress';
|
|
import { NamedPage } from 'vj/misc/Page';
|
|
import { addSpeculationRules, tpl } from 'vj/utils';
|
|
|
|
const contestTimer = $(tpl`<pre class="contest-timer" style="display:none"></pre>`);
|
|
contestTimer.appendTo(document.body);
|
|
|
|
export default new NamedPage(['contest_detail', 'contest_problemlist', 'contest_detail_problem', 'contest_scoreboard'], () => {
|
|
const beginAt = new Date((UiContext.tdoc.duration && UiContext.tsdoc?.startAt) || UiContext.tdoc.beginAt).getTime();
|
|
const endAt = new Date(UiContext.tsdoc?.endAt || UiContext.tdoc.endAt).getTime();
|
|
NProgress.configure({ trickle: false, showSpinner: false, minimum: 0 });
|
|
function updateProgress() {
|
|
const now = Date.now();
|
|
if (beginAt <= now && now <= endAt) {
|
|
NProgress.set((now - beginAt) / (endAt - beginAt));
|
|
contestTimer.show();
|
|
contestTimer.text(formatSeconds(Math.floor((endAt - now) / 1000)));
|
|
} else contestTimer.hide();
|
|
}
|
|
NProgress.start();
|
|
updateProgress();
|
|
setInterval(updateProgress, 1000);
|
|
|
|
addSpeculationRules({
|
|
prerender: [{
|
|
where: {
|
|
or: [
|
|
{ href_matches: '/p/*' },
|
|
{ href_matches: '/d/*/p/*' },
|
|
],
|
|
},
|
|
}],
|
|
});
|
|
});
|