onlyoffice: add hint for load fail

This commit is contained in:
undefined committed 2024-10-17 11:05:06 +08:00
1 parent ad0b4bd63e
commit 13dd711bd5
2 files changed
+33 -10

No files matched your search

+21 -10
View File
@@ -1,19 +1,23 @@
/* eslint-disable github/array-foreach */ /* eslint-disable github/array-foreach */
import { import {
$, addPage, AutoloadPage, request, $, addPage, AutoloadPage, i18n, Notification, request,
} from '@hydrooj/ui-default'; } from '@hydrooj/ui-default';
/* global DocsAPI */ /* global DocsAPI */
let loaded = false; let loaded = false;
async function load() { function load(): Promise<boolean> {
if (loaded) return Promise.resolve(); 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) => { return new Promise((resolve, reject) => {
const scriptElement = document.createElement('script'); const scriptElement = document.createElement('script');
scriptElement.src = UiContext.onlyofficeApi; scriptElement.src = UiContext.onlyofficeApi;
scriptElement.async = true; scriptElement.async = true;
document.head.appendChild(scriptElement); document.head.appendChild(scriptElement);
scriptElement.onload = resolve; scriptElement.onload = () => resolve(true);
scriptElement.onerror = reject; scriptElement.onerror = reject;
loaded = true; loaded = true;
}); });
@@ -40,9 +44,16 @@ const getEles = (types: string[]) => types.flatMap((type) => $(`div[data-${type}
addPage(new AutoloadPage('onlyoffice', async () => { addPage(new AutoloadPage('onlyoffice', async () => {
const all = getEles(['doc', 'docx', 'cell', 'xls', 'xlsx', 'slide', 'ppt', 'pptx', 'pdf']); const all = getEles(['doc', 'docx', 'cell', 'xls', 'xlsx', 'slide', 'ppt', 'pptx', 'pdf']);
if (all.length) await load(); if (!all.length) return;
getEles(['doc', 'docx']).forEach(loader('word')); try {
getEles(['cell', 'xls', 'xlsx']).forEach(loader('cell')); const result = await load();
getEles(['slide', 'ppt', 'pptx']).forEach(loader('slide')); if (!result) return;
getEles(['pdf']).forEach(loader('pdf')); 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));
}
})); }));
+12
View File
@@ -84,6 +84,18 @@ export function apply(ctx: Context) {
enumerable: false, 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); ctx.Route('onlyoffice-jwt', '/onlyoffice-jwt', OnlyofficeJWTHandler);
if (SystemModel.get('onlyoffice.pdf')) { if (SystemModel.get('onlyoffice.pdf')) {
ctx.provideModule('richmedia', 'pdf', { ctx.provideModule('richmedia', 'pdf', {