diff --git a/packages/super-editor/src/components/SuperEditor.vue b/packages/super-editor/src/components/SuperEditor.vue index 5f4fe49690..d0b9760e01 100644 --- a/packages/super-editor/src/components/SuperEditor.vue +++ b/packages/super-editor/src/components/SuperEditor.vue @@ -117,6 +117,7 @@ const initEditor = async ({ content, media = {}, mediaFiles = {}, fonts = {} } = element: editorElem.value, fileSource: props.fileSource, extensions: getExtensions(), + externalExtensions: props.options.externalExtensions, documentId: props.documentId, content, media, diff --git a/packages/super-editor/src/core/Editor.js b/packages/super-editor/src/core/Editor.js index c5567f0830..d51a827bc8 100644 --- a/packages/super-editor/src/core/Editor.js +++ b/packages/super-editor/src/core/Editor.js @@ -68,6 +68,7 @@ export class Editor extends EventEmitter { scale: 1, annotations: false, isInternal: false, + externalExtensions: [], onBeforeCreate: () => null, onCreate: () => null, onUpdate: () => null, @@ -429,12 +430,13 @@ export class Editor extends EventEmitter { const allowedExtensions = ['extension', 'node', 'mark']; const coreExtensions = [Editable, Commands, EditorFocus, Keymap]; + const externalExtensions = this.options.externalExtensions || []; const allExtensions = [...coreExtensions, ...this.options.extensions].filter((e) => allowedExtensions.includes(e?.type), ); - this.extensionService = ExtensionService.create(allExtensions, this); + this.extensionService = ExtensionService.create(allExtensions, externalExtensions, this); } /** @@ -524,7 +526,6 @@ export class Editor extends EventEmitter { */ #generatePmData() { let doc; - try { const { mode, fragment, isHeadless, content, loadFromSchema } = this.options; @@ -881,7 +882,7 @@ export class Editor extends EventEmitter { * Get page styles */ getPageStyles() { - return this.converter?.pageStyles; + return this.converter?.pageStyles || {}; } /** diff --git a/packages/super-editor/src/core/ExtensionService.js b/packages/super-editor/src/core/ExtensionService.js index 971a4f303e..6f462f7702 100644 --- a/packages/super-editor/src/core/ExtensionService.js +++ b/packages/super-editor/src/core/ExtensionService.js @@ -16,11 +16,15 @@ export class ExtensionService { extensions; + externalExtensions = []; + splittableMarks = []; - constructor(extensions, editor) { + constructor(extensions, userExtensions, editor) { this.editor = editor; - this.extensions = ExtensionService.getResolvedExtensions(extensions); + + this.externalExtensions = userExtensions || []; + this.extensions = ExtensionService.getResolvedExtensions([...extensions, ...this.externalExtensions]); this.schema = Schema.createSchemaByExtensions(this.extensions, editor); this.#setupExtensions(); } diff --git a/packages/superdoc/src/SuperDoc.vue b/packages/superdoc/src/SuperDoc.vue index b3e693953d..2e701587c3 100644 --- a/packages/superdoc/src/SuperDoc.vue +++ b/packages/superdoc/src/SuperDoc.vue @@ -251,6 +251,7 @@ const editorOptions = (doc) => { isNewFile: doc.isNewFile || false, handleImageUpload: proxy.$superdoc.config.handleImageUpload, telemetry: proxy.$superdoc.telemetry, + externalExtensions: proxy.$superdoc.config.editorExtensions || [], }; return options;