ui: frontend api (#470) [skip-cache]

This commit is contained in:
undefined authored and GitHub committed 2022-12-12 00:53:44 +08:00
1 parent 6d69e88739
commit 96fa6cc7b9
116 files changed
+599 -629

No files matched your search

+1 -1
View File
@@ -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 -1
View File
@@ -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"]'));
+3 -4
View File
@@ -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([
+1 -1
View File
@@ -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 -1
View File
@@ -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 () => {