From 1c3ea21283f48badfd8ad3480a755a5f30487bbd Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 20 Jul 2022 20:28:11 +0800 Subject: [PATCH] core&ui: enhanced language selection (#390) --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/problem.ts | 15 ++++++---- packages/ui-default/package.json | 2 +- .../ui-default/pages/problem_submit.page.tsx | 28 ++++++++++--------- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 194e20122..7b468f10c 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.14.14", + "version": "3.14.15", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index e800dfc95..e1c1891f9 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -324,16 +324,19 @@ export class ProblemDetailHandler extends ContestDetailBaseHandler { this.pdoc.config = pdoc.config; } if (typeof this.pdoc.config !== 'string') { + let baseLangs; + if (this.pdoc.config.type === 'remote_judge') { + const p = this.pdoc.config.subType; + const dl = [p, ...Object.keys(setting.langs).filter((i) => i.startsWith(`${p}.`))]; + baseLangs = dl; + } else { + baseLangs = Object.keys(setting.langs).filter((i) => !setting.langs[i].remote); + } const t = []; if (this.pdoc.config.langs) t.push(this.pdoc.config.langs); if (ddoc.langs) t.push(ddoc.langs.split(',').map((i) => i.trim()).filter((i) => i)); if (this.domain.langs) t.push(this.domain.langs.split(',').map((i) => i.trim()).filter((i) => i)); - if (this.pdoc.config.type === 'remote_judge') { - const p = this.pdoc.config.subType; - const dl = [p, ...Object.keys(setting.langs).filter((i) => i.startsWith(`${p}.`))]; - t.push(dl); - } - if (t.length) this.pdoc.config.langs = intersection(...t); + if (t.length) this.pdoc.config.langs = intersection(baseLangs, ...t); } await bus.serial('problem/get', this.pdoc, this); [this.psdoc, this.udoc] = await Promise.all([ diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index dc4b55fcd..4c6b34a89 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.38.15", + "version": "4.38.16", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/pages/problem_submit.page.tsx b/packages/ui-default/pages/problem_submit.page.tsx index e3e6bd2eb..9d9a7683f 100644 --- a/packages/ui-default/pages/problem_submit.page.tsx +++ b/packages/ui-default/pages/problem_submit.page.tsx @@ -56,19 +56,21 @@ const page = new NamedPage(['problem_submit', 'contest_detail_problem_submit', ' return ( <> -
- -
- {Object.keys(options).length > 1 && ( + {Object.keys(mainLangs).length > 1 && ( +
+ +
+ )} + {(Object.keys(options).length > 1 || Object.keys(mainLangs).length === 1) && (