mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
ui: fix #74 (multi-lang edit for problem)
This commit is contained in:
1 parent
ef5ee468bd
commit
ebaa3f290b
10 files changed
+117
-85
No files matched your search
@@ -177,50 +177,78 @@ export default new NamedPage(['problem_create', 'problem_edit'], (pagename) => {
|
||||
});
|
||||
}, 50);
|
||||
|
||||
CmEditor.getOrConstruct($('textarea[data-markdown-upload]'), {
|
||||
upload: {
|
||||
accept: 'image/*,.mp3, .wav, .zip',
|
||||
url: './files',
|
||||
extraData: {
|
||||
type: 'additional_file',
|
||||
operation: 'upload_file',
|
||||
},
|
||||
multiple: false,
|
||||
fieldName: 'file',
|
||||
setHeaders() {
|
||||
return { accept: 'application/json' };
|
||||
},
|
||||
format(files, resp) {
|
||||
const res = JSON.parse(resp);
|
||||
if (res.error) {
|
||||
return JSON.stringify({
|
||||
msg: res.error.message,
|
||||
code: -1,
|
||||
data: {
|
||||
errFiles: [files[0].name],
|
||||
succMap: {},
|
||||
},
|
||||
});
|
||||
}
|
||||
const $main = $('textarea[data-markdown-upload]');
|
||||
let content = $main.val();
|
||||
let isObject = false;
|
||||
try {
|
||||
content = JSON.parse(content);
|
||||
isObject = !(content instanceof Array);
|
||||
if (!isObject) content = JSON.stringify(content);
|
||||
} catch (e) { }
|
||||
const upload = {
|
||||
accept: 'image/*,.mp3, .wav, .zip',
|
||||
url: './files',
|
||||
extraData: {
|
||||
type: 'additional_file',
|
||||
operation: 'upload_file',
|
||||
},
|
||||
multiple: false,
|
||||
fieldName: 'file',
|
||||
setHeaders() {
|
||||
return { accept: 'application/json' };
|
||||
},
|
||||
format(files, resp) {
|
||||
const res = JSON.parse(resp);
|
||||
if (res.error) {
|
||||
return JSON.stringify({
|
||||
msg: '',
|
||||
code: 0,
|
||||
msg: res.error.message,
|
||||
code: -1,
|
||||
data: {
|
||||
errFiles: [],
|
||||
succMap: {
|
||||
[files[0].name]: `file://${files[0].name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5.)]/g, '')
|
||||
.replace(/[?\\/:|<>*[\]()$%{}@~]/g, '')
|
||||
.replace('/\\s/g', '')}`,
|
||||
},
|
||||
errFiles: [files[0].name],
|
||||
succMap: {},
|
||||
},
|
||||
});
|
||||
},
|
||||
filename(name) {
|
||||
return name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5.)]/g, '')
|
||||
.replace(/[?\\/:|<>*[\]()$%{}@~]/g, '')
|
||||
.replace('/\\s/g', '');
|
||||
},
|
||||
validate: () => (pagename === 'problem_create' ? i18n('Cannot upload file before problem is created.') : true),
|
||||
}
|
||||
return JSON.stringify({
|
||||
msg: '',
|
||||
code: 0,
|
||||
data: {
|
||||
errFiles: [],
|
||||
succMap: {
|
||||
[files[0].name]: `file://${files[0].name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5.)]/g, '')
|
||||
.replace(/[?\\/:|<>*[\]()$%{}@~]/g, '')
|
||||
.replace(/\s/g, '')}`,
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
filename(name) {
|
||||
return name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5.)]/g, '')
|
||||
.replace(/[?\\/:|<>*[\]()$%{}@~]/g, '')
|
||||
.replace(/\s/g, '');
|
||||
},
|
||||
validate: () => (pagename === 'problem_create' ? i18n('Cannot upload file before problem is created.') : true),
|
||||
};
|
||||
$('textarea[data-content]').each(function () {
|
||||
const $dom = $(this);
|
||||
let i = $dom.attr('data-content');
|
||||
let c = '';
|
||||
if (isObject) {
|
||||
if (content[i]) c = content[i];
|
||||
else {
|
||||
const list = Object.keys(content).filter(l => l.startsWith(i));
|
||||
if (list.length) c = content[list[0]];
|
||||
i = list[0];
|
||||
}
|
||||
} else c = content;
|
||||
if (typeof c !== 'string') c = JSON.stringify(c);
|
||||
$dom.val(c);
|
||||
function onChange(val) {
|
||||
const empty = /^\s*$/g.test(val);
|
||||
if (empty) delete content[i];
|
||||
else content[i] = val;
|
||||
$main.val(JSON.stringify(content));
|
||||
}
|
||||
CmEditor.getOrConstruct($dom, { upload, onChange });
|
||||
})
|
||||
});
|
||||
Reference in new issue
Block a user