From b8fd94df50cbac097b7aa93614884344864ad768 Mon Sep 17 00:00:00 2001 From: panda Date: Sat, 17 Dec 2022 01:14:52 +0000 Subject: [PATCH] add unrank & star user on scoreboard ui --- packages/hydrooj/src/interface.ts | 3 +- packages/hydrooj/src/lib/rank.ts | 4 +++ packages/hydrooj/src/model/contest.ts | 4 +-- .../ui-default/templates/contest_edit.html | 34 +++++++++++++++---- .../templates/contest_scoreboard.html | 14 +++++++- 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index b4ab16245..d6e12bdad 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -368,7 +368,8 @@ export interface Tdoc { for (const doc of docs) { count++; if (!last || !equ(last, doc)) r = count; + if (doc.unrank) { + results.push([0, doc]); + continue; + } last = doc; results.push([r, doc]); } diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index 32442f95c..506e62e94 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -127,7 +127,7 @@ const acm = buildContestRule({ async scoreboardRow(isExport, _, tdoc, pdict, udoc, rank, tsdoc, meta) { const tsddict = tsdoc.detail || {}; const row: ScoreboardRow = [ - { type: 'rank', value: rank.toString() }, + { type: 'rank', value: rank ? rank.toString() : '*' }, { type: 'user', value: udoc.uname, raw: tsdoc.uid }, ]; if (isExport) { @@ -263,7 +263,7 @@ const oi = buildContestRule({ async scoreboardRow(isExport, _, tdoc, pdict, udoc, rank, tsdoc, meta) { const tsddict = tsdoc.detail || {}; const row: ScoreboardNode[] = [ - { type: 'rank', value: rank.toString() }, + { type: 'rank', value: rank ? rank.toString() : '*' }, { type: 'user', value: udoc.uname, raw: tsdoc.uid }, ]; if (isExport) { diff --git a/packages/ui-default/templates/contest_edit.html b/packages/ui-default/templates/contest_edit.html index fd8433570..bea9cf753 100644 --- a/packages/ui-default/templates/contest_edit.html +++ b/packages/ui-default/templates/contest_edit.html @@ -127,6 +127,26 @@ }) }} +
+ {{ form.form_text({ + columns:9, + label:'UnRank User', + name:'unrankUser', + help_text:_('User who will not show rank in scoreboard'), + value:tdoc.unrankUser|default(''), + row:false + }) }} + +

{{ _('Contest Settings') }}

@@ -134,12 +154,12 @@
{{ form.form_checkbox({ - columns:2, - label:'Rated', - name:'rated', - placeholder:_('Is rated'), - value:tdoc.rated|default(true), - row:false + columns:2, + label:'Rated', + name:'rated', + placeholder:_('Is rated'), + value:tdoc.rated|default(true), + row:false }) }} {{ form.form_checkbox({ columns:3, @@ -164,7 +184,7 @@ label:'Lock (minutes)', name:'lock', placeholder:_('(leave blank if none)'), - value:(((tdoc.endAt - tdoc.lockAt)/60000)|int)|default(''), + value:(((tdoc.endAt - tdoc.lockAt)/60000)|int) if tdoc.lockAt else '', help_text:_('Lock scoreboard on last N minutes'), disabled:true, row:false diff --git a/packages/ui-default/templates/contest_scoreboard.html b/packages/ui-default/templates/contest_scoreboard.html index 463d0caa4..d35a755e4 100644 --- a/packages/ui-default/templates/contest_scoreboard.html +++ b/packages/ui-default/templates/contest_scoreboard.html @@ -22,12 +22,20 @@ {% if model.contest.isDone(tdoc) and tdoc.lockAt and handler.user.own(tdoc) and not tdoc.unlocked %}
-
{% endif %} +
+ +
+

{{ tdoc.title }}

{% if model.contest.isLocked(tdoc) %}
@@ -71,6 +79,10 @@ {%- if column.type == 'user' -%} {%- set canView = canViewAll or handler.user._id == column.raw -%} + {{ user.render_inline(udict[column.raw], badge=false) }} {%- elif column.type == 'record' and column.raw -%}