From 5d02c5aae57729c40a1847ef3bee7b294fe8525b Mon Sep 17 00:00:00 2001 From: imzlh <2131601562@qq.com> Date: Sat, 5 Oct 2024 10:45:20 +0800 Subject: [PATCH] new: use mammoth to render docx --- package.json | 18 +++++++++------- public/app/word.webp | Bin 0 -> 4386 bytes src/opener.ts | 20 +++++++++++++++++ src/opener/docx.vue | 50 +++++++++++++++++++++++++++++++++++++++++++ vite.config.ts | 5 +++-- 5 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 public/app/word.webp create mode 100644 src/opener/docx.vue diff --git a/package.json b/package.json index adc0b68..4583cd3 100644 --- a/package.json +++ b/package.json @@ -31,26 +31,27 @@ "build-only": "vite build", "type-check": "vue-tsc --build --force" }, - "dependencies": {}, "devDependencies": { - "@types/node": "^20.14.11", - "cheap": "https://github.com/zhaohappy/cheap.git", - "libmedia-common": "https://github.com/zhaohappy/common.git", - "npm-run-all2": "^6.1.2", "@muyajs/core": "^0.0.32", "@petamoriken/float16": "^3.8.7", "@tldraw/assets": "^2.4.6", + "@types/ini": "^4.1.1", + "@types/node": "^20.14.11", "@vitejs/plugin-vue": "^5.0.4", "@vue/tsconfig": "^0.5.1", "@webtoon/psd": "^0.4.0", "artplayer": "^5.1.5", "asciinema-player": "^3.8.0", "assjs": "^0.1.0", + "cheap": "https://github.com/zhaohappy/cheap.git", "ini": "^5.0.0", "jssha": "^3.3.1", "libmedia": "https://github.com/zhaohappy/libmedia.git", + "libmedia-common": "https://github.com/zhaohappy/common.git", "lrc-kit": "^1.1.1", + "mammoth": "^1.8.0", "monaco-editor": "^0.50.0", + "npm-run-all2": "^6.1.2", "react-filerobot-image-editor": "^4.8.1", "sass": "^1.77.4", "tldraw": "^2.4.6", @@ -59,8 +60,9 @@ "vite-plugin-pwa": "^0.20.0", "vue": "^3.4.21", "vue-reader": "^1.2.15", - "vue-tsc": "^2.0.11", - "@types/ini": "^4.1.1" + "vue-tsc": "^2.0.11" }, - "files": ["dist/**"] + "files": [ + "dist/**" + ] } diff --git a/public/app/word.webp b/public/app/word.webp new file mode 100644 index 0000000000000000000000000000000000000000..518a285e4ab199626392fbae69e983a35fdd528f GIT binary patch literal 4386 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 RB|`aKVgfaj(5x9n;6I#Op9=s0 literal 0 HcmV?d00001 diff --git a/src/opener.ts b/src/opener.ts index 95e32fb..13228be 100644 --- a/src/opener.ts +++ b/src/opener.ts @@ -13,6 +13,7 @@ import I_MEDIA from '/app/video.webp'; import I_PS from '/app/ps.webp'; import I_ASCIINEMA from '/app/asciinema.svg'; import I_NOTES from '/app/notes.webp'; +import I_WORD from '/app/word.webp'; export const OPENER:Array = [ // Monaco-Editor(VsCode) @@ -76,6 +77,25 @@ export const OPENER:Array = [ }); }, }, + // mammoth.js + // @link https://github.com/mwilliamson/mammoth.js + { + "name": "Docx Viewer", + "type": "text/docx", + "typeDesc": "在线读取docx文档,基于mammoth.js", + "icon": I_WORD, + "format": [ + "docx" + ], + async open(file) { + createWindow({ + "content": (await import('@/opener/docx.vue')).default, + "icon": I_WORD, + "name": file.name + " - Docx Viewer", + "option": file + }); + }, + }, // asciinema // @link https://asciinema.org/ { diff --git a/src/opener/docx.vue b/src/opener/docx.vue new file mode 100644 index 0000000..cf480a6 --- /dev/null +++ b/src/opener/docx.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index c00bd58..63ec551 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -219,7 +219,8 @@ export default defineConfig({ '/vscode', '/epub', '/psd', - '/whiteboard' + '/whiteboard', + '/docx' ].some(item => id.includes(item))) ) return 'main'; // monaco @@ -238,7 +239,7 @@ export default defineConfig({ if(id.includes('/asciinema')) return 'asciinema'; // additional pack - if(id.includes('/psd') || id.includes('/artplayer') || id.includes('/epub.vue') || id.includes('vue-reader')) + if(id.includes('/psd') || id.includes('/artplayer') || id.includes('/epub.vue') || id.includes('vue-reader') || id.includes('docx')) return 'additional'; }, },