diff --git a/packages/tiptap-core/src/Editor.ts b/packages/tiptap-core/src/Editor.ts index b8980749..4a18317e 100644 --- a/packages/tiptap-core/src/Editor.ts +++ b/packages/tiptap-core/src/Editor.ts @@ -53,6 +53,7 @@ export class Editor extends EventEmitter { this.registerCommand('focus', require('./commands/focus').default) this.registerCommand('insertText', require('./commands/insertText').default) this.registerCommand('insertHTML', require('./commands/insertHTML').default) + this.registerCommand('setContent', require('./commands/setContent').default) if (this.options.injectCSS) { injectCSS(require('./style.css')) @@ -133,7 +134,7 @@ export class Editor extends EventEmitter { return this.proxy } - private createDocument(content: EditorContent, parseOptions: any = {}): any { + public createDocument = (content: EditorContent, parseOptions: any = {}): any => { if (content && typeof content === 'object') { try { return this.schema.nodeFromJSON(content) @@ -174,20 +175,6 @@ export class Editor extends EventEmitter { public setActiveNodesAndMarks() { // TODO - } - - public setContent(content: EditorContent = '', emitUpdate: Boolean = false, parseOptions: any = {}) { - const { doc, tr } = this.state - const document = this.createDocument(content, parseOptions) - const selection = TextSelection.create(doc, 0, doc.content.size) - const transaction = tr - .setSelection(selection) - .replaceSelectionWith(document, false) - .setMeta('preventUpdate', !emitUpdate) - - this.view.dispatch(transaction) - - return this } // public setParentComponent(component = null) { diff --git a/packages/tiptap-core/src/commands/setContent.ts b/packages/tiptap-core/src/commands/setContent.ts new file mode 100644 index 00000000..9febfee3 --- /dev/null +++ b/packages/tiptap-core/src/commands/setContent.ts @@ -0,0 +1,22 @@ +import { Editor } from '../Editor' +import { TextSelection } from 'prosemirror-state' + +declare module '../Editor' { + interface Editor { + setContent(content: string, emitUpdate: Boolean, parseOptions: any): Editor, + } +} + +export default function setContent(next: Function, editor: Editor, content: string, emitUpdate: Boolean = true, parseOptions: any = {}): void { + const { view, state, createDocument } = editor + const { doc, tr } = state + const document = createDocument(content, parseOptions) + const selection = TextSelection.create(doc, 0, doc.content.size) + const transaction = tr + .setSelection(selection) + .replaceSelectionWith(document, false) + .setMeta('preventUpdate', !emitUpdate) + + view.dispatch(transaction) + next() +}