core&ui: goodbye, minio (#417)

This commit is contained in:
undefined authored and GitHub committed 2022-08-23 00:40:21 +08:00
1 parent 7abc0a7d1b
commit e06c86e9dd
34 files changed
+410 -322

No files matched your search

+3 -2
View File
@@ -96,7 +96,7 @@ export default function (env: { production?: boolean, measure?: boolean } = {})
chunkFilename: '[name].[chunkhash].chunk.js',
},
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
extensions: ['.js', '.jsx', '.ts', '.tsx', '.cjs'],
alias: {
vj: root(),
},
@@ -148,8 +148,9 @@ export default function (env: { production?: boolean, measure?: boolean } = {})
},
},
{
test: /\.[jt]sx?$/,
test: /\.[mc]?[jt]sx?$/,
exclude: /@types\//,
type: 'javascript/auto',
use: [esbuildLoader()],
},
{
@@ -107,7 +107,6 @@ async function onCommentClickReplyComment(ev, options: any = {}) {
}
async function onCommentClickReplyReply(ev) {
console.log(ev);
const $evTarget = $(ev.currentTarget);
const $mediaBody = $evTarget.closest('.media__body');
const uid = $mediaBody
@@ -7,7 +7,6 @@ function runSubstitute($container: JQuery<Document | HTMLElement>) {
$container.find(`textarea[data-${language}]`).get().forEach((element) => {
const config: any = { language };
if ($(element).data('model')) config.model = $(element).data('model');
if ($(element).data('hide')) config.hide = $(element).data('hide');
CmEditor.getOrConstruct($(element), config);
});
}
@@ -98,7 +98,7 @@ setDiagnosticsOptions({
schema: problemConfigSchema as any,
},
{
uri: `${UiContext.cdn_prefix}manage/setting/schema.json`,
uri: '/manage/config/schema.json',
fileMatch: ['hydro://system/setting.yaml'],
},
],
+11
View File
@@ -11,9 +11,12 @@ import user from 'hydrooj/src/model/user';
import * as bus from 'hydrooj/src/service/bus';
import { UiContextBase } from 'hydrooj/src/service/layers/base';
import { Handler, Route } from 'hydrooj/src/service/server';
import { SystemSettings } from 'hydrooj/src/settings';
import { ObjectID } from 'mongodb';
import { tmpdir } from 'os';
import { join } from 'path';
import Schema from 'schemastery';
import convert from 'schemastery-jsonschema';
import markdown from './backendlib/markdown';
declare module 'hydrooj/src/interface' {
@@ -157,6 +160,13 @@ class LanguageHandler extends ResourceHandler {
}
}
class SystemConfigSchemaHandler extends Handler {
async get() {
const schema = convert(Schema.intersect(SystemSettings) as any, true);
this.response.body = schema;
}
}
class RichMediaHandler extends Handler {
async renderUser(domainId, payload) {
let d = payload.domainId || domainId;
@@ -213,6 +223,7 @@ global.Hydro.handler.ui = async () => {
Route('set_theme', '/set_theme/:theme', SetThemeHandler);
Route('constant', '/constant/:version', UiConstantsHandler);
Route('markdown', '/markdown', MarkdownHandler);
Route('config_schema', '/manage/config/schema.json', SystemConfigSchemaHandler, PRIV.PRIV_EDIT_SYSTEM);
Route('lang', '/l/:lang', LanguageHandler);
Route('media', '/media', RichMediaHandler);
};
+2 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@hydrooj/ui-default",
"version": "4.39.8",
"version": "4.39.9",
"author": "undefined <i@undefined.moe>",
"license": "AGPL-3.0",
"main": "hydro.js",
@@ -129,6 +129,7 @@
"mongodb": "^3.7.3",
"nunjucks": "^3.2.3",
"p-queue": "^7.3.0",
"schemastery-jsonschema": "^1.0.3",
"streamsaver": "^2.0.6",
"xss": "^1.0.14"
}
@@ -0,0 +1,29 @@
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';
const page = new NamedPage('manage_config', async () => {
const schema = new Schema(UiContext.schema);
setInterval(() => {
try {
const v = yaml.load($('#config').val().toString());
schema(v);
$('#info').text('');
} catch (e) {
console.debug(e);
$('#info').text(e.message);
}
}, 1000);
$('#submit').on('click', () => {
const value = $('#config').val();
request.post('', { value }).then(() => {
Notification.success('保存成功');
}).catch((e) => {
Notification.error('保存失败:', e.message);
});
});
});
export default page;
@@ -16,6 +16,7 @@
{{ sidemenu.render_item(null, 'manage_script') }}
{{ sidemenu.render_item(null, 'manage_user_import') }}
{{ sidemenu.render_item(null, 'manage_setting') }}
{{ sidemenu.render_item(null, 'manage_config') }}
</ol>
</li>
</ol>
@@ -0,0 +1,24 @@
{% extends "manage_base.html" %}
{% block manage_content %}
{{ set(UiContext, 'schema', schema) }}
<div class="section">
<div class="section__body typo">
<div class="row">
<div class="medium-10 columns form__item">
<label>
config
<div name="form_item_config" class="textarea-container">
<textarea id="config" data-yaml data-model="hydro://system/setting.yaml" placeholder="" class="textbox">{{ value }}</textarea>
</div>
</label>
<p class="help-text" id="info"></p>
</div>
</div>
<div class="row">
<div class="medium-10 columns form__item end">
<button id="submit" class="rounded primary button">{{ _('Save All Changes') }}</button>
</div>
</div>
</div>
</div>
{% endblock %}
@@ -8,7 +8,6 @@
{% if not setting.flag|bitand(model.setting.FLAG_HIDDEN) %}
{% set secret = setting.flag|bitand(model.setting.FLAG_SECRET) != 0 %}
{% if setting.type == 'text' or setting.type == 'password' or setting.type == 'number' or setting.type == 'float' %}
{% set isFileConfig = (setting.name === 'file.accessKey' or setting.name === 'file.secretKey') and process.env.MINIO_ACCESS_KEY %}
{{ form.form_text({
type:setting.type,
label:setting.name,
@@ -16,7 +15,7 @@
name:setting.key,
value:'' if (secret or isFileConfig) else (current[setting.key]|default(setting.value)),
disabled:setting.flag|bitand(2),
placeholder:'Please edit in ~/.hydro/env instead' if isFileConfig else (_('(Not changed)') if secret else '')
placeholder:_('(Not changed)') if secret else ''
}) }}
{% elif setting.type == 'select' %}
{{ form.form_select({