diff --git a/packages/ui-default/build/config/webpack.js b/packages/ui-default/build/config/webpack.js index 81720fa7..74817675 100644 --- a/packages/ui-default/build/config/webpack.js +++ b/packages/ui-default/build/config/webpack.js @@ -130,30 +130,21 @@ export default function (env = {}) { maxInitialRequests: 3, automaticNameDelimiter: '-', cacheGroups: { - monaco: { - test: /[\\/]monaco-editor[\\/]/, - priority: 9, - name: 'monaco', - }, - vditor: { - test: /[\\/]vditor[\\/]/, - priority: 8, - name: 'vditor', - }, - echarts: { - test: /[\\/]echarts[\\/]/, - priority: 7, - name: 'echarts', - }, - graphql: { - test: /[\\/](graphiql|codemirror)[\\/]/, - priority: 6, - name: 'gql-cm', + style: { + test: /\.(css|styl|less|sass|scss)$/, + priority: 99, + name: 'style', }, vendors: { test: /[\\/]node_modules[\\/].+\.([jt]sx?|json|yaml)$/, priority: -10, - name: 'vendors', + name(module) { + const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; + if (packageName === 'monaco-editor-nls') { + return `i.monaco.${module.userRequest.split('/').pop().split('.')[0]}`; + } + return `n.${packageName.replace('@', '')}`; + }, reuseExistingChunk: true, }, default: { diff --git a/packages/ui-default/components/autocomplete/components/AutoComplete.jsx b/packages/ui-default/components/autocomplete/components/AutoComplete.jsx index b3c82864..92debe2d 100644 --- a/packages/ui-default/components/autocomplete/components/AutoComplete.jsx +++ b/packages/ui-default/components/autocomplete/components/AutoComplete.jsx @@ -5,7 +5,7 @@ import React, { } from 'react'; import PropTypes from 'prop-types'; import { debounce } from 'lodash'; -import { Icon } from '@blueprintjs/core'; +import Icon from 'vj/components/react/IconComponent'; // eslint-disable-next-line prefer-arrow-callback const AutoComplete = forwardRef(function AutoComplete(props, ref) { @@ -199,7 +199,7 @@ const AutoComplete = forwardRef(function AutoComplete(props, ref) { {multi && selected.map((item, idx) => (
{itemText(item)}
- toggleItem(item)} /> + toggleItem(item)} />
))}
{renderItem(item)}
- + ))} diff --git a/packages/ui-default/components/monaco/nls.js b/packages/ui-default/components/monaco/nls.js index 61baef8a..61eac917 100644 --- a/packages/ui-default/components/monaco/nls.js +++ b/packages/ui-default/components/monaco/nls.js @@ -1,9 +1,5 @@ /* eslint-disable camelcase */ import en_GB from 'monaco-editor-nls/locale/en-gb.json'; -import zh_CN from 'monaco-editor-nls/locale/zh-hans.json'; -import zh_TW from 'monaco-editor-nls/locale/zh-hant.json'; -import ko from 'monaco-editor-nls/locale/ko.json'; -import i18n from 'vj/utils/i18n'; function _format(message, args) { let result; @@ -51,10 +47,3 @@ export function loadMessageBundle(file) { export function config(opt) { return loadMessageBundle; } - -const languages = { - zh_CN, - zh_TW, - ko, -}; -if (languages[i18n('timeago_locale')]) setLocaleData(languages[i18n('timeago_locale')]); diff --git a/packages/ui-default/hydro.ts b/packages/ui-default/hydro.ts index dd2b2a30..ea0b89f6 100644 --- a/packages/ui-default/hydro.ts +++ b/packages/ui-default/hydro.ts @@ -4,6 +4,7 @@ import _ from 'lodash'; import Notification from 'vj/components/notification'; import PageLoader from 'vj/misc/PageLoader'; import delay from 'vj/utils/delay'; +import i18n from './i18n'; declare global { interface Window { @@ -36,6 +37,7 @@ function buildSequence(pages, type) { async function load() { for (const page of window.Hydro.preload) await eval(page); // eslint-disable-line no-eval + await i18n(); const pageLoader = new PageLoader(); const currentPageName = document.documentElement.getAttribute('data-page'); diff --git a/packages/ui-default/i18n.ts b/packages/ui-default/i18n.ts new file mode 100644 index 00000000..4630f6cc --- /dev/null +++ b/packages/ui-default/i18n.ts @@ -0,0 +1,14 @@ +import { setLocaleData } from 'vj/components/monaco/nls'; + +export default async function load() { + let resource; + const lang = UserContext.viewLang; + if (lang === 'zh') { + resource = await import('monaco-editor-nls/locale/zh-hans.json'); + } else if (lang === 'zh_TW') { + resource = await import('monaco-editor-nls/locale/zh-hant.json'); + } else if (lang === 'ko') { + resource = await import('monaco-editor-nls/locale/ko.json'); + } + if (resource) setLocaleData(resource); +} diff --git a/packages/ui-default/misc/icons/book.svg b/packages/ui-default/misc/icons/book.svg new file mode 100644 index 00000000..ed043fe9 --- /dev/null +++ b/packages/ui-default/misc/icons/book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui-default/misc/icons/comparison.svg b/packages/ui-default/misc/icons/comparison.svg new file mode 100644 index 00000000..013e3613 --- /dev/null +++ b/packages/ui-default/misc/icons/comparison.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui-default/misc/icons/stopwatch.svg b/packages/ui-default/misc/icons/stopwatch.svg new file mode 100644 index 00000000..6c005f11 --- /dev/null +++ b/packages/ui-default/misc/icons/stopwatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index ef087a0f..dc6ab211 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.27.10", + "version": "4.27.11", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", @@ -11,8 +11,8 @@ }, "devDependencies": { "@blueprintjs/core": "^3.52.0", - "@blueprintjs/icons": "^3.31.0", "@hydrooj/utils": "workspace:*", + "@types/gulp-if": "^0.0.34", "@types/jquery": "^3.5.10", "@types/json-schema": "^7.0.9", "@types/katex": "^0.11.1", diff --git a/packages/ui-default/templates/problem_detail.html b/packages/ui-default/templates/problem_detail.html index ee31ad76..f3aa33e1 100644 --- a/packages/ui-default/templates/problem_detail.html +++ b/packages/ui-default/templates/problem_detail.html @@ -50,10 +50,10 @@
    {{ _('ID') }}: {{ pdoc.docId }} - {{ _('problem_type.' + pdoc.config.type).format(pdoc.config.subType) }} + {{ _('problem_type.' + pdoc.config.type).format(pdoc.config.subType) }} {% if pdoc.config.type != 'objective' and pdoc.config.type != 'submit_answer' %} - {{ pdoc.config.timeMax if pdoc.config.timeMax == pdoc.config.timeMin else pdoc.config.timeMin+'~'+pdoc.config.timeMax }}ms - {{ pdoc.config.memoryMax if pdoc.config.memoryMax == pdoc.config.memoryMin else pdoc.config.memoryMin+'~'+pdoc.config.memoryMax }}MiB + {{ pdoc.config.timeMax if pdoc.config.timeMax == pdoc.config.timeMin else pdoc.config.timeMin+'~'+pdoc.config.timeMax }}ms + {{ pdoc.config.memoryMax if pdoc.config.memoryMax == pdoc.config.memoryMin else pdoc.config.memoryMin+'~'+pdoc.config.memoryMax }}MiB {% endif %} {% if not tdoc %} {{ _('Tried') }}: {{ pdoc.nSubmit }} diff --git a/packages/ui-default/theme/default.js b/packages/ui-default/theme/default.js index 29413a7a..89de0111 100644 --- a/packages/ui-default/theme/default.js +++ b/packages/ui-default/theme/default.js @@ -5,7 +5,6 @@ import 'pickadate/lib/themes/classic.date.css'; import 'pickadate/lib/themes/classic.time.css'; import 'katex/dist/katex.min.css'; import '@blueprintjs/core/lib/css/blueprint.css'; -import '@blueprintjs/icons/lib/css/blueprint-icons.css'; import 'vj/misc/float.styl'; import 'vj/misc/typography.styl';