mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
onlyoffice: add hint for load fail
This commit is contained in:
2 files changed
+33
-10
No files matched your search
@@ -1,19 +1,23 @@
|
||||
/* eslint-disable github/array-foreach */
|
||||
import {
|
||||
$, addPage, AutoloadPage, request,
|
||||
$, addPage, AutoloadPage, i18n, Notification, request,
|
||||
} from '@hydrooj/ui-default';
|
||||
|
||||
/* global DocsAPI */
|
||||
|
||||
let loaded = false;
|
||||
async function load() {
|
||||
if (loaded) return Promise.resolve();
|
||||
function load(): Promise<boolean> {
|
||||
if (loaded) return Promise.resolve(true);
|
||||
if (!UiContext.onlyofficeApi) {
|
||||
console.error('Onlyoffice api not set');
|
||||
Notification.error(i18n('onlyoffice.not_configured'));
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const scriptElement = document.createElement('script');
|
||||
scriptElement.src = UiContext.onlyofficeApi;
|
||||
scriptElement.async = true;
|
||||
document.head.appendChild(scriptElement);
|
||||
scriptElement.onload = resolve;
|
||||
scriptElement.onload = () => resolve(true);
|
||||
scriptElement.onerror = reject;
|
||||
loaded = true;
|
||||
});
|
||||
@@ -40,9 +44,16 @@ const getEles = (types: string[]) => types.flatMap((type) => $(`div[data-${type}
|
||||
|
||||
addPage(new AutoloadPage('onlyoffice', async () => {
|
||||
const all = getEles(['doc', 'docx', 'cell', 'xls', 'xlsx', 'slide', 'ppt', 'pptx', 'pdf']);
|
||||
if (all.length) await load();
|
||||
getEles(['doc', 'docx']).forEach(loader('word'));
|
||||
getEles(['cell', 'xls', 'xlsx']).forEach(loader('cell'));
|
||||
getEles(['slide', 'ppt', 'pptx']).forEach(loader('slide'));
|
||||
getEles(['pdf']).forEach(loader('pdf'));
|
||||
if (!all.length) return;
|
||||
try {
|
||||
const result = await load();
|
||||
if (!result) return;
|
||||
getEles(['doc', 'docx']).forEach(loader('word'));
|
||||
getEles(['cell', 'xls', 'xlsx']).forEach(loader('cell'));
|
||||
getEles(['slide', 'ppt', 'pptx']).forEach(loader('slide'));
|
||||
getEles(['pdf']).forEach(loader('pdf'));
|
||||
} catch (e) {
|
||||
console.error(`Failed to initialize onlyoffice: ${e.message}`);
|
||||
Notification.error(i18n('onlyoffice.inialize_fail', e.message));
|
||||
}
|
||||
}));
|
||||
@@ -84,6 +84,18 @@ export function apply(ctx: Context) {
|
||||
enumerable: false,
|
||||
});
|
||||
});
|
||||
|
||||
ctx.inject(['i18n'], (c) => {
|
||||
c.i18n.load('en', {
|
||||
'onlyoffice.not_configured': 'Onlyoffice API not configured.',
|
||||
'onlyoffice.initialize_fail': 'Failed to initialize onlyoffice: {0}',
|
||||
});
|
||||
c.i18n.load('zh', {
|
||||
'onlyoffice.not_configured': 'Onlyoffice 未配置。自行安装 onlyoffice 软件或是使用外部提供的 API。',
|
||||
'onlyoffice.initialize_fail': '初始化 onlyoffice 失败: {0}',
|
||||
});
|
||||
});
|
||||
|
||||
ctx.Route('onlyoffice-jwt', '/onlyoffice-jwt', OnlyofficeJWTHandler);
|
||||
if (SystemModel.get('onlyoffice.pdf')) {
|
||||
ctx.provideModule('richmedia', 'pdf', {
|
||||
|
||||
Reference in new issue
Block a user