From af17f2c65794767e4b7ddfd1c1277a567acd898d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Tue, 6 Apr 2021 23:48:51 +0200 Subject: [PATCH] fix: improve handling of horizontal rule at document end, fix #248 --- packages/extension-horizontal-rule/package.json | 6 ++++-- .../src/horizontal-rule.ts | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/extension-horizontal-rule/package.json b/packages/extension-horizontal-rule/package.json index 889452db..3f230e24 100644 --- a/packages/extension-horizontal-rule/package.json +++ b/packages/extension-horizontal-rule/package.json @@ -22,7 +22,9 @@ "dist" ], "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1", - "prosemirror-commands": "^1.1.3" + "@tiptap/core": "^2.0.0-beta.1" + }, + "dependencies": { + "prosemirror-state": "^1.3.4" } } diff --git a/packages/extension-horizontal-rule/src/horizontal-rule.ts b/packages/extension-horizontal-rule/src/horizontal-rule.ts index dd4c873c..1065bbcd 100644 --- a/packages/extension-horizontal-rule/src/horizontal-rule.ts +++ b/packages/extension-horizontal-rule/src/horizontal-rule.ts @@ -4,6 +4,7 @@ import { nodeInputRule, mergeAttributes, } from '@tiptap/core' +import { TextSelection } from 'prosemirror-state' export interface HorizontalRuleOptions { HTMLAttributes: { @@ -46,6 +47,22 @@ export const HorizontalRule = Node.create({ setHorizontalRule: () => ({ tr, dispatch }) => { if (dispatch) { tr.replaceSelectionWith(this.type.create()) + + const { parent, pos } = tr.selection.$from + const posAfter = pos + 1 + const nodeAfter = tr.doc.nodeAt(posAfter) + + // end of document + if (!nodeAfter) { + const node = parent.type.contentMatch.defaultType?.create() + + if (node) { + tr.insert(posAfter, node) + tr.setSelection(TextSelection.create(tr.doc, posAfter)) + } + } + + tr.scrollIntoView() } return true