diff --git a/packages/onlyoffice/package.json b/packages/onlyoffice/package.json index 772246155..b2ec1ebea 100644 --- a/packages/onlyoffice/package.json +++ b/packages/onlyoffice/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/onlyoffice", - "version": "1.0.1", + "version": "1.0.2", "main": "package.json", "repository": "git@github.com:hydro-dev/Hydro.git", "author": "undefined ", diff --git a/packages/onlyoffice/public/office.page.js b/packages/onlyoffice/public/office.page.js index 474053d97..d507b6a74 100644 --- a/packages/onlyoffice/public/office.page.js +++ b/packages/onlyoffice/public/office.page.js @@ -3,17 +3,22 @@ const { $ } = window.node_modules; const { request } = window.Hydro.utils; + let loaded = false; + async function load() { + if (loaded) return Promise.resolve(); + return new Promise((resolve) => { + const scriptElement = document.createElement('script'); + scriptElement.src = UiContext.onlyofficeApi; + scriptElement.async = true; + document.head.appendChild(scriptElement); + scriptElement.onload = resolve; + loaded = true; + }); + } + const page = new AutoloadPage('onlyoffice', async () => { const res = $('div[data-doc]'); - if (res.length) { - await new Promise((resolve) => { - const scriptElement = document.createElement('script'); - scriptElement.src = UiContext.onlyofficeApi; - scriptElement.async = true; - document.head.appendChild(scriptElement); - scriptElement.onload = resolve; - }); - } + if (res.length) await load(); res.get().forEach(async (element) => { const id = `doc-${Math.random().toString()}`; $(element).attr('id', id); @@ -38,6 +43,58 @@ height: '980px', }); }); + res = $('div[data-cell]'); + if (res.length) await load(); + res.get().forEach(async (element) => { + const id = `cell-${Math.random().toString()}`; + $(element).attr('id', id); + const url = $(element).text(); + const t = new URL(url, window.location.href).pathname.split('.'); + const n = new URL(url, window.location.href).pathname.split('/'); + const res = await request.get(url); + const lang = UserContext.viewLang.includes('_') ? UserContext.viewLang.split('_')[0] : UserContext.viewLang; + // eslint-disable-next-line no-undef + window.editor = new DocsAPI.DocEditor(id, { + document: { + fileType: t[t.length - 1], + key: Math.random().toString(16), + title: n[n.length - 1], + url: new URL(res.url, window.location.href), + }, + editorConfig: { + lang, + mode: 'cell', + }, + documentType: 'word', + height: '980px', + }); + }); + res = $('div[data-slide]'); + if (res.length) await load(); + res.get().forEach(async (element) => { + const id = `slide-${Math.random().toString()}`; + $(element).attr('id', id); + const url = $(element).text(); + const t = new URL(url, window.location.href).pathname.split('.'); + const n = new URL(url, window.location.href).pathname.split('/'); + const res = await request.get(url); + const lang = UserContext.viewLang.includes('_') ? UserContext.viewLang.split('_')[0] : UserContext.viewLang; + // eslint-disable-next-line no-undef + window.editor = new DocsAPI.DocEditor(id, { + document: { + fileType: t[t.length - 1], + key: Math.random().toString(16), + title: n[n.length - 1], + url: new URL(res.url, window.location.href), + }, + editorConfig: { + lang, + mode: 'slide', + }, + documentType: 'word', + height: '980px', + }); + }); }); window.Hydro.extraPages.push(page);