粘贴处理
BlockNote 默认尝试按以下顺序粘贴内容:
- VS Code 兼容内容
- 文件
- BlockNote HTML
- Markdown
- HTML
- 纯文本
在某些情况下,BlockNote 会尝试检测剪贴板中的 Markdown 并将其作为富文本粘贴到编辑器中。
您可以通过提供自定义粘贴处理器来更改默认的粘贴行为,从而完全控制粘贴内容如何插入到编辑器中。
pasteHandler
选项
pasteHandler
选项是一个函数,接收以下参数:
type PasteHandler = (context: {
event: ClipboardEvent;
editor: BlockNoteEditor;
defaultPasteHandler: (context?: {
prioritizeMarkdownOverHTML?: boolean;
plainTextAsMarkdown?: boolean;
}) => boolean;
}) => boolean;
event
:粘贴事件。editor
:当前的编辑器实例。defaultPasteHandler
:默认的粘贴处理器。如果您只需稍微自定义粘贴行为,可以调用默认的粘贴处理器作为回退。
defaultPasteHandler
函数可以接受以下选项:
prioritizeMarkdownOverHTML
:是否在从剪贴板粘贴时优先考虑text/plain
中的 Markdown 内容,而非text/html
。plainTextAsMarkdown
:是否将纯文本视为 Markdown 并以富文本形式粘贴,或直接将文本粘贴到编辑器中。
自定义粘贴处理器
您也可以通过向 pasteHandler
选项提供一个函数来自定义粘贴处理器。
在下面的示例中,如果剪贴板数据包含 text/my-custom-format
,我们将处理粘贴事件。如果不处理该事件,则调用默认粘贴处理器执行默认行为。
const editor = new BlockNoteEditor({
pasteHandler: ({ event, editor, defaultPasteHandler }) => {
if (event.clipboardData?.types.includes("text/my-custom-format")) {
// 这里可以执行任何自定义逻辑,例如在粘贴前转换剪贴板数据
const markdown = customToMarkdown(event.clipboardData.getData("text/my-custom-format"));
// 编辑器能够粘贴 markdown(`pasteMarkdown`),HTML(`pasteHTML`)或纯文本(`pasteText`)
editor.pasteMarkdown(markdown);
// 我们已经处理了粘贴事件,返回 true,返回 false 将取消粘贴事件
return true;
}
// 如果未处理粘贴事件,则调用默认粘贴处理器执行默认行为
return defaultPasteHandler();
},
});
请参阅此示例的 自定义粘贴处理器 示例。