From 2f9ba324a03868283cf467520f99bd2a1596375a Mon Sep 17 00:00:00 2001 From: hamflx Date: Thu, 29 Sep 2022 21:05:03 +0800 Subject: [PATCH] fix(core): InputRules does not work for ranges containing multiple text nodes (#3205) * fix: InputRules does not work for ranges containing multiple text nodes. #3071 * chore: rename `to` to `sliceEndPos` --- packages/core/src/helpers/getTextContentFromNodes.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/core/src/helpers/getTextContentFromNodes.ts b/packages/core/src/helpers/getTextContentFromNodes.ts index 343d3785..ca924b5e 100644 --- a/packages/core/src/helpers/getTextContentFromNodes.ts +++ b/packages/core/src/helpers/getTextContentFromNodes.ts @@ -3,13 +3,17 @@ import { ResolvedPos } from 'prosemirror-model' export const getTextContentFromNodes = ($from: ResolvedPos, maxMatch = 500) => { let textBefore = '' + const sliceEndPos = $from.parentOffset + $from.parent.nodesBetween( - Math.max(0, $from.parentOffset - maxMatch), - $from.parentOffset, + Math.max(0, sliceEndPos - maxMatch), + sliceEndPos, (node, pos, parent, index) => { - textBefore += node.type.spec.toText?.({ + const chunk = node.type.spec.toText?.({ node, pos, parent, index, - }) || $from.nodeBefore?.text || '%leaf%' + }) || node.textContent || '%leaf%' + + textBefore += chunk.slice(0, Math.max(0, sliceEndPos - pos)) }, )