From 78a057d7fc3a42aff68e4e281c916094ef51967c Mon Sep 17 00:00:00 2001 From: Nick Bernal Date: Sat, 24 Aug 2024 16:10:36 -0700 Subject: [PATCH 1/3] Adds initial image node, removes pageBreak, adds lineBreak, fixes around links --- .../src/components/SuperEditor.vue | 3 +- .../src/components/toolbar/ButtonGroup.vue | 13 +- .../src/components/toolbar/LinkInput.vue | 46 ++++--- .../src/components/toolbar/defaultItems.js | 37 +++++- .../components/toolbar/use-toolbar-item.js | 2 + packages/super-editor/src/core/DocxZipper.js | 16 ++- .../super-editor/src/core/DocxZipper.test.js | 2 +- packages/super-editor/src/core/Editor.js | 7 +- .../super-editor/src/core/commands/index.js | 2 + .../src/core/commands/insertContent.js | 7 ++ .../src/core/commands/insertContentAt.js | 106 ++++++++++++++++ .../src/core/helpers/createNodeFromContent.js | 118 ++++++++++++++++++ .../src/core/helpers/getMarksFromSelection.js | 1 - .../core/helpers/selectionToInsertionEnd.js | 28 +++++ .../core/super-converter/SuperConverter.js | 7 +- .../src/core/super-converter/helpers.js | 14 ++- .../src/core/super-converter/importer.js | 94 +++++++++++++- .../tests/super-converter/input-tests.js | 2 +- .../src/extensions/bookmarks/bookmarks.js | 30 +++++ .../src/extensions/bookmarks/index.js | 1 + .../src/extensions/image/image.js | 75 +++++++++++ .../src/extensions/image/index.js | 1 + packages/super-editor/src/extensions/index.js | 12 +- .../src/extensions/line-break/index.js | 1 + .../src/extensions/line-break/line-break.js | 17 +++ .../super-editor/src/extensions/link/link.js | 68 +++++++--- .../src/extensions/page-break/index.js | 1 - .../src/extensions/page-break/page-break.js | 36 ------ .../src/extensions/paragraph/paragraph.js | 3 +- .../src/tests/fixtures/image/image.docx | Bin 0 -> 902983 bytes .../fixtures/image/image/[Content_Types].xml | 2 + .../tests/fixtures/image/image/_rels/.rels | 2 + .../fixtures/image/image/docProps/app.xml | 2 + .../fixtures/image/image/docProps/core.xml | 2 + .../image/image/word/_rels/document.xml.rels | 2 + .../fixtures/image/image/word/document.xml | 2 + .../fixtures/image/image/word/fontTable.xml | 2 + .../image/image/word/media/image1.jpeg | Bin 0 -> 889185 bytes .../fixtures/image/image/word/settings.xml | 2 + .../fixtures/image/image/word/styles.xml | 2 + .../image/image/word/theme/theme1.xml | 2 + .../fixtures/image/image/word/webSettings.xml | 2 + packages/super-toolbar/super-toolbar.js | 2 +- packages/superdoc/package.json | 3 +- 44 files changed, 671 insertions(+), 106 deletions(-) create mode 100644 packages/super-editor/src/core/commands/insertContent.js create mode 100644 packages/super-editor/src/core/commands/insertContentAt.js create mode 100644 packages/super-editor/src/core/helpers/createNodeFromContent.js create mode 100644 packages/super-editor/src/core/helpers/selectionToInsertionEnd.js create mode 100644 packages/super-editor/src/extensions/bookmarks/bookmarks.js create mode 100644 packages/super-editor/src/extensions/bookmarks/index.js create mode 100644 packages/super-editor/src/extensions/image/image.js create mode 100644 packages/super-editor/src/extensions/image/index.js create mode 100644 packages/super-editor/src/extensions/line-break/index.js create mode 100644 packages/super-editor/src/extensions/line-break/line-break.js delete mode 100644 packages/super-editor/src/extensions/page-break/index.js delete mode 100644 packages/super-editor/src/extensions/page-break/page-break.js create mode 100644 packages/super-editor/src/tests/fixtures/image/image.docx create mode 100644 packages/super-editor/src/tests/fixtures/image/image/[Content_Types].xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/_rels/.rels create mode 100644 packages/super-editor/src/tests/fixtures/image/image/docProps/app.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/docProps/core.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/_rels/document.xml.rels create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/document.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/fontTable.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/media/image1.jpeg create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/settings.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/styles.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/theme/theme1.xml create mode 100644 packages/super-editor/src/tests/fixtures/image/image/word/webSettings.xml diff --git a/packages/super-editor/src/components/SuperEditor.vue b/packages/super-editor/src/components/SuperEditor.vue index e2efd324c9..a09cfc368e 100644 --- a/packages/super-editor/src/components/SuperEditor.vue +++ b/packages/super-editor/src/components/SuperEditor.vue @@ -35,7 +35,7 @@ const editorElem = ref(null); const initEditor = async () => { console.debug('[super-editor] Loading file...', props.fileSource); - const content = await Editor.loadXmlData(props.fileSource); + const [content, media] = await Editor.loadXmlData(props.fileSource); editor.value = new Editor({ mode: 'docx', element: editorElem.value, @@ -43,6 +43,7 @@ const initEditor = async () => { extensions: getStarterExtensions(), documentId: props.documentId, content, + media, ...props.options, }); }; diff --git a/packages/super-editor/src/components/toolbar/ButtonGroup.vue b/packages/super-editor/src/components/toolbar/ButtonGroup.vue index 452c434b39..5bac6597cf 100644 --- a/packages/super-editor/src/components/toolbar/ButtonGroup.vue +++ b/packages/super-editor/src/components/toolbar/ButtonGroup.vue @@ -48,6 +48,7 @@ const isDropdown = (item) => item.type === 'dropdown'; const isSeparator = (item) => item.type === 'separator'; const handleToolbarButtonClick = (item, argument = null) => { currentItem.value = item; + currentItem.value.expand = true; if (item.disabled.value) return; emit('command', { item, argument }); } @@ -58,14 +59,21 @@ const handleToolbarButtonTextSubmit = (item, argument) => { emit('command', { item, argument }); } -const handleSelect = (item, argument) => { +const closeDropdowns = () => { + if (!currentItem.value) return; + currentItem.value.expand = false; currentItem.value = null; +} + +const handleSelect = (item, argument) => { + closeDropdowns(); emit('command', { item, argument }); } const handleClickOutside = (e) => { - currentItem.value = null; + closeDropdowns(); } +