mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01: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 */
|
/* 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));
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
@@ -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', {
|
||||||
|
|||||||
Reference in new issue
Block a user