2021-05-17 17:29:41 +08:00
|
|
|
import { Node as ProseMirrorNode } from 'prosemirror-model'
|
|
|
|
import { Predicate, Range, NodeWithPos } from '../types'
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Same as `findChildren` but searches only within a `range`.
|
|
|
|
*/
|
|
|
|
export default function findChildrenInRange(node: ProseMirrorNode, range: Range, predicate: Predicate): NodeWithPos[] {
|
|
|
|
const nodesWithPos: NodeWithPos[] = []
|
|
|
|
|
2021-05-18 03:00:22 +08:00
|
|
|
// if (range.from === range.to) {
|
|
|
|
// const nodeAt = node.nodeAt(range.from)
|
|
|
|
|
|
|
|
// if (nodeAt) {
|
|
|
|
// nodesWithPos.push({
|
|
|
|
// node: nodeAt,
|
|
|
|
// pos: range.from,
|
|
|
|
// })
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
2021-05-17 17:29:41 +08:00
|
|
|
node.nodesBetween(range.from, range.to, (child, pos) => {
|
|
|
|
if (predicate(child)) {
|
|
|
|
nodesWithPos.push({
|
|
|
|
node: child,
|
|
|
|
pos,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
return nodesWithPos
|
|
|
|
}
|