core&ui: add contest language limit (#1014)

Co-authored-by: panda <panda_dtdyy@outlook.com>
This commit is contained in:
undefinedandpanda authored and GitHub committed 2025-07-15 23:54:42 +01:00
1 parent 0699e17ce6
commit 4165e9b153
23 files changed
+175 -232

No files matched your search

@@ -1,5 +1,6 @@
import $ from 'jquery';
import moment from 'moment';
import LanguageSelectAutoComplete from 'vj/components/autocomplete/LanguageSelectAutoComplete';
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoComplete';
import { ConfirmDialog } from 'vj/components/dialog';
@@ -9,6 +10,7 @@ import { i18n, request, tpl } from 'vj/utils';
const page = new NamedPage(['contest_edit', 'contest_create', 'homework_create', 'homework_edit'], (pagename) => {
ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true, clearDefaultValue: false });
UserSelectAutoComplete.getOrConstruct<true>($('[name="maintainer"]'), { multi: true, clearDefaultValue: false });
LanguageSelectAutoComplete.getOrConstruct($('[name=langs]'), { multi: true });
$('[name="rule"]').on('change', () => {
const rule = $('[name="rule"]').val();
$('.contest-rule-settings input').attr('disabled', 'disabled');
@@ -1,21 +0,0 @@
import CustomSelectAutoComplete from 'vj/components/autocomplete/CustomSelectAutoComplete';
import { NamedPage } from 'vj/misc/Page';
const page = new NamedPage('domain_edit', () => {
const prefixes = new Set(Object.keys(window.LANGS).filter((i) => i.includes('.')).map((i) => i.split('.')[0]));
const langs = Object.keys(window.LANGS).filter((i) => !prefixes.has(i)).map((i) => (
{ name: `${i.includes('.') ? `${window.LANGS[i.split('.')[0]].display}/` : ''}${window.LANGS[i].display}`, _id: i }
));
const $langSelect = $('[name=langs]');
$langSelect.val(($langSelect.val() as string).split(',').filter((i) => !prefixes.has(i)));
const select: CustomSelectAutoComplete<true> = CustomSelectAutoComplete.getOrConstruct($('[name=langs]'), { multi: true, data: langs });
select.onChange((val) => {
const value = val.split(',');
value.push(...new Set(value.filter((i) => i.includes('.')).map((i) => i.split('.')[0])));
$langSelect.val(value.join(','));
});
});
export default page;
@@ -0,0 +1,8 @@
import LanguageSelectAutoComplete from 'vj/components/autocomplete/LanguageSelectAutoComplete';
import { NamedPage } from 'vj/misc/Page';
const page = new NamedPage('domain_edit', () => {
LanguageSelectAutoComplete.getOrConstruct($('[name=langs]'), { multi: true });
});
export default page;
@@ -1,4 +1,5 @@
import $ from 'jquery';
import React from 'react';
import DomainSelectAutoComplete from 'vj/components/autocomplete/DomainSelectAutoComplete';
import { ActionDialog } from 'vj/components/dialog';
import { NamedPage } from 'vj/misc/Page';