From 88461a78cd88387ee1f82ac7803647b9aafe8fae Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 30 Jan 2023 07:01:32 +0800 Subject: [PATCH] core: lang: add disabled option --- packages/hydrooj/src/handler/problem.ts | 2 +- packages/ui-default/utils/index.ts | 3 ++- packages/utils/lib/lang.ts | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index a79b54909..3a550cd98 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -507,7 +507,7 @@ export class ProblemSubmitHandler extends ProblemDetailHandler { if (typeof config === 'string' || config === null) throw new ProblemConfigError(); if (config.type === 'objective') { lang = '_'; - } else if (config.langs && !config.langs.includes(lang)) { + } else if ((config.langs && !config.langs.includes(lang)) || setting.langs[lang].disabled) { throw new ProblemNotAllowLanguageError(); } if (pretest) { diff --git a/packages/ui-default/utils/index.ts b/packages/ui-default/utils/index.ts index 4a9b997fc..0b28effae 100644 --- a/packages/ui-default/utils/index.ts +++ b/packages/ui-default/utils/index.ts @@ -33,7 +33,8 @@ export function getAvailableLangs(langsList?: string[]) { for (const key in window.LANGS) { if (prefixes.has(key)) continue; if (langsList && langsList.length && langsList.join('') && !langsList.includes(key)) continue; - else if (window.LANGS[key].hidden && !langsList?.includes(key)) continue; + if (window.LANGS[key].hidden && !langsList?.includes(key)) continue; + if (window.LANGS[key].disabled) continue; Langs[key] = window.LANGS[key]; } return Langs; diff --git a/packages/utils/lib/lang.ts b/packages/utils/lib/lang.ts index 22bfeb858..035a5c76c 100644 --- a/packages/utils/lib/lang.ts +++ b/packages/utils/lib/lang.ts @@ -1,6 +1,7 @@ import yaml from 'js-yaml'; export interface LangConfig { + disabled?: boolean; compile?: string; execute: string; code_file: string; @@ -41,6 +42,7 @@ export function parseLang(config: string): Record { entry.execute ||= '/w/foo'; entry.key = key; entry.hidden ||= false; + entry.disabled ||= false; } return file; }