mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
ui: frontend api (#470) [skip-cache]
This commit is contained in:
1 parent
6d69e88739
commit
96fa6cc7b9
116 files changed
+599
-629
No files matched your search
@@ -2,7 +2,7 @@ import { pick } from 'lodash';
|
||||
import React from 'react';
|
||||
import { createRoot } from 'react-dom/client';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import request from 'vj/utils/request';
|
||||
import { request } from 'vj/utils';
|
||||
|
||||
const defaultQuery = `\
|
||||
query Example(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatSeconds } from '@hydrooj/utils/lib/common';
|
||||
import NProgress from 'nprogress';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import { tpl } from 'vj/utils';
|
||||
|
||||
const contestTimer = $(tpl`<pre class="contest-timer" style="display:none"></pre>`);
|
||||
contestTimer.appendTo(document.body);
|
||||
|
||||
@@ -2,9 +2,7 @@ import $ from 'jquery';
|
||||
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
|
||||
import { ConfirmDialog } from 'vj/components/dialog';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
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 });
|
||||
|
||||
@@ -4,10 +4,9 @@ import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoCom
|
||||
import { ActionDialog, ConfirmDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import api, { gql } from 'vj/utils/api';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
api, delay, gql, i18n, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
function update(name: string, uids: number[]) {
|
||||
return api(gql`
|
||||
|
||||
@@ -3,10 +3,9 @@ import _ from 'lodash';
|
||||
import { ActionDialog, ConfirmDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
delay, i18n, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('domain_role', () => {
|
||||
const createRoleDialog = new ActionDialog({
|
||||
|
||||
@@ -4,10 +4,9 @@ import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoCom
|
||||
import { ActionDialog, ConfirmDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
delay, i18n, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('domain_user', () => {
|
||||
const addUserSelector = UserSelectAutoComplete.getOrConstruct($('.dialog__body--add-user [name="user"]'));
|
||||
|
||||
@@ -4,10 +4,9 @@ import { ConfirmDialog } from 'vj/components/dialog/index';
|
||||
import Notification from 'vj/components/notification';
|
||||
import uploadFiles from 'vj/components/upload';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import pjax from 'vj/utils/pjax';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
i18n, pjax, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
function ensureAndGetSelectedFiles() {
|
||||
const files = _.map(
|
||||
|
||||
@@ -4,8 +4,7 @@ import { createRoot } from 'react-dom/client';
|
||||
import VjNotification from 'vj/components/notification';
|
||||
import selectUser from 'vj/components/selectUser';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import api, { gql } from 'vj/utils/api';
|
||||
import loadReactRedux from 'vj/utils/loadReactRedux';
|
||||
import { api, gql, loadReactRedux } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('home_messages', () => {
|
||||
let reduxStore;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import $ from 'jquery';
|
||||
import { renderLanguageSelect } from 'vj/components/languageselect';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import getAvailableLangs from 'vj/utils/availableLangs';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
delay, getAvailableLangs, i18n, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
async function initCodeLangHelper() {
|
||||
const $el = $(tpl`<div class="row" id="codelang-select"></div>`);
|
||||
|
||||
@@ -3,10 +3,9 @@ import QRCode from 'qrcode';
|
||||
import { ActionDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import api, { gql } from 'vj/utils/api';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
api, delay, gql, i18n, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
export default new NamedPage('home_security', () => {
|
||||
$(document).on('click', '[name="tfa_enable"]', async () => {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import $ from 'jquery';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import { parse as parseMongoId } from 'vj/utils/mongoId';
|
||||
import { i18n, mongoId } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('homework_main', async () => {
|
||||
// Homework Calendar
|
||||
@@ -13,7 +12,7 @@ const page = new NamedPage('homework_main', async () => {
|
||||
title: doc.title,
|
||||
maskFrom: doc.penaltySince ? doc.penaltySince : null,
|
||||
maskTitle: i18n('Time Extension'),
|
||||
colorIndex: parseMongoId(doc._id).timestamp % 12,
|
||||
colorIndex: mongoId(doc._id).timestamp % 12,
|
||||
link: doc.url,
|
||||
}));
|
||||
const calendar = new Calendar(events);
|
||||
|
||||
@@ -2,7 +2,7 @@ import $ from 'jquery';
|
||||
import { ActionDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import request from 'vj/utils/request';
|
||||
import { request } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('manage_script', () => {
|
||||
const runScriptDialog = new ActionDialog({
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import $ from 'jquery';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import { delay, i18n, request } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('manage_user_import', () => {
|
||||
async function post(draft) {
|
||||
|
||||
@@ -3,9 +3,7 @@ import { ActionDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import selectUser from 'vj/components/selectUser';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import pjax from 'vj/utils/pjax';
|
||||
import request from 'vj/utils/request';
|
||||
import { i18n, pjax, request } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('manage_user_priv', () => {
|
||||
const setPrivDialog = new ActionDialog({
|
||||
|
||||
@@ -10,10 +10,9 @@ import { configYamlFormat } from 'vj/components/problemconfig/ProblemConfigEdito
|
||||
import uploadFiles from 'vj/components/upload';
|
||||
import download from 'vj/components/zipDownloader';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import loadReactRedux from 'vj/utils/loadReactRedux';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
i18n, loadReactRedux, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('problem_config', () => {
|
||||
let reduxStore;
|
||||
@@ -72,7 +71,7 @@ const page = new NamedPage('problem_config', () => {
|
||||
async function handleClickDownloadAll() {
|
||||
const files = reduxStore.getState().testdata.map((i) => i.name);
|
||||
const { links, pdoc } = await request.post('./files', { operation: 'get_links', files, type: 'testdata' });
|
||||
const targets = [];
|
||||
const targets: { filename: string, url: string }[] = [];
|
||||
for (const filename of Object.keys(links)) targets.push({ filename, url: links[filename] });
|
||||
await download(`${pdoc.docId} ${pdoc.title}.zip`, targets);
|
||||
}
|
||||
@@ -103,7 +102,7 @@ const page = new NamedPage('problem_config', () => {
|
||||
|
||||
store.dispatch({
|
||||
type: 'CONFIG_LOAD',
|
||||
payload: request.get(),
|
||||
payload: request.get(''),
|
||||
});
|
||||
const unsubscribe = store.subscribe(() => {
|
||||
// TODO set yaml schema
|
||||
@@ -124,7 +123,7 @@ const page = new NamedPage('problem_config', () => {
|
||||
subtasks: normalizeSubtasks(subtasks, (i) => i, state.config.time, state.config.memory, true),
|
||||
});
|
||||
});
|
||||
createRoot($('#ProblemConfig').get(0)).render(
|
||||
createRoot(document.getElementById('ProblemConfig')!).render(
|
||||
<Provider store={store}>
|
||||
<div className="row">
|
||||
<div className="medium-5 columns">
|
||||
|
||||
@@ -6,12 +6,9 @@ import { createRoot } from 'react-dom/client';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { downloadProblemSet } from 'vj/components/zipDownloader';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import loadReactRedux from 'vj/utils/loadReactRedux';
|
||||
import pjax from 'vj/utils/pjax';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
delay, i18n, loadReactRedux, pjax, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
class ProblemPageExtender {
|
||||
constructor() {
|
||||
|
||||
@@ -8,10 +8,9 @@ import Notification from 'vj/components/notification';
|
||||
import uploadFiles from 'vj/components/upload';
|
||||
import download from 'vj/components/zipDownloader';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import { slideDown, slideUp } from 'vj/utils/slide';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
i18n, request, slideDown, slideUp, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
const categories = {};
|
||||
const dirtyCategories = [];
|
||||
|
||||
@@ -7,10 +7,9 @@ import { previewFile } from 'vj/components/preview/preview.page';
|
||||
import uploadFiles from 'vj/components/upload';
|
||||
import download from 'vj/components/zipDownloader';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import pjax from 'vj/utils/pjax';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
i18n, pjax, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
async function downloadProblemFilesAsArchive(type, files) {
|
||||
const { links, pdoc } = await request.post('', { operation: 'get_links', files, type });
|
||||
|
||||
@@ -6,11 +6,9 @@ import createHint from 'vj/components/hint';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { downloadProblemSet } from 'vj/components/zipDownloader';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import delay from 'vj/utils/delay';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import pjax from 'vj/utils/pjax';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import {
|
||||
delay, i18n, pjax, request, tpl,
|
||||
} from 'vj/utils';
|
||||
|
||||
const categories = {};
|
||||
const dirtyCategories = [];
|
||||
|
||||
@@ -2,9 +2,7 @@ import $ from 'jquery';
|
||||
import { ActionDialog, ConfirmDialog } from 'vj/components/dialog';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import { i18n, request, tpl } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage([
|
||||
'problem_create', 'problem_edit', 'problem_solution', 'problem_submit',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import $ from 'jquery';
|
||||
import { renderLanguageSelect } from 'vj/components/languageselect';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import getAvailableLangs from 'vj/utils/availableLangs';
|
||||
import { getAvailableLangs } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage(['problem_submit', 'contest_detail_problem_submit', 'homework_detail_problem_submit'], async () => {
|
||||
const { config } = UiContext.pdoc;
|
||||
|
||||
@@ -2,8 +2,7 @@ import $ from 'jquery';
|
||||
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
|
||||
import UserSelectAutoComplete from 'vj/components/autocomplete/UserSelectAutoComplete';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import getAvailableLangs from 'vj/utils/availableLangs';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import { getAvailableLangs, tpl } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('record_main', async () => {
|
||||
const [{ default: WebSocket }, { DiffDOM }] = await Promise.all([
|
||||
|
||||
@@ -2,7 +2,7 @@ import yaml from 'js-yaml';
|
||||
import Schema from 'schemastery';
|
||||
import Notification from 'vj/components/notification';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import request from 'vj/utils/request';
|
||||
import { request } from 'vj/utils';
|
||||
|
||||
const page = new NamedPage('manage_config', async () => {
|
||||
const schema = new Schema(UiContext.schema);
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import $ from 'jquery';
|
||||
import { ConfirmDialog } from 'vj/components/dialog';
|
||||
import { NamedPage } from 'vj/misc/Page';
|
||||
import i18n from 'vj/utils/i18n';
|
||||
import request from 'vj/utils/request';
|
||||
import tpl from 'vj/utils/tpl';
|
||||
import { i18n, request, tpl } from 'vj/utils';
|
||||
|
||||
export default new NamedPage('training_edit', () => {
|
||||
let confirmed = false;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import $ from 'jquery';
|
||||
import { AutoloadPage } from 'vj/misc/Page';
|
||||
import api, { gql } from 'vj/utils/api';
|
||||
import { api, gql } from 'vj/utils';
|
||||
|
||||
export default new AutoloadPage('user_login', (pagename) => {
|
||||
(pagename === 'user_login' ? $(document) : $('.dialog--signin__main')).on('blur', '[name="uname"]', async () => {
|
||||
|
||||
Reference in new issue
Block a user