diff --git a/packages/onlyoffice/package.json b/packages/onlyoffice/package.json index 841070c42..e799df2fd 100644 --- a/packages/onlyoffice/package.json +++ b/packages/onlyoffice/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/onlyoffice", - "version": "1.1.0", + "version": "1.1.1", "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 f3066c42d..63fe7682a 100644 --- a/packages/onlyoffice/public/office.page.js +++ b/packages/onlyoffice/public/office.page.js @@ -1,100 +1,74 @@ (() => { const { AutoloadPage } = window.Hydro; const { $ } = window.node_modules; - const { request } = window.Hydro.utils; let loaded = false; async function load() { if (loaded) return Promise.resolve(); - return new Promise((resolve) => { + 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.onerror = reject; loaded = true; }); } + const loader = mode => async (element) => { + const id = `${mode}-${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 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(url, window.location.href), + permissions: { + comment: false, + copy: true, + download: true, + edit: false, + fillForms: false, + modifyContentControl: false, + modifyFilter: false, + print: true, + protect: false, + review: false, + }, + }, + editorConfig: { + lang, + mode: 'view', + user: { + group: "Hydro", + id: UserContext._id.toString(), + name: UserContext.uname, + }, + }, + documentType: mode, + height: mode === 'slide' ? '560px' : '900px', + }); + } + + const getEles = types => { + const eles = []; + for (const type of types) eles.push(...$('div[data-' + type + ']').get()); + return eles; + } + const page = new AutoloadPage('onlyoffice', async () => { - let res = $('div[data-doc]'); - if (res.length) await load(); - res.get().forEach(async (element) => { - const id = `doc-${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: 'view', - }, - documentType: 'word', - 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', - }); - }); + let all = getEles(['doc', 'docx', 'cell', 'xls', 'xlsx', 'slide', 'ppt', 'pptx']); + 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')); }); window.Hydro.extraPages.push(page);