mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-08 00:06:37 +02:00
add Editor.unsetNodes
and Node.children
This commit is contained in:
@@ -630,6 +630,34 @@ export const NodeTransforms = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset properties on the nodes at a location.
|
||||||
|
*/
|
||||||
|
|
||||||
|
unsetNodes(
|
||||||
|
editor: Editor,
|
||||||
|
props: string | string[],
|
||||||
|
options: {
|
||||||
|
at?: Location
|
||||||
|
match?: NodeMatch
|
||||||
|
mode?: 'all' | 'highest'
|
||||||
|
split?: boolean
|
||||||
|
voids?: boolean
|
||||||
|
} = {}
|
||||||
|
) {
|
||||||
|
if (!Array.isArray(props)) {
|
||||||
|
props = [props]
|
||||||
|
}
|
||||||
|
|
||||||
|
const obj = {}
|
||||||
|
|
||||||
|
for (const key of props) {
|
||||||
|
obj[key] = null
|
||||||
|
}
|
||||||
|
|
||||||
|
Editor.setNodes(editor, obj, options)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unwrap the nodes at a location from a parent node, splitting the parent if
|
* Unwrap the nodes at a location from a parent node, splitting the parent if
|
||||||
* necessary to ensure that only the content in the range is unwrapped.
|
* necessary to ensure that only the content in the range is unwrapped.
|
||||||
|
@@ -77,6 +77,30 @@ export const Node = {
|
|||||||
return c
|
return c
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterate over the children of a node at a specific path.
|
||||||
|
*/
|
||||||
|
|
||||||
|
*children(
|
||||||
|
root: Node,
|
||||||
|
path: Path,
|
||||||
|
options: {
|
||||||
|
reverse?: boolean
|
||||||
|
} = {}
|
||||||
|
): Iterable<DescendantEntry> {
|
||||||
|
const { reverse = false } = options
|
||||||
|
const ancestor = Node.ancestor(root, path)
|
||||||
|
const { children } = ancestor
|
||||||
|
let index = reverse ? children.length - 1 : 0
|
||||||
|
|
||||||
|
while (reverse ? index >= 0 : index < children.length) {
|
||||||
|
const child = Node.child(ancestor, index)
|
||||||
|
const childPath = path.concat(index)
|
||||||
|
yield [child, childPath]
|
||||||
|
index = reverse ? index - 1 : index + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the closest matching node entry starting from a specific path.
|
* Find the closest matching node entry starting from a specific path.
|
||||||
*/
|
*/
|
||||||
|
22
packages/slate/test/interfaces/Node/children/all.js
Normal file
22
packages/slate/test/interfaces/Node/children/all.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/** @jsx jsx */
|
||||||
|
|
||||||
|
import { Node } from 'slate'
|
||||||
|
import { jsx } from 'slate-hyperscript'
|
||||||
|
|
||||||
|
export const input = (
|
||||||
|
<editor>
|
||||||
|
<element>
|
||||||
|
<text key="a" />
|
||||||
|
<text key="b" />
|
||||||
|
</element>
|
||||||
|
</editor>
|
||||||
|
)
|
||||||
|
|
||||||
|
export const test = value => {
|
||||||
|
return Array.from(Node.children(value, [0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = [
|
||||||
|
[<text key="a" />, [0, 0]],
|
||||||
|
[<text key="b" />, [0, 1]],
|
||||||
|
]
|
22
packages/slate/test/interfaces/Node/children/reverse.js
Normal file
22
packages/slate/test/interfaces/Node/children/reverse.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/** @jsx jsx */
|
||||||
|
|
||||||
|
import { Node } from 'slate'
|
||||||
|
import { jsx } from 'slate-hyperscript'
|
||||||
|
|
||||||
|
export const input = (
|
||||||
|
<editor>
|
||||||
|
<element>
|
||||||
|
<text key="a" />
|
||||||
|
<text key="b" />
|
||||||
|
</element>
|
||||||
|
</editor>
|
||||||
|
)
|
||||||
|
|
||||||
|
export const test = value => {
|
||||||
|
return Array.from(Node.children(value, [0], { reverse: true }))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = [
|
||||||
|
[<text key="b" />, [0, 1]],
|
||||||
|
[<text key="a" />, [0, 0]],
|
||||||
|
]
|
28
packages/slate/test/transforms/unsetNodes/text/text.js
Normal file
28
packages/slate/test/transforms/unsetNodes/text/text.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/** @jsx jsx */
|
||||||
|
|
||||||
|
import { Editor } from 'slate'
|
||||||
|
import { jsx } from '../../..'
|
||||||
|
|
||||||
|
export const run = editor => {
|
||||||
|
Editor.unsetNodes(editor, 'key', { match: 'text' })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const input = (
|
||||||
|
<editor>
|
||||||
|
<block>
|
||||||
|
<text key>
|
||||||
|
<cursor />
|
||||||
|
word
|
||||||
|
</text>
|
||||||
|
</block>
|
||||||
|
</editor>
|
||||||
|
)
|
||||||
|
|
||||||
|
export const output = (
|
||||||
|
<editor>
|
||||||
|
<block>
|
||||||
|
<cursor />
|
||||||
|
word
|
||||||
|
</block>
|
||||||
|
</editor>
|
||||||
|
)
|
Reference in New Issue
Block a user