File size: 1,039 Bytes
561e6f0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import { Node, mergeAttributes } from "@tiptap/core";
import { ReactNodeViewRenderer } from "@tiptap/react";
import { FootnoteView } from "../FootnoteView";
declare module "@tiptap/core" {
interface Commands<ReturnType> {
footnote: {
insertFootnote: (content: string) => ReturnType;
};
}
}
export const Footnote = Node.create({
name: "footnote",
group: "inline",
inline: true,
atom: true,
addAttributes() {
return {
content: { default: "" },
};
},
parseHTML() {
return [{ tag: 'span[data-type="footnote"]' }];
},
renderHTML({ HTMLAttributes }) {
return [
"span",
mergeAttributes(HTMLAttributes, { "data-type": "footnote" }),
];
},
addCommands() {
return {
insertFootnote:
(content: string) =>
({ commands }) => {
return commands.insertContent({
type: this.name,
attrs: { content },
});
},
};
},
addNodeView() {
return ReactNodeViewRenderer(FootnoteView);
},
});
|