diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 054b51648..96c12568f 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.29.15", + "version": "2.29.16", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index acfaac7d4..8a68d9d76 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -294,6 +294,7 @@ export interface ScoreboardNode { value: string; raw?: any; score?: number; + style?: string; } export type ScoreboardRow = ScoreboardNode[] & { raw?: any }; diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index 2b5ca4bcc..d365e8c1b 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -179,6 +179,17 @@ const oi: ContestRule = { } } const psdict = {}; + const first = {}; + for (const pid of tdoc.pids) first[pid] = new ObjectID().generationTime; + for (const [, tsdoc] of rankedTsdocs) { + const tsddict = {}; + for (const item of tsdoc.journal || []) tsddict[item.pid] = item; + for (const pid of tdoc.pids) { + if (tsddict[pid]?.accept && tsddict[pid].rid.generationTime < first[pid]) { + first[pid] = tsddict[pid].rid.generationTime; + } + } + } // eslint-disable-next-line @typescript-eslint/no-use-before-define if (isDone(tdoc)) { const psdocs = await Promise.all( @@ -227,11 +238,15 @@ const oi: ContestRule = { ], }); } else { - row.push({ + const node: ScoreboardNode = { type: 'record', value: tsddict[pid]?.score ?? '-', raw: tsddict[pid]?.rid || null, - }); + }; + if (tsddict[pid]?.accept && tsddict[pid]?.rid.generationTime === first[pid]) { + node.style = 'background-color: rgb(217, 240, 199);'; + } + row.push(node); } } rows.push(row); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index b98faf413..3f10886c1 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.12.8", + "version": "4.12.9", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/templates/contest_scoreboard.html b/packages/ui-default/templates/contest_scoreboard.html index 97ffab617..28913485a 100644 --- a/packages/ui-default/templates/contest_scoreboard.html +++ b/packages/ui-default/templates/contest_scoreboard.html @@ -36,7 +36,7 @@ {%- for row in rows -%}{% if loop.index0 > 0 %} {%- for column in row -%} - + {% if column.type == 'user' %} {{ user.render_inline(udict[column.raw], badge=false) }} {% elif column.type == 'record' and column.raw %}