@tiptap/core
Version:
headless rich text editor
30 lines (24 loc) • 830 B
text/typescript
import type { ResolvedPos } from '@tiptap/pm/model'
/**
* Returns the text content of a resolved prosemirror position
* @param $from The resolved position to get the text content from
* @param maxMatch The maximum number of characters to match
* @returns The text content
*/
export const getTextContentFromNodes = ($from: ResolvedPos, maxMatch = 500) => {
let textBefore = ''
const sliceEndPos = $from.parentOffset
$from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {
const chunk =
node.type.spec.toText?.({
node,
pos,
parent,
index,
}) ||
node.textContent ||
'%leaf%'
textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos))
})
return textBefore
}