mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: fix buildContestRule extend
This commit is contained in:
1 parent
21c369139a
commit
8406e02d1e
1 file changed
+14
-14
@@ -33,19 +33,20 @@ interface AcmDetail extends AcmJournal {
|
||||
real: number;
|
||||
}
|
||||
|
||||
function buildContestRule<T>(def: ContestRule<T>): ContestRule<T> {
|
||||
const _originalRule = {
|
||||
scoreboard: def.scoreboard,
|
||||
scoreboardRow: def.scoreboardRow,
|
||||
scoreboardHeader: def.scoreboardHeader,
|
||||
stat: def.stat,
|
||||
function buildContestRule<T>(def: ContestRule<T>): ContestRule<T>;
|
||||
function buildContestRule<T>(def: Partial<ContestRule<T>>, baseRule: ContestRule<T>): ContestRule<T>;
|
||||
function buildContestRule<T>(def: Partial<ContestRule<T>>, { _originalRule: base }: ContestRule<T> = { _originalRule: {} } as any) {
|
||||
def._originalRule = {
|
||||
scoreboard: def.scoreboard || base.scoreboard,
|
||||
scoreboardRow: def.scoreboardRow || base.scoreboardRow,
|
||||
scoreboardHeader: def.scoreboardHeader || base.scoreboardHeader,
|
||||
stat: def.stat || base.stat,
|
||||
};
|
||||
def.scoreboard = (def._originalRule?.scoreboard || def.scoreboard).bind(def);
|
||||
def.scoreboardHeader = (def._originalRule?.scoreboardHeader || def.scoreboardHeader).bind(def);
|
||||
def.scoreboardRow = (def._originalRule?.scoreboardRow || def.scoreboardRow).bind(def);
|
||||
def.stat = (def._originalRule?.stat || def.stat).bind(def);
|
||||
def._originalRule = _originalRule;
|
||||
return def;
|
||||
def.scoreboard = (def.scoreboard || base.scoreboard).bind(def);
|
||||
def.scoreboardHeader = (def.scoreboardHeader || base.scoreboardHeader).bind(def);
|
||||
def.scoreboardRow = (def.scoreboardRow || base.scoreboardRow).bind(def);
|
||||
def.stat = (def.stat || base.stat).bind(def);
|
||||
return def as ContestRule<T>;
|
||||
}
|
||||
|
||||
const acm = buildContestRule({
|
||||
@@ -349,13 +350,12 @@ const oi = buildContestRule({
|
||||
});
|
||||
|
||||
const ioi = buildContestRule({
|
||||
...oi,
|
||||
TEXT: 'IOI',
|
||||
submitAfterAccept: false,
|
||||
showRecord: (tdoc, now) => now > tdoc.endAt,
|
||||
showSelfRecord: () => true,
|
||||
showScoreboard: (tdoc, now) => now > tdoc.beginAt,
|
||||
});
|
||||
}, oi);
|
||||
|
||||
const homework = buildContestRule({
|
||||
TEXT: 'Assignment',
|
||||
|
||||
Reference in new issue
Block a user