mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-20 06:01:24 +02:00
Move insertBlock
s outside of void inlines (#1987)
When inserting a block, we shouldn't split void inlines -- otherwise, they're duplicated. Instead, move the insert to either before or after the void node.
This commit is contained in:
committed by
Ian Storm Taylor
parent
c046652a71
commit
57a4938703
@@ -635,8 +635,9 @@ Changes.insertBlockAtRange = (change, range, block, options = {}) => {
|
|||||||
|
|
||||||
const { value } = change
|
const { value } = change
|
||||||
const { document } = value
|
const { document } = value
|
||||||
const { startKey, startOffset } = range
|
let { startKey, startOffset } = range
|
||||||
const startBlock = document.getClosestBlock(startKey)
|
const startBlock = document.getClosestBlock(startKey)
|
||||||
|
const startInline = document.getClosestInline(startKey)
|
||||||
const parent = document.getParent(startBlock.key)
|
const parent = document.getParent(startBlock.key)
|
||||||
const index = parent.nodes.indexOf(startBlock)
|
const index = parent.nodes.indexOf(startBlock)
|
||||||
|
|
||||||
@@ -650,6 +651,20 @@ Changes.insertBlockAtRange = (change, range, block, options = {}) => {
|
|||||||
} else if (range.isAtEndOf(startBlock)) {
|
} else if (range.isAtEndOf(startBlock)) {
|
||||||
change.insertNodeByKey(parent.key, index + 1, block, { normalize })
|
change.insertNodeByKey(parent.key, index + 1, block, { normalize })
|
||||||
} else {
|
} else {
|
||||||
|
if (startInline && startInline.isVoid) {
|
||||||
|
const atEnd = range.isAtEndOf(startInline)
|
||||||
|
const siblingText = atEnd
|
||||||
|
? document.getNextText(startKey)
|
||||||
|
: document.getPreviousText(startKey)
|
||||||
|
|
||||||
|
const splitRange = atEnd
|
||||||
|
? range.moveToStartOf(siblingText)
|
||||||
|
: range.moveToEndOf(siblingText)
|
||||||
|
|
||||||
|
startKey = splitRange.startKey
|
||||||
|
startOffset = splitRange.startOffset
|
||||||
|
}
|
||||||
|
|
||||||
change.splitDescendantsByKey(startBlock.key, startKey, startOffset, {
|
change.splitDescendantsByKey(startBlock.key, startKey, startOffset, {
|
||||||
normalize: false,
|
normalize: false,
|
||||||
})
|
})
|
||||||
|
@@ -0,0 +1,33 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import h from '../../../helpers/h'
|
||||||
|
|
||||||
|
export default function(change) {
|
||||||
|
change.insertBlock('quote')
|
||||||
|
}
|
||||||
|
|
||||||
|
export const input = (
|
||||||
|
<value>
|
||||||
|
<document>
|
||||||
|
<paragraph>
|
||||||
|
<emoji>
|
||||||
|
<cursor />
|
||||||
|
</emoji>
|
||||||
|
</paragraph>
|
||||||
|
</document>
|
||||||
|
</value>
|
||||||
|
)
|
||||||
|
|
||||||
|
export const output = (
|
||||||
|
<value>
|
||||||
|
<document>
|
||||||
|
<paragraph>
|
||||||
|
<emoji />
|
||||||
|
</paragraph>
|
||||||
|
<quote>
|
||||||
|
<cursor />
|
||||||
|
</quote>
|
||||||
|
<paragraph />
|
||||||
|
</document>
|
||||||
|
</value>
|
||||||
|
)
|
Reference in New Issue
Block a user