ui: fix #74 (multi-lang edit for problem)

This commit is contained in:
undefined committed 2021-04-26 22:00:15 +08:00
1 parent ef5ee468bd
commit ebaa3f290b
10 files changed
+117 -85

No files matched your search

+69 -41
View File
@@ -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 });
})
});
@@ -1,6 +0,0 @@
import { NamedPage } from 'vj/misc/Page';
const page = new NamedPage('problem_import', async () => {
});
export default page;