@blocknote/core
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
61 lines (55 loc) • 1.67 kB
text/typescript
import { Mark, mergeAttributes } from "@tiptap/core";
export const CommentMark = Mark.create({
name: "comment",
excludes: "",
inclusive: false,
keepOnSplit: true,
addAttributes() {
// Return an object with attribute configuration
return {
// orphans are marks that currently don't have an active thread. It could be
// that users have resolved the thread. Resolved threads by default are not shown in the document,
// but we need to keep the mark (positioning) data so we can still "revive" it when the thread is unresolved
// or we enter a "comments" view that includes resolved threads.
orphan: {
parseHTML: (element) => !!element.getAttribute("data-orphan"),
renderHTML: (attributes) => {
return (attributes as { orphan: boolean }).orphan
? {
"data-orphan": "true",
}
: {};
},
default: false,
},
threadId: {
parseHTML: (element) => element.getAttribute("data-bn-thread-id"),
renderHTML: (attributes) => {
return {
"data-bn-thread-id": (attributes as { threadId: string }).threadId,
};
},
default: "",
},
};
},
renderHTML({ HTMLAttributes }: { HTMLAttributes: Record<string, any> }) {
return [
"span",
mergeAttributes(HTMLAttributes, {
class: "bn-thread-mark",
}),
];
},
parseHTML() {
return [{ tag: "span.bn-thread-mark" }];
},
extendMarkSchema(extension) {
if (extension.name === "comment") {
return {
blocknoteIgnore: true,
};
}
return {};
},
});