mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-22 15:02:51 +02:00
Add transform wrapBlockByKey
, to wrap any node
This can be used to simply wrap a Text node. This is not possible with the current implementation of `wrapBlockAtRange`, which wraps the closest parent block of the text node.
This commit is contained in:
@@ -363,3 +363,28 @@ export function unwrapBlockByKey(transform, key, properties, options) {
|
|||||||
const range = selection.moveToRangeOf(texts.first(), texts.last())
|
const range = selection.moveToRangeOf(texts.first(), texts.last())
|
||||||
return transform.unwrapBlockAtRange(range, properties, options)
|
return transform.unwrapBlockAtRange(range, properties, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap a node in a block with `properties`.
|
||||||
|
*
|
||||||
|
* @param {Transform} transform
|
||||||
|
* @param {String} key The node to wrap
|
||||||
|
* @param {Block || Object || String} block The wrapping block (its children are discarded)
|
||||||
|
* @param {Object} options
|
||||||
|
* @param {Boolean} normalize
|
||||||
|
* @return {Transform}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export function wrapBlockByKey(transform, key, block, options) {
|
||||||
|
block = Normalize.block(block)
|
||||||
|
block = block.merge({ nodes: block.nodes.clear() })
|
||||||
|
|
||||||
|
const { document } = transform.state
|
||||||
|
const node = document.assertDescendant(key)
|
||||||
|
const parent = document.getParent(node)
|
||||||
|
const index = parent.nodes.indexOf(node)
|
||||||
|
|
||||||
|
return transform
|
||||||
|
.insertNodeByKey(parent.key, index, block, { normalize: false })
|
||||||
|
.moveNodeByKey(node.key, block.key, 0, options)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user