mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
core&ui: goodbye, minio (#417)
This commit is contained in:
1 parent
7abc0a7d1b
commit
e06c86e9dd
34 files changed
+410
-322
No files matched your search
@@ -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,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);
|
||||
};
|
||||
@@ -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({
|
||||
|
||||
Reference in new issue
Block a user