From ab12ca8526bb6bd60339c7e5af8ef687ef55f6a7 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 23 Apr 2021 00:14:01 +0800 Subject: [PATCH] ui: fix #106, fix #108 --- packages/hydrooj/package.json | 4 +- packages/hydrooj/src/model/builtin.ts | 79 ++----------------- packages/ui-default/build/main.js | 1 + .../ui-default/components/form/form.page.js | 10 +++ .../scratchpad/DataInputComponent.jsx | 25 +++--- .../scratchpad/ScratchpadPretestContainer.jsx | 1 + .../components/scratchpad/reducers/pretest.js | 9 ++- packages/ui-default/package.json | 10 +-- packages/utils/lib/status.ts | 71 +++++++++++++++++ packages/utils/package.json | 2 +- 10 files changed, 115 insertions(+), 97 deletions(-) create mode 100644 packages/utils/lib/status.ts diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index e6683d024..469d9aa35 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.23.22", + "version": "2.23.23", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", @@ -11,7 +11,7 @@ "node": ">=14" }, "dependencies": { - "@hydrooj/utils": "^1.0.4", + "@hydrooj/utils": "^1.0.7", "adm-zip": "^0.5.5", "ansi_up": "^5.0.1", "cookies": "^0.8.0", diff --git a/packages/hydrooj/src/model/builtin.ts b/packages/hydrooj/src/model/builtin.ts index baad95f9c..609c9d5d7 100644 --- a/packages/hydrooj/src/model/builtin.ts +++ b/packages/hydrooj/src/model/builtin.ts @@ -1,13 +1,16 @@ // @ts-nocheck -import { Udoc } from '../interface'; - /* * Why nocheck? * BitInt requires at least ES2020, but we can't use it as * NodeJS doesn't support some of this new features. * e.g.: object?.property */ +import { STATUS, STATUS_TEXTS, STATUS_CODES } from '@hydrooj/utils/lib/status'; +import type { Udoc } from '../interface'; + +export * from '@hydrooj/utils/lib/status'; + export const PERM = { PERM_NONE: 0n, @@ -520,78 +523,6 @@ export const LANG_TEXTS = { jl: 'Julia', }; -export const STATUS = { - STATUS_WAITING: 0, - STATUS_ACCEPTED: 1, - STATUS_WRONG_ANSWER: 2, - STATUS_TIME_LIMIT_EXCEEDED: 3, - STATUS_MEMORY_LIMIT_EXCEEDED: 4, - STATUS_OUTPUT_LIMIT_EXCEEDED: 5, - STATUS_RUNTIME_ERROR: 6, - STATUS_COMPILE_ERROR: 7, - STATUS_SYSTEM_ERROR: 8, - STATUS_CANCELED: 9, - STATUS_ETC: 10, - STATUS_HACKED: 11, - STATUS_JUDGING: 20, - STATUS_COMPILING: 21, - STATUS_FETCHED: 22, - STATUS_IGNORED: 30, -}; - -export const STATUS_TEXTS = { - [STATUS.STATUS_WAITING]: 'Waiting', - [STATUS.STATUS_ACCEPTED]: 'Accepted', - [STATUS.STATUS_WRONG_ANSWER]: 'Wrong Answer', - [STATUS.STATUS_TIME_LIMIT_EXCEEDED]: 'Time Exceeded', - [STATUS.STATUS_MEMORY_LIMIT_EXCEEDED]: 'Memory Exceeded', - [STATUS.STATUS_OUTPUT_LIMIT_EXCEEDED]: 'Output Exceeded', - [STATUS.STATUS_RUNTIME_ERROR]: 'Runtime Error', - [STATUS.STATUS_COMPILE_ERROR]: 'Compile Error', - [STATUS.STATUS_SYSTEM_ERROR]: 'System Error', - [STATUS.STATUS_CANCELED]: 'Cancelled', - [STATUS.STATUS_ETC]: 'Unknown Error', - [STATUS.STATUS_HACKED]: 'Hacked', - [STATUS.STATUS_JUDGING]: 'Running', - [STATUS.STATUS_COMPILING]: 'Compiling', - [STATUS.STATUS_FETCHED]: 'Fetched', - [STATUS.STATUS_IGNORED]: 'Ignored', -}; - -export const STATUS_CODES = { - 0: 'pending', - 1: 'pass', - 2: 'fail', - 3: 'fail', - 4: 'fail', - 5: 'fail', - 6: 'fail', - 7: 'fail', - 8: 'fail', - 9: 'ignored', - 10: 'fail', - 11: 'fail', - 20: 'progress', - 21: 'progress', - 22: 'progress', - 30: 'ignored', -}; - -export const USER_GENDER_MALE = 0; -export const USER_GENDER_FEMALE = 1; -export const USER_GENDER_OTHER = 2; -export const USER_GENDERS = [USER_GENDER_MALE, USER_GENDER_FEMALE, USER_GENDER_OTHER]; -export const USER_GENDER_RANGE = { - [USER_GENDER_MALE]: 'Boy ♂', - [USER_GENDER_FEMALE]: 'Girl ♀', - [USER_GENDER_OTHER]: 'Other', -}; -export const USER_GENDER_ICONS = { - [USER_GENDER_MALE]: '♂', - [USER_GENDER_FEMALE]: '♀', - [USER_GENDER_OTHER]: '?', -}; - global.Hydro.model.builtin = { Permission, PERM, diff --git a/packages/ui-default/build/main.js b/packages/ui-default/build/main.js index 5fa6fcfe0..c95fbea22 100644 --- a/packages/ui-default/build/main.js +++ b/packages/ui-default/build/main.js @@ -23,6 +23,7 @@ function runWebpack({ proxy: { context: () => true, target: 'http://localhost:2333', + ws: true, }, }); return server.listen(8000); diff --git a/packages/ui-default/components/form/form.page.js b/packages/ui-default/components/form/form.page.js index 98fe0793d..6b801d16a 100644 --- a/packages/ui-default/components/form/form.page.js +++ b/packages/ui-default/components/form/form.page.js @@ -1,4 +1,5 @@ import { AutoloadPage } from 'vj/misc/Page'; +import delay from 'vj/utils/delay' const formPage = new AutoloadPage('formPage', () => { $(document).on('vjFormDisableUpdate', 'input, select, textarea', (ev) => { @@ -10,6 +11,15 @@ const formPage = new AutoloadPage('formPage', () => { $formItem.removeClass('is--disabled'); } }); + + const submitting = {}; + + $('[type="submit"]').on('click', async (ev) => { + if (!submitting[ev.currentTarget]) $(ev.currentTarget).closest('form').submit(); + submitting[ev.currentTarget] = true; + await delay(5000); + submitting[ev.currentTarget] = false; + }) }); export default formPage; diff --git a/packages/ui-default/components/scratchpad/DataInputComponent.jsx b/packages/ui-default/components/scratchpad/DataInputComponent.jsx index d2711d445..df157edb3 100644 --- a/packages/ui-default/components/scratchpad/DataInputComponent.jsx +++ b/packages/ui-default/components/scratchpad/DataInputComponent.jsx @@ -3,6 +3,7 @@ import classNames from 'classnames'; export default function DataInputComponent(props) { const { + html, title, value, onChange, @@ -12,16 +13,20 @@ export default function DataInputComponent(props) { const cn = classNames(className, 'flex-col flex-fill'); return (
-