From 1d71877ffd9cd5b6d4ace6b9d97e1d8b84776132 Mon Sep 17 00:00:00 2001 From: BrianHung Date: Wed, 30 Mar 2022 02:02:11 -0700 Subject: [PATCH] fix-decorations-and-attribute-editor-props --- .../extension-placeholder/src/placeholder.ts | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/extension-placeholder/src/placeholder.ts b/packages/extension-placeholder/src/placeholder.ts index d05e4145..85c22168 100644 --- a/packages/extension-placeholder/src/placeholder.ts +++ b/packages/extension-placeholder/src/placeholder.ts @@ -45,8 +45,8 @@ export const Placeholder = Extension.create({ return } - cachedEmptyTopNode = cachedEmptyTopNode || state.doc.type.createAndFill() - let isEditorEmpty = cachedEmptyTopNode.content.findDiffStart(state.doc.content) === null + cachedEmptyTopNode = cachedEmptyTopNode || doc.type.createAndFill() + let isEditorEmpty = cachedEmptyTopNode.sameMarkup(doc) && cachedEmptyTopNode.content.findDiffStart(doc.content) === null doc.descendants((node, pos) => { const hasAnchor = anchor >= pos && anchor <= (pos + node.nodeSize) @@ -80,16 +80,28 @@ export const Placeholder = Extension.create({ return DecorationSet.create(doc, decorations) }, - }, - attributes(state) { - cachedEmptyTopNode = cachedEmptyTopNode || state.doc.type.createAndFill() - let isEditorEmpty = cachedEmptyTopNode.content.findDiffStart(state.doc.content) === null - if (isEditorEmpty) { - return {class: this.options.emptyEditorClass} + attributes: ({ doc }) => { + cachedEmptyTopNode = cachedEmptyTopNode || doc.type.createAndFill() + let isEditorEmpty = cachedEmptyTopNode.sameMarkup(doc) && cachedEmptyTopNode.content.findDiffStart(doc.content) === null + if (isEditorEmpty) { + return { + class: this.options.emptyEditorClass, + 'data-placeholder': typeof this.options.placeholder === 'function' + ? this.options.placeholder({ + editor: this.editor, + node: doc, + pos: 0, + hasAnchor: true, + }) + : this.options.placeholder, + } + } } - } + }, }), ] }, }) + +export default Placeholder \ No newline at end of file