mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
upgrade deps
This commit is contained in:
24 files changed
+162
-165
No files matched your search
+9
-9
@@ -31,11 +31,11 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@simplewebauthn/typescript-types": "^7.4.0",
|
"@simplewebauthn/typescript-types": "^8.0.0",
|
||||||
"@types/autocannon": "^7.9.1",
|
"@types/autocannon": "^7.12.0",
|
||||||
"@types/cross-spawn": "^6.0.2",
|
"@types/cross-spawn": "^6.0.3",
|
||||||
"@types/node": "^20.5.6",
|
"@types/node": "^20.6.1",
|
||||||
"@types/semver": "^7.5.0",
|
"@types/semver": "^7.5.2",
|
||||||
"@types/supertest": "^2.0.12",
|
"@types/supertest": "^2.0.12",
|
||||||
"autocannon": "^7.12.0",
|
"autocannon": "^7.12.0",
|
||||||
"cac": "^6.7.14",
|
"cac": "^6.7.14",
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
"css-loader": "^6.8.1",
|
"css-loader": "^6.8.1",
|
||||||
"esbuild": "0.17.10",
|
"esbuild": "0.17.10",
|
||||||
"esbuild-loader": "^2.21.0",
|
"esbuild-loader": "^2.21.0",
|
||||||
"eslint": "^8.48.0",
|
"eslint": "^8.49.0",
|
||||||
"eslint-import-resolver-typescript": "^3.6.0",
|
"eslint-import-resolver-typescript": "^3.6.0",
|
||||||
"eslint-import-resolver-webpack": "^0.13.7",
|
"eslint-import-resolver-webpack": "^0.13.7",
|
||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.1.1",
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
"latest-version": "7.0.0",
|
"latest-version": "7.0.0",
|
||||||
"mini-css-extract-plugin": "^2.7.6",
|
"mini-css-extract-plugin": "^2.7.6",
|
||||||
"monaco-editor-webpack-plugin": "^7.1.0",
|
"monaco-editor-webpack-plugin": "^7.1.0",
|
||||||
"mongodb": "^5.7.0",
|
"mongodb": "^5.9.0",
|
||||||
"mongodb-memory-server": "^8.15.1",
|
"mongodb-memory-server": "^8.15.1",
|
||||||
"nyc": "^15.1.0",
|
"nyc": "^15.1.0",
|
||||||
"ora": "^6.3.1",
|
"ora": "^6.3.1",
|
||||||
@@ -64,13 +64,13 @@
|
|||||||
"semver": "^7.5.4",
|
"semver": "^7.5.4",
|
||||||
"simple-git": "^3.19.1",
|
"simple-git": "^3.19.1",
|
||||||
"style-loader": "^3.3.3",
|
"style-loader": "^3.3.3",
|
||||||
"stylus": "^0.59.0",
|
"stylus": "^0.60.0",
|
||||||
"stylus-loader": "7.1.2",
|
"stylus-loader": "7.1.2",
|
||||||
"supertest": "^6.3.3",
|
"supertest": "^6.3.3",
|
||||||
"ts-loader": "^9.4.4",
|
"ts-loader": "^9.4.4",
|
||||||
"typescript": "5.0.2",
|
"typescript": "5.0.2",
|
||||||
"webpack": "^5.88.2",
|
"webpack": "^5.88.2",
|
||||||
"webpack-bundle-analyzer": "^4.9.0",
|
"webpack-bundle-analyzer": "^4.9.1",
|
||||||
"webpack-dev-server": "^4.15.1",
|
"webpack-dev-server": "^4.15.1",
|
||||||
"webpack-manifest-plugin": "^5.0.0",
|
"webpack-manifest-plugin": "^5.0.0",
|
||||||
"webpackbar": "^5.0.2",
|
"webpackbar": "^5.0.2",
|
||||||
|
|||||||
@@ -6,6 +6,6 @@
|
|||||||
"author": "undefined <i@undefined.moe>",
|
"author": "undefined <i@undefined.moe>",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@elastic/elasticsearch": "^8.8.1"
|
"@elastic/elasticsearch": "^8.9.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "react.yaml",
|
"main": "react.yaml",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^6.4.1",
|
"@typescript-eslint/eslint-plugin": "^6.7.0",
|
||||||
"@typescript-eslint/parser": "^6.4.1",
|
"@typescript-eslint/parser": "^6.7.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
"eslint-config-airbnb": "^19.0.4",
|
||||||
"eslint-config-airbnb-typescript": "^17.1.0",
|
"eslint-config-airbnb-typescript": "^17.1.0",
|
||||||
"eslint-plugin-import": "2.28.1",
|
"eslint-plugin-import": "2.28.1",
|
||||||
|
|||||||
@@ -12,6 +12,6 @@
|
|||||||
"xml2js": "^0.6.2"
|
"xml2js": "^0.6.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/xml2js": "^0.4.11"
|
"@types/xml2js": "^0.4.12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,12 +8,12 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hydrooj/utils": "workspace:*",
|
"@hydrooj/utils": "workspace:*",
|
||||||
"cac": "^6.7.14",
|
"cac": "^6.7.14",
|
||||||
"mongodb": "^5.7.0",
|
"mongodb": "^5.9.0",
|
||||||
"p-queue": "^7.3.4",
|
"p-queue": "^7.4.1",
|
||||||
"schemastery": "^3.11.1",
|
"schemastery": "^3.12.0",
|
||||||
"shell-quote": "^1.8.1",
|
"shell-quote": "^1.8.1",
|
||||||
"superagent": "^8.0.9",
|
"superagent": "^8.1.2",
|
||||||
"ws": "^8.13.0"
|
"ws": "^8.14.1"
|
||||||
},
|
},
|
||||||
"preferUnplugged": true,
|
"preferUnplugged": true,
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
|
|||||||
@@ -12,17 +12,17 @@
|
|||||||
},
|
},
|
||||||
"preferUnplugged": true,
|
"preferUnplugged": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-s3": "3.357.0",
|
"@aws-sdk/client-s3": "3.414.0",
|
||||||
"@aws-sdk/lib-storage": "3.357.0",
|
"@aws-sdk/lib-storage": "3.414.0",
|
||||||
"@aws-sdk/middleware-endpoint": "3.357.0",
|
"@aws-sdk/middleware-endpoint": "3.374.0",
|
||||||
"@aws-sdk/s3-presigned-post": "3.357.0",
|
"@aws-sdk/s3-presigned-post": "3.414.0",
|
||||||
"@aws-sdk/s3-request-presigner": "3.357.0",
|
"@aws-sdk/s3-request-presigner": "3.414.0",
|
||||||
"@graphql-tools/schema": "^10.0.0",
|
"@graphql-tools/schema": "^10.0.0",
|
||||||
"@hydrooj/utils": "workspace:*",
|
"@hydrooj/utils": "workspace:*",
|
||||||
"@simplewebauthn/server": "^7.4.0",
|
"@simplewebauthn/server": "^8.1.1",
|
||||||
"adm-zip": "0.5.5",
|
"adm-zip": "0.5.5",
|
||||||
"cac": "^6.7.14",
|
"cac": "^6.7.14",
|
||||||
"cordis": "^2.8.7",
|
"cordis": "^2.8.8",
|
||||||
"detect-browser": "^5.3.0",
|
"detect-browser": "^5.3.0",
|
||||||
"emoji-regex": "^10.2.1",
|
"emoji-regex": "^10.2.1",
|
||||||
"emojis-list": "2.1.0",
|
"emojis-list": "2.1.0",
|
||||||
@@ -40,39 +40,39 @@
|
|||||||
"lru-cache": "^9.1.2",
|
"lru-cache": "^9.1.2",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
"moment-timezone": "^0.5.43",
|
"moment-timezone": "^0.5.43",
|
||||||
"mongodb": "^5.7.0",
|
"mongodb": "^5.9.0",
|
||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
"nodemailer": "^6.9.4",
|
"nodemailer": "^6.9.5",
|
||||||
"notp": "^2.0.3",
|
"notp": "^2.0.3",
|
||||||
"p-queue": "^7.3.4",
|
"p-queue": "^7.4.1",
|
||||||
"path-to-regexp": "^6.2.1",
|
"path-to-regexp": "^6.2.1",
|
||||||
"require-resolve-hook": "^1.1.0",
|
"require-resolve-hook": "^1.1.0",
|
||||||
"saslprep": "^1.0.3",
|
"saslprep": "^1.0.3",
|
||||||
"schemastery": "^3.11.1",
|
"schemastery": "^3.12.0",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.5.4",
|
||||||
"serialize-javascript": "^6.0.1",
|
"serialize-javascript": "^6.0.1",
|
||||||
"superagent": "^8.0.9",
|
"superagent": "^8.1.2",
|
||||||
"tar": "^6.1.15",
|
"tar": "^6.2.0",
|
||||||
"thirty-two": "^1.0.2",
|
"thirty-two": "^1.0.2",
|
||||||
"ws": "^8.13.0"
|
"ws": "^8.14.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/adm-zip": "^0.4.34",
|
"@types/adm-zip": "^0.4.34",
|
||||||
"@types/fs-extra": "^11.0.1",
|
"@types/fs-extra": "^11.0.2",
|
||||||
"@types/js-yaml": "^4.0.5",
|
"@types/js-yaml": "^4.0.6",
|
||||||
"@types/koa": "^2.13.8",
|
"@types/koa": "^2.13.9",
|
||||||
"@types/koa-compress": "^4.0.3",
|
"@types/koa-compress": "^4.0.4",
|
||||||
"@types/koa-router": "^7.4.4",
|
"@types/koa-router": "^7.4.5",
|
||||||
"@types/koa-static-cache": "^5.1.1",
|
"@types/koa-static-cache": "^5.1.2",
|
||||||
"@types/lodash": "^4.14.197",
|
"@types/lodash": "^4.14.198",
|
||||||
"@types/mime-types": "^2.1.1",
|
"@types/mime-types": "^2.1.1",
|
||||||
"@types/nodemailer": "^6.4.9",
|
"@types/nodemailer": "^6.4.10",
|
||||||
"@types/notp": "^2.0.2",
|
"@types/notp": "^2.0.2",
|
||||||
"@types/saslprep": "^1.0.1",
|
"@types/saslprep": "^1.0.1",
|
||||||
"@types/semver": "^7.5.0",
|
"@types/semver": "^7.5.2",
|
||||||
"@types/serialize-javascript": "^5.0.2",
|
"@types/serialize-javascript": "^5.0.2",
|
||||||
"@types/superagent": "^4.1.18",
|
"@types/superagent": "^4.1.18",
|
||||||
"@types/tar": "^6.1.5",
|
"@types/tar": "^6.1.6",
|
||||||
"moment": "^2.29.4"
|
"moment": "^2.29.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,12 +7,12 @@
|
|||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mariadb": "^3.2.0",
|
"mariadb": "^3.2.0",
|
||||||
"mongodb": "^5.7.0",
|
"mongodb": "^5.9.0",
|
||||||
"turndown": "^7.1.2",
|
"turndown": "^7.1.2",
|
||||||
"xml2js": "^0.6.2"
|
"xml2js": "^0.6.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/turndown": "^5.0.1",
|
"@types/turndown": "^5.0.2",
|
||||||
"@types/xml2js": "^0.4.11"
|
"@types/xml2js": "^0.4.12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ export * from './utils';
|
|||||||
export { default as Notification } from './components/notification';
|
export { default as Notification } from './components/notification';
|
||||||
export * from './components/dialog';
|
export * from './components/dialog';
|
||||||
export { Context, Service, ctx } from './context';
|
export { Context, Service, ctx } from './context';
|
||||||
export { default as AnsiUp } from 'ansi_up';
|
export { AnsiUp } from 'ansi_up';
|
||||||
export { default as loadMonaco } from './components/monaco/loader';
|
export { default as loadMonaco } from './components/monaco/loader';
|
||||||
export { default as Socket } from './components/socket/index';
|
export { default as Socket } from './components/socket/index';
|
||||||
export { default as uploadFiles } from './components/upload';
|
export { default as uploadFiles } from './components/upload';
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import AnsiUp from 'ansi_up';
|
import { AnsiUp } from 'ansi_up';
|
||||||
import { moment, ObjectId } from 'hydrooj';
|
import { moment, ObjectId } from 'hydrooj';
|
||||||
|
|
||||||
export { size, formatSeconds } from 'hydrooj';
|
export { size, formatSeconds } from 'hydrooj';
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
white-space: nowrap
|
white-space: nowrap
|
||||||
text-overflow: ellipsis
|
text-overflow: ellipsis
|
||||||
|
|
||||||
&>span.bp4-icon>svg
|
&>span.bp5-icon>svg
|
||||||
font-size: 12px
|
font-size: 12px
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
padding: 4px
|
padding: 4px
|
||||||
@@ -91,19 +91,19 @@
|
|||||||
&>div
|
&>div
|
||||||
flex-grow: 1
|
flex-grow: 1
|
||||||
|
|
||||||
&>span.bp4-icon>svg
|
&>span.bp5-icon>svg
|
||||||
color: transparent
|
color: transparent
|
||||||
|
|
||||||
&[aria-selected='true']
|
&[aria-selected='true']
|
||||||
background-color: #fafafa
|
background-color: #fafafa
|
||||||
font-weight: 600
|
font-weight: 600
|
||||||
|
|
||||||
&>span.bp4-icon>svg
|
&>span.bp5-icon>svg
|
||||||
color: #1890ff
|
color: #1890ff
|
||||||
|
|
||||||
&[data-focus='true']
|
&[data-focus='true']
|
||||||
background-color: #e6f7ff
|
background-color: #e6f7ff
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
&>span.bp4-icon>svg
|
&>span.bp5-icon>svg
|
||||||
color: currentColor
|
color: currentColor
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Button, Icon, TreeNode } from '@blueprintjs/core';
|
import {
|
||||||
import { Popover2 } from '@blueprintjs/popover2';
|
Button, Classes, Icon, Popover, TreeNode,
|
||||||
|
} from '@blueprintjs/core';
|
||||||
import { normalizeSubtasks, readSubtasksFromFiles } from '@hydrooj/utils/lib/common';
|
import { normalizeSubtasks, readSubtasksFromFiles } from '@hydrooj/utils/lib/common';
|
||||||
import { TestCaseConfig } from 'hydrooj';
|
import { TestCaseConfig } from 'hydrooj';
|
||||||
import { isEqual } from 'lodash';
|
import { isEqual } from 'lodash';
|
||||||
@@ -61,12 +62,12 @@ export function SubtaskNode(props: { subtaskId: number }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li className="bp4-tree-node bp4-tree-node-expanded">
|
<li className={`${Classes.TREE_NODE} ${Classes.TREE_NODE_EXPANDED}`}>
|
||||||
{subtaskId !== -1 && <div className="bp4-tree-node-content" onClick={() => setExpand((e) => !e)}>
|
{subtaskId !== -1 && <div className={Classes.TREE_NODE_CONTENT} onClick={() => setExpand((e) => !e)}>
|
||||||
<Icon icon={expand ? 'folder-open' : 'folder-close'} />
|
<Icon icon={expand ? 'folder-open' : 'folder-close'} />
|
||||||
<span className="bp4-tree-node-label">{i18n('Subtask {0}', subtaskId)}</span>
|
<span className={Classes.TREE_NODE_LABEL}>{i18n('Subtask {0}', subtaskId)}</span>
|
||||||
<span className="bp4-tree-node-secondary-label" onClick={(ev) => ev.stopPropagation()}>
|
<span className={Classes.TREE_NODE_SECONDARY_LABEL} onClick={(ev) => ev.stopPropagation()}>
|
||||||
<Popover2
|
<Popover
|
||||||
content={<div style={{ padding: 20 }}>
|
content={<div style={{ padding: 20 }}>
|
||||||
<b>{i18n('Are you sure you want to delete this subtask?')}</b>
|
<b>{i18n('Are you sure you want to delete this subtask?')}</b>
|
||||||
<div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: 15 }}>
|
<div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: 15 }}>
|
||||||
@@ -75,10 +76,10 @@ export function SubtaskNode(props: { subtaskId: number }) {
|
|||||||
</div>}
|
</div>}
|
||||||
>
|
>
|
||||||
<Icon icon="trash" />
|
<Icon icon="trash" />
|
||||||
</Popover2>
|
</Popover>
|
||||||
</span>
|
</span>
|
||||||
</div>}
|
</div>}
|
||||||
<ul className="bp4-tree-node-list" ref={drop}>
|
<ul className={Classes.TREE_NODE_LIST} ref={drop}>
|
||||||
{subtaskId !== -1 && <SubtaskSettings subtaskId={subtaskId} subtaskIds={subtaskIds} time={time} memory={memory} />}
|
{subtaskId !== -1 && <SubtaskSettings subtaskId={subtaskId} subtaskIds={subtaskIds} time={time} memory={memory} />}
|
||||||
{expand
|
{expand
|
||||||
? <SelectionManager subtaskId={subtaskId} subtaskIds={subtaskIds} />
|
? <SelectionManager subtaskId={subtaskId} subtaskIds={subtaskIds} />
|
||||||
@@ -91,10 +92,10 @@ export function SubtaskNode(props: { subtaskId: number }) {
|
|||||||
path={[0]}
|
path={[0]}
|
||||||
/>}
|
/>}
|
||||||
{!cases.length && (
|
{!cases.length && (
|
||||||
<li className="bp4-tree-node">
|
<li className={Classes.TREE_NODE}>
|
||||||
<div className="bp4-tree-node-content">
|
<div className={Classes.TREE_NODE_CONTENT}>
|
||||||
<span className="bp4-tree-node-caret-none bp4-icon-standard"></span>
|
<span className={`${Classes.TREE_NODE_CARET_NONE} ${Classes.ICON_STANDARD}`}></span>
|
||||||
<span className="bp4-tree-node-label text-gray">{subtaskId === -1
|
<span className={`${Classes.TREE_NODE_LABEL} text-gray`}>{subtaskId === -1
|
||||||
? i18n('No testcase here')
|
? i18n('No testcase here')
|
||||||
: i18n('Drag and drop testcases here:')}</span>
|
: i18n('Drag and drop testcases here:')}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -123,23 +124,23 @@ export function SubtaskConfigTree() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div className="bp4-tree">
|
<div className={Classes.TREE}>
|
||||||
<ul className="bp4-tree-node-list bp4-tree-root">
|
<ul className={`${Classes.TREE_NODE_LIST} ${Classes.TREE_ROOT}`}>
|
||||||
<li className="bp4-tree-node" onClick={autoConfigure}>
|
<li className={Classes.TREE_NODE} onClick={autoConfigure}>
|
||||||
<div className="bp4-tree-node-content bp4-tree-node-content-0">
|
<div className={`${Classes.TREE_NODE_CONTENT} bp5-tree-node-content-0`}>
|
||||||
<Icon icon="clean" />
|
<Icon icon="clean" />
|
||||||
<span className="bp4-tree-node-label">{i18n('Auto configure')}</span>
|
<span className={Classes.TREE_NODE_LABEL}>{i18n('Auto configure')}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<GlobalSettings />
|
<GlobalSettings />
|
||||||
{ids.map((id) => <SubtaskNode key={id} subtaskId={id} />)}
|
{ids.map((id) => <SubtaskNode key={id} subtaskId={id} />)}
|
||||||
<li
|
<li
|
||||||
className="bp4-tree-node"
|
className={Classes.TREE_NODE}
|
||||||
onClick={() => dispatch({ type: 'problemconfig/addSubtask' })}
|
onClick={() => dispatch({ type: 'problemconfig/addSubtask' })}
|
||||||
>
|
>
|
||||||
<div className="bp4-tree-node-content bp4-tree-node-content-0">
|
<div className={`${Classes.TREE_NODE_CONTENT} bp5-tree-node-content-0`}>
|
||||||
<Icon icon="folder-new" />
|
<Icon icon="folder-new" />
|
||||||
<span className="bp4-tree-node-label">{i18n('Add new subtask')}</span>
|
<span className={Classes.TREE_NODE_LABEL}>{i18n('Add new subtask')}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -155,8 +156,8 @@ export function ProblemConfigTree() {
|
|||||||
<SubtaskConfigTree />
|
<SubtaskConfigTree />
|
||||||
</div>
|
</div>
|
||||||
<div className="medium-6 columns">
|
<div className="medium-6 columns">
|
||||||
<div className="bp4-tree">
|
<div className={Classes.TREE}>
|
||||||
<ul className="bp4-tree-node-list bp4-tree-root">
|
<ul className={`${Classes.TREE_ROOT} ${Classes.TREE_NODE_LIST}`}>
|
||||||
<AddTestcase />
|
<AddTestcase />
|
||||||
<SubtaskNode subtaskId={-1} />
|
<SubtaskNode subtaskId={-1} />
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Card, Switch, Tab, Tabs,
|
Card, Classes, Switch, Tab, Tabs,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
@@ -27,7 +27,7 @@ export default function ProblemType() {
|
|||||||
defaultSelectedTabId="default"
|
defaultSelectedTabId="default"
|
||||||
renderActiveTabPanelOnly
|
renderActiveTabPanelOnly
|
||||||
>
|
>
|
||||||
<span className="bp4-tab">{i18n('Problem Type')}</span>
|
<span className={Classes.TAB}>{i18n('Problem Type')}</span>
|
||||||
<Tabs.Expander />
|
<Tabs.Expander />
|
||||||
<Tab
|
<Tab
|
||||||
id="default"
|
id="default"
|
||||||
@@ -42,7 +42,7 @@ export default function ProblemType() {
|
|||||||
onChange={dispatcher({ type: 'CONFIG_FORM_UPDATE', key: 'checker_type' })}
|
onChange={dispatcher({ type: 'CONFIG_FORM_UPDATE', key: 'checker_type' })}
|
||||||
renderActiveTabPanelOnly
|
renderActiveTabPanelOnly
|
||||||
>
|
>
|
||||||
<span className="bp4-tab">{i18n('CheckerType')}</span>
|
<span className={Classes.TAB}>{i18n('CheckerType')}</span>
|
||||||
<Tabs.Expander />
|
<Tabs.Expander />
|
||||||
<Tab
|
<Tab
|
||||||
id="default"
|
id="default"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Button, Dialog, DialogBody, DialogFooter, Icon,
|
Button, Classes, Dialog, DialogBody, DialogFooter, Icon,
|
||||||
} from '@blueprintjs/core';
|
} from '@blueprintjs/core';
|
||||||
import { readSubtasksFromFiles } from '@hydrooj/utils/lib/common';
|
import { readSubtasksFromFiles } from '@hydrooj/utils/lib/common';
|
||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useEffect, useRef } from 'react';
|
||||||
@@ -83,17 +83,14 @@ export function AddTestcase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (<>
|
return (<>
|
||||||
<li
|
<li className={Classes.TREE_NODE} onClick={auto}>
|
||||||
className="bp4-tree-node"
|
<div className="bp5-tree-node-content bp5-tree-node-content-0">
|
||||||
onClick={auto}
|
|
||||||
>
|
|
||||||
<div className="bp4-tree-node-content bp4-tree-node-content-0">
|
|
||||||
<Icon icon="clean" />
|
<Icon icon="clean" />
|
||||||
<span className="bp4-tree-node-label">{i18n('Auto detect')}</span>
|
<span className={Classes.TREE_NODE_LABEL}>{i18n('Auto detect')}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li
|
<li
|
||||||
className="bp4-tree-node"
|
className={Classes.TREE_NODE}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setInput('');
|
setInput('');
|
||||||
setOutput('');
|
setOutput('');
|
||||||
@@ -102,9 +99,9 @@ export function AddTestcase() {
|
|||||||
setOpen(true);
|
setOpen(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="bp4-tree-node-content bp4-tree-node-content-0">
|
<div className="bp5-tree-node-content bp5-tree-node-content-0">
|
||||||
<Icon icon="clean" />
|
<Icon icon="clean" />
|
||||||
<span className="bp4-tree-node-label">{i18n('Add testcase')}</span>
|
<span className={Classes.TREE_NODE_LABEL}>{i18n('Add testcase')}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<Dialog title="Add testcase" icon="cog" isOpen={open} onClose={() => setOpen(false)}>
|
<Dialog title="Add testcase" icon="cog" isOpen={open} onClose={() => setOpen(false)}>
|
||||||
|
|||||||
@@ -101,35 +101,35 @@ export function SubtaskSettings(props: SubtaskSettingsProps) {
|
|||||||
</DialogBody>
|
</DialogBody>
|
||||||
<DialogFooter actions={<Button className="primary rounded button" onClick={onConfirm} intent="primary" text="Save" />} />
|
<DialogFooter actions={<Button className="primary rounded button" onClick={onConfirm} intent="primary" text="Save" />} />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
<li className="bp4-tree-node" onClick={() => setOpen(true)}>
|
<li className="bp5-tree-node" onClick={() => setOpen(true)}>
|
||||||
<div className="bp4-tree-node-content">
|
<div className="bp5-tree-node-content">
|
||||||
<span className="bp4-tree-node-caret-none bp4-icon-standard"></span>
|
<span className="bp5-tree-node-caret-none bp5-icon-standard"></span>
|
||||||
<Icon icon="time" />
|
<Icon icon="time" />
|
||||||
|
|
||||||
<span className={`bp4-tree-node-label${time ? '' : ' text-gray'}`}>{time || props.time || '1s'}</span>
|
<span className={`bp5-tree-node-label${time ? '' : ' text-gray'}`}>{time || props.time || '1s'}</span>
|
||||||
<Icon icon="comparison" />
|
<Icon icon="comparison" />
|
||||||
|
|
||||||
<span className={`bp4-tree-node-label${memory ? '' : ' text-gray'}`}>{memory || props.memory || '256m'}</span>
|
<span className={`bp5-tree-node-label${memory ? '' : ' text-gray'}`}>{memory || props.memory || '256m'}</span>
|
||||||
<Icon icon="star" />
|
<Icon icon="star" />
|
||||||
{' '}
|
{' '}
|
||||||
<span className="bp4-tree-node-secondary-label">{score || 0}</span>
|
<span className="bp5-tree-node-secondary-label">{score || 0}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li className="bp4-tree-node" onClick={() => setDepsOpen(true)}>
|
<li className="bp5-tree-node" onClick={() => setDepsOpen(true)}>
|
||||||
<div className="bp4-tree-node-content">
|
<div className="bp5-tree-node-content">
|
||||||
<span className="bp4-tree-node-caret-none bp4-icon-standard"></span>
|
<span className="bp5-tree-node-caret-none bp5-icon-standard"></span>
|
||||||
<Icon icon="diagram-tree" />
|
<Icon icon="diagram-tree" />
|
||||||
|
|
||||||
<span className="bp4-tree-node-label">{i18n('Dependencies')}: {deps.length ? deps.join(', ') : i18n('(None)')}</span>
|
<span className="bp5-tree-node-label">{i18n('Dependencies')}: {deps.length ? deps.join(', ') : i18n('(None)')}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li className="bp4-tree-node">
|
<li className="bp5-tree-node">
|
||||||
<div className="bp4-tree-node-content">
|
<div className="bp5-tree-node-content">
|
||||||
<span className="bp4-tree-node-caret-none bp4-icon-standard"></span>
|
<span className="bp5-tree-node-caret-none bp5-icon-standard"></span>
|
||||||
<Icon icon="asterisk" />
|
<Icon icon="asterisk" />
|
||||||
|
|
||||||
<span className="bp4-tree-node-label">{i18n('Scoring method')}</span>
|
<span className="bp5-tree-node-label">{i18n('Scoring method')}</span>
|
||||||
<span className="bp4-tree-node-secondary-label">
|
<span className="bp5-tree-node-secondary-label">
|
||||||
<select className="compact select" value={ctype} onChange={(e) => setType(e.target.value)}>
|
<select className="compact select" value={ctype} onChange={(e) => setType(e.target.value)}>
|
||||||
<option value="min">Min</option>
|
<option value="min">Min</option>
|
||||||
<option value="max">Max</option>
|
<option value="max">Max</option>
|
||||||
@@ -184,14 +184,14 @@ export function GlobalSettings() {
|
|||||||
</DialogBody>
|
</DialogBody>
|
||||||
<DialogFooter actions={<Button className="primary rounded button" onClick={onConfirm} intent="primary" text="Save" />} />
|
<DialogFooter actions={<Button className="primary rounded button" onClick={onConfirm} intent="primary" text="Save" />} />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
<li className="bp4-tree-node" onClick={() => setOpen(true)}>
|
<li className="bp5-tree-node" onClick={() => setOpen(true)}>
|
||||||
<div className="bp4-tree-node-content">
|
<div className="bp5-tree-node-content">
|
||||||
<Icon icon="time" />
|
<Icon icon="time" />
|
||||||
|
|
||||||
<span className={`bp4-tree-node-label${time ? '' : ' text-gray'}`}>{time || '1s'}</span>
|
<span className={`bp5-tree-node-label${time ? '' : ' text-gray'}`}>{time || '1s'}</span>
|
||||||
<Icon icon="comparison" />
|
<Icon icon="comparison" />
|
||||||
{' '}
|
{' '}
|
||||||
<span className={`bp4-tree-node-secondary-label${memory ? '' : ' text-gray'}`}>{memory || '256MB'}</span>
|
<span className={`bp5-tree-node-secondary-label${memory ? '' : ' text-gray'}`}>{memory || '256MB'}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</>);
|
</>);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Menu, MenuItem, TreeNode } from '@blueprintjs/core';
|
import {
|
||||||
import { ContextMenu2 } from '@blueprintjs/popover2';
|
ContextMenu, Menu, MenuItem, TreeNode,
|
||||||
|
} from '@blueprintjs/core';
|
||||||
import { TestCaseConfig } from 'hydrooj';
|
import { TestCaseConfig } from 'hydrooj';
|
||||||
import { omit } from 'lodash';
|
import { omit } from 'lodash';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
@@ -22,7 +23,7 @@ export function TestcaseNode(props: TestcaseNodeProps) {
|
|||||||
c, selected, onClick, subtaskIds, subtaskId,
|
c, selected, onClick, subtaskIds, subtaskId,
|
||||||
} = props;
|
} = props;
|
||||||
return (
|
return (
|
||||||
<ContextMenu2
|
<ContextMenu
|
||||||
onContextMenu={onClick}
|
onContextMenu={onClick}
|
||||||
data-subtaskid={subtaskId}
|
data-subtaskid={subtaskId}
|
||||||
data-index={c.input}
|
data-index={c.input}
|
||||||
@@ -49,7 +50,7 @@ export function TestcaseNode(props: TestcaseNodeProps) {
|
|||||||
label={<> {c.input} / {c.output}</>}
|
label={<> {c.input} / {c.output}</>}
|
||||||
path={[0]}
|
path={[0]}
|
||||||
/>
|
/>
|
||||||
</ContextMenu2>
|
</ContextMenu>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Allotment } from 'allotment';
|
import { Allotment } from 'allotment';
|
||||||
import AnsiUp from 'ansi_up';
|
import { AnsiUp } from 'ansi_up';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import Icon from 'vj/components/react/IconComponent';
|
import Icon from 'vj/components/react/IconComponent';
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ export default async function uploadFiles(endpoint = '', files: File[] | FileLis
|
|||||||
const dialog = new Dialog({
|
const dialog = new Dialog({
|
||||||
$body: `
|
$body: `
|
||||||
<div class="file-label" style="text-align: center; margin-bottom: 5px; color: gray; font-size: small;"></div>
|
<div class="file-label" style="text-align: center; margin-bottom: 5px; color: gray; font-size: small;"></div>
|
||||||
<div class="bp4-progress-bar bp4-intent-primary bp4-no-stripes">
|
<div class="bp5-progress-bar bp5-intent-primary bp5-no-stripes">
|
||||||
<div class="file-progress bp4-progress-meter" style="width: 0"></div>
|
<div class="file-progress bp5-progress-meter" style="width: 0"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="upload-label" style="text-align: center; margin: 5px 0; color: gray; font-size: small;"></div>
|
<div class="upload-label" style="text-align: center; margin: 5px 0; color: gray; font-size: small;"></div>
|
||||||
<div class="bp4-progress-bar bp4-intent-primary bp4-no-stripes">
|
<div class="bp5-progress-bar bp5-intent-primary bp5-no-stripes">
|
||||||
<div class="upload-progress bp4-progress-meter" style="width: 0"></div>
|
<div class="upload-progress bp5-progress-meter" style="width: 0"></div>
|
||||||
</div>`,
|
</div>`,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -14,26 +14,25 @@
|
|||||||
"cli": false
|
"cli": false
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@blueprintjs/core": "^4.20.2",
|
"@blueprintjs/core": "^5.3.0",
|
||||||
"@blueprintjs/popover2": "^1.14.11",
|
"@fontsource/dm-mono": "^5.0.12",
|
||||||
"@fontsource/dm-mono": "^5.0.9",
|
|
||||||
"@fontsource/fira-code": "^5.0.8",
|
"@fontsource/fira-code": "^5.0.8",
|
||||||
"@fontsource/inconsolata": "^5.0.8",
|
"@fontsource/inconsolata": "^5.0.8",
|
||||||
"@fontsource/jetbrains-mono": "^5.0.9",
|
"@fontsource/jetbrains-mono": "^5.0.12",
|
||||||
"@fontsource/pt-mono": "^5.0.8",
|
"@fontsource/pt-mono": "^5.0.8",
|
||||||
"@fontsource/roboto-mono": "^5.0.8",
|
"@fontsource/roboto-mono": "^5.0.8",
|
||||||
"@fontsource/source-code-pro": "^5.0.8",
|
"@fontsource/source-code-pro": "^5.0.8",
|
||||||
"@fontsource/ubuntu-mono": "^5.0.8",
|
"@fontsource/ubuntu-mono": "^5.0.12",
|
||||||
"@hydrooj/utils": "workspace:*",
|
"@hydrooj/utils": "workspace:*",
|
||||||
"@simplewebauthn/browser": "^7.4.0",
|
"@simplewebauthn/browser": "^8.0.2",
|
||||||
"@svgr/webpack": "^8.0.1",
|
"@svgr/webpack": "^8.1.0",
|
||||||
"@types/gulp-if": "^0.0.34",
|
"@types/gulp-if": "^0.0.34",
|
||||||
"@types/jquery": "^3.5.17",
|
"@types/jquery": "^3.5.19",
|
||||||
"@types/json-schema": "^7.0.12",
|
"@types/json-schema": "^7.0.13",
|
||||||
"@types/katex": "^0.16.2",
|
"@types/katex": "^0.16.3",
|
||||||
"@types/markdown-it": "^12.2.3",
|
"@types/markdown-it": "^13.0.1",
|
||||||
"@types/pickadate": "^3.5.32",
|
"@types/pickadate": "^3.5.32",
|
||||||
"@types/qrcode": "^1.5.1",
|
"@types/qrcode": "^1.5.2",
|
||||||
"@types/react": "^18.2.21",
|
"@types/react": "^18.2.21",
|
||||||
"@types/react-dom": "^18.2.7",
|
"@types/react-dom": "^18.2.7",
|
||||||
"@types/redux-logger": "^3.0.9",
|
"@types/redux-logger": "^3.0.9",
|
||||||
@@ -48,7 +47,7 @@
|
|||||||
"chalk": "^5.3.0",
|
"chalk": "^5.3.0",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"clipboard": "^2.0.11",
|
"clipboard": "^2.0.11",
|
||||||
"cordis": "^2.8.7",
|
"cordis": "^2.8.8",
|
||||||
"diff": "^5.1.0",
|
"diff": "^5.1.0",
|
||||||
"diff-dom": "^5.0.7",
|
"diff-dom": "^5.0.7",
|
||||||
"echarts": "^5.4.3",
|
"echarts": "^5.4.3",
|
||||||
@@ -62,7 +61,7 @@
|
|||||||
"gulp-if": "^3.0.0",
|
"gulp-if": "^3.0.0",
|
||||||
"gulp-plumber": "^1.2.1",
|
"gulp-plumber": "^1.2.1",
|
||||||
"gulp-svgmin": "^4.1.0",
|
"gulp-svgmin": "^4.1.0",
|
||||||
"jquery": "^3.7.0",
|
"jquery": "^3.7.1",
|
||||||
"jquery-scroll-lock": "^3.1.3",
|
"jquery-scroll-lock": "^3.1.3",
|
||||||
"jquery.easing": "^1.4.1",
|
"jquery.easing": "^1.4.1",
|
||||||
"jquery.transit": "^0.9.12",
|
"jquery.transit": "^0.9.12",
|
||||||
@@ -75,7 +74,7 @@
|
|||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"p-queue": "^7.3.4",
|
"p-queue": "^7.4.1",
|
||||||
"pickadate": "^3.6.4",
|
"pickadate": "^3.6.4",
|
||||||
"plugin-error": "^2.0.1",
|
"plugin-error": "^2.0.1",
|
||||||
"prism-themes": "^1.9.0",
|
"prism-themes": "^1.9.0",
|
||||||
@@ -96,7 +95,7 @@
|
|||||||
"redux-promise-middleware": "^6.1.3",
|
"redux-promise-middleware": "^6.1.3",
|
||||||
"redux-thunk": "^2.4.2",
|
"redux-thunk": "^2.4.2",
|
||||||
"rupture": "^0.7.1",
|
"rupture": "^0.7.1",
|
||||||
"schemastery": "^3.11.1",
|
"schemastery": "^3.12.0",
|
||||||
"slideout": "^1.0.1",
|
"slideout": "^1.0.1",
|
||||||
"sticky-kit": "^1.1.3",
|
"sticky-kit": "^1.1.3",
|
||||||
"tether": "1.4.7",
|
"tether": "1.4.7",
|
||||||
@@ -104,12 +103,12 @@
|
|||||||
"through2": "^4.0.2",
|
"through2": "^4.0.2",
|
||||||
"timeago-react": "^3.0.6",
|
"timeago-react": "^3.0.6",
|
||||||
"timeago.js": "^4.0.2",
|
"timeago.js": "^4.0.2",
|
||||||
"vditor": "^3.9.4",
|
"vditor": "^3.9.5",
|
||||||
"vinyl-buffer": "^1.0.1",
|
"vinyl-buffer": "^1.0.1",
|
||||||
"web-streams-polyfill": "^3.2.1"
|
"web-streams-polyfill": "^3.2.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi_up": "^5.2.1",
|
"ansi_up": "^6.0.2",
|
||||||
"esbuild": "0.17.10",
|
"esbuild": "0.17.10",
|
||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.1.1",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
.textbox,.select
|
.textbox,.select
|
||||||
margin: 0
|
margin: 0
|
||||||
|
|
||||||
.bp4-tab-panel
|
.bp5-tab-panel
|
||||||
margin-top: 5px
|
margin-top: 5px
|
||||||
|
|
||||||
.bp4-dialog
|
.bp5-dialog
|
||||||
font-family: var(--code-font-family)
|
font-family: var(--code-font-family)
|
||||||
background: #fff
|
background: #fff
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
font-size: 0.875rem
|
font-size: 0.875rem
|
||||||
color: #666
|
color: #666
|
||||||
|
|
||||||
.bp4-dialog-footer-fixed
|
.bp5-dialog-footer-fixed
|
||||||
border-top: 0
|
border-top: 0
|
||||||
|
|
||||||
.button
|
.button
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
input::placeholder
|
input::placeholder
|
||||||
color: rgba(95,107,124,.6)!important
|
color: rgba(95,107,124,.6)!important
|
||||||
|
|
||||||
.bp4-input-group
|
.bp5-input-group
|
||||||
input
|
input
|
||||||
appearance: none
|
appearance: none
|
||||||
display: block
|
display: block
|
||||||
@@ -49,10 +49,10 @@
|
|||||||
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1)
|
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1)
|
||||||
box-shadow: none
|
box-shadow: none
|
||||||
|
|
||||||
.bp4-tag.bp4-minimal
|
.bp5-tag.bp5-minimal
|
||||||
background: transparent
|
background: transparent
|
||||||
|
|
||||||
.bp4-input-action
|
.bp5-input-action
|
||||||
pointer-events: none
|
pointer-events: none
|
||||||
|
|
||||||
.problem-config-form
|
.problem-config-form
|
||||||
|
|||||||
@@ -12,14 +12,14 @@
|
|||||||
<h1 class="section__title">{{ tdoc.title }}</h1>
|
<h1 class="section__title">{{ tdoc.title }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="section__body">
|
<div class="section__body">
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item">{{ _(model.contest.statusText(tdoc, tsdoc)) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item">{{ _(model.contest.statusText(tdoc, tsdoc)) }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-award">{{ _(model.contest.RULES[tdoc.rule].TEXT) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-award">{{ _(model.contest.RULES[tdoc.rule].TEXT) }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item">{{ _('Start at') }}: {{ contest.render_time(tsdoc.startAt or tdoc.beginAt) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item">{{ _('Start at') }}: {{ contest.render_time(tsdoc.startAt or tdoc.beginAt) }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-schedule">{{ contest.render_duration(tdoc) }} {{ _('hour(s)') }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-schedule">{{ contest.render_duration(tdoc) }} {{ _('hour(s)') }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item">{{ _('Host') }}: {{ user.render_inline(udict[tdoc.owner], badge=false) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item">{{ _('Host') }}: {{ user.render_inline(udict[tdoc.owner], badge=false) }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-user--multiple">{{ tdoc['attend']|default(0) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-user--multiple">{{ tdoc['attend']|default(0) }}</span>
|
||||||
{% if tsdoc.attend %}
|
{% if tsdoc.attend %}
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-check">{{ _('Attended') }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-check">{{ _('Attended') }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -66,23 +66,23 @@
|
|||||||
<div class="section__body">
|
<div class="section__body">
|
||||||
<ul class="problem__tags">
|
<ul class="problem__tags">
|
||||||
{% if not tdoc %}
|
{% if not tdoc %}
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item">{{ _('ID') }}: {{ pdoc.docId }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item">{{ _('ID') }}: {{ pdoc.docId }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-book">{{ _('problem_type.' + pdoc.config.type).format(pdoc.config.subType) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-book">{{ _('problem_type.' + pdoc.config.type).format(pdoc.config.subType) }}</span>
|
||||||
{% if pdoc.config.type != 'objective' and pdoc.config.type != 'submit_answer' %}
|
{% if pdoc.config.type != 'objective' and pdoc.config.type != 'submit_answer' %}
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-stopwatch">{{ pdoc.config.timeMax if pdoc.config.timeMax == pdoc.config.timeMin else pdoc.config.timeMin+'~'+pdoc.config.timeMax }}ms</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-stopwatch">{{ pdoc.config.timeMax if pdoc.config.timeMax == pdoc.config.timeMin else pdoc.config.timeMin+'~'+pdoc.config.timeMax }}ms</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item icon icon-comparison">{{ pdoc.config.memoryMax if pdoc.config.memoryMax == pdoc.config.memoryMin else pdoc.config.memoryMin+'~'+pdoc.config.memoryMax }}MiB</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item icon icon-comparison">{{ pdoc.config.memoryMax if pdoc.config.memoryMax == pdoc.config.memoryMin else pdoc.config.memoryMin+'~'+pdoc.config.memoryMax }}MiB</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if not tdoc %}
|
{% if not tdoc %}
|
||||||
<a class="bp4-tag bp4-large bp4-minimal bp4-interactive problem__tag-item" href="{{ url('record_main', query={pid:pdoc.docId}) }}">{{ _('Tried') }}: {{ pdoc.nSubmit }}</a>
|
<a class="bp5-tag bp5-large bp5-minimal bp5-interactive problem__tag-item" href="{{ url('record_main', query={pid:pdoc.docId}) }}">{{ _('Tried') }}: {{ pdoc.nSubmit }}</a>
|
||||||
<a class="bp4-tag bp4-large bp4-minimal bp4-interactive problem__tag-item" href="{{ url('record_main', query={pid:pdoc.docId, status:1}) }}">{{ _('Accepted') }}: {{ pdoc.nAccept if ((not tdoc) or showAccept) else '?' }}</a>
|
<a class="bp5-tag bp5-large bp5-minimal bp5-interactive problem__tag-item" href="{{ url('record_main', query={pid:pdoc.docId, status:1}) }}">{{ _('Accepted') }}: {{ pdoc.nAccept if ((not tdoc) or showAccept) else '?' }}</a>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item">{{ _('Difficulty') }}: {{ pdoc['difficulty'] or lib.difficulty(pdoc.nSubmit, pdoc.nAccept) or _('(None)') }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item">{{ _('Difficulty') }}: {{ pdoc['difficulty'] or lib.difficulty(pdoc.nSubmit, pdoc.nAccept) or _('(None)') }}</span>
|
||||||
<span class="bp4-tag bp4-large bp4-minimal bp4-interactive problem__tag-item">{{ _('Uploaded By') }}: {{ user.render_inline(udoc, badge=false) }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal bp5-interactive problem__tag-item">{{ _('Uploaded By') }}: {{ user.render_inline(udoc, badge=false) }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pdoc.tag.length %}
|
{% if pdoc.tag.length %}
|
||||||
<span name="show_tags" class="bp4-tag bp4-large bp4-minimal bp4-interactive problem__tag-item nojs--hide icon icon-tag">{{ _('Tags') + '>' }}</span>
|
<span name="show_tags" class="bp5-tag bp5-large bp5-minimal bp5-interactive problem__tag-item nojs--hide icon icon-tag">{{ _('Tags') + '>' }}</span>
|
||||||
{%- for tag in pdoc.tag -%}
|
{%- for tag in pdoc.tag -%}
|
||||||
<span class="bp4-tag bp4-large bp4-minimal problem__tag-item tags hasjs--hide">{{ tag }}</span>
|
<span class="bp5-tag bp5-large bp5-minimal problem__tag-item tags hasjs--hide">{{ tag }}</span>
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ $hover-background-color = #424242
|
|||||||
.menu__link.highlight
|
.menu__link.highlight
|
||||||
background: rgb(40, 11, 20)
|
background: rgb(40, 11, 20)
|
||||||
|
|
||||||
.bp4-tag.bp4-minimal:not([class*="bp4-intent-"])
|
.bp5-tag.bp5-minimal:not([class*="bp5-intent-"])
|
||||||
background-color: rgba(87, 100, 117, .2)
|
background-color: rgba(87, 100, 117, .2)
|
||||||
color: #d9dfe7
|
color: #d9dfe7
|
||||||
|
|
||||||
@@ -391,14 +391,14 @@ $hover-background-color = #424242
|
|||||||
background-color: $main-background-color !important
|
background-color: $main-background-color !important
|
||||||
border-color: #3d3d3d !important
|
border-color: #3d3d3d !important
|
||||||
|
|
||||||
.bp4-tab
|
.bp5-tab
|
||||||
color: #aaa
|
color: #aaa
|
||||||
|
|
||||||
&[aria-disabled=true]
|
&[aria-disabled=true]
|
||||||
color: #555
|
color: #555
|
||||||
|
|
||||||
.bp4-card,.bp4-dialog,.bp4-dialog-header,.bp4-dialog-footer
|
.bp5-card,.bp5-dialog,.bp5-dialog-header,.bp5-dialog-footer
|
||||||
background-color: #1f1f1f !important
|
background-color: #1f1f1f !important
|
||||||
|
|
||||||
.bp4-input-group input
|
.bp5-input-group input
|
||||||
border-color: #3d3d3d!important
|
border-color: #3d3d3d!important
|
||||||
@@ -6,7 +6,6 @@ import 'pickadate/lib/themes/classic.date.css';
|
|||||||
import 'pickadate/lib/themes/classic.time.css';
|
import 'pickadate/lib/themes/classic.time.css';
|
||||||
import 'katex/dist/katex.min.css';
|
import 'katex/dist/katex.min.css';
|
||||||
import '@blueprintjs/core/lib/css/blueprint.css';
|
import '@blueprintjs/core/lib/css/blueprint.css';
|
||||||
import '@blueprintjs/popover2/lib/css/blueprint-popover2.css';
|
|
||||||
import '@fontsource/fira-code';
|
import '@fontsource/fira-code';
|
||||||
import '@fontsource/source-code-pro';
|
import '@fontsource/source-code-pro';
|
||||||
import '@fontsource/roboto-mono';
|
import '@fontsource/roboto-mono';
|
||||||
|
|||||||
@@ -13,14 +13,14 @@
|
|||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.1.1",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"moment-timezone": "^0.5.43",
|
"moment-timezone": "^0.5.43",
|
||||||
"mongodb": "^5.7.0",
|
"mongodb": "^5.9.0",
|
||||||
"reggol": "^1.4.4",
|
"reggol": "^1.5.1",
|
||||||
"search-query-parser": "^1.6.0",
|
"search-query-parser": "^1.6.0",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"systeminformation": "^5.20.0"
|
"systeminformation": "^5.21.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/fs-extra": "^11.0.1",
|
"@types/fs-extra": "^11.0.2",
|
||||||
"@types/source-map-support": "^0.5.7"
|
"@types/source-map-support": "^0.5.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user