mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-29 09:59:48 +02:00
When removing the node containing the cursor, always prefer placing the cursor in a sibling text node (#5923)
* Add tests describing the selection after the current node is removed * Always prefer placing the cursor in a sibling text node after removal * Add changeset
This commit is contained in:
@@ -246,8 +246,10 @@ export const GeneralTransforms: GeneralTransforms = {
|
||||
|
||||
let preferNext = false
|
||||
if (prev && next) {
|
||||
if (Path.equals(next[1], path)) {
|
||||
preferNext = !Path.hasPrevious(next[1])
|
||||
if (Path.isSibling(prev[1], path)) {
|
||||
preferNext = false
|
||||
} else if (Path.equals(next[1], path)) {
|
||||
preferNext = true
|
||||
} else {
|
||||
preferNext =
|
||||
Path.common(prev[1], path).length <
|
||||
|
@@ -0,0 +1,37 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>
|
||||
<text id="0">a</text>
|
||||
<text id="1">
|
||||
<cursor />
|
||||
</text>
|
||||
</inline>
|
||||
<text>b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 1, 1],
|
||||
node: { text: '', id: '1' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>
|
||||
<text id="0">
|
||||
a<cursor />
|
||||
</text>
|
||||
</inline>
|
||||
<text>b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,37 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text>a</text>
|
||||
<inline>
|
||||
<text id="0">
|
||||
<cursor />
|
||||
</text>
|
||||
<text id="1">b</text>
|
||||
</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 1, 0],
|
||||
node: { text: '', id: '0' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text>a</text>
|
||||
<inline>
|
||||
<text id="1">
|
||||
<cursor />b
|
||||
</text>
|
||||
</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,35 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>a</element>
|
||||
<element>
|
||||
<text>
|
||||
<cursor />
|
||||
</text>
|
||||
<inline>b</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [1, 0],
|
||||
node: { text: '' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>a</element>
|
||||
<element>
|
||||
{/* Recreated by normalizer */}
|
||||
<text />
|
||||
<inline>
|
||||
<cursor />b
|
||||
</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,33 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>a</inline>
|
||||
<text id="0">
|
||||
<cursor />
|
||||
</text>
|
||||
<text id="1">b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 2],
|
||||
node: { text: '', id: '0' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>a</inline>
|
||||
<text id="1">
|
||||
<cursor />b
|
||||
</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,35 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>a</inline>
|
||||
<text>
|
||||
<cursor />
|
||||
</text>
|
||||
</element>
|
||||
<element>b</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 2],
|
||||
node: { text: '' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text />
|
||||
<inline>
|
||||
a<cursor />
|
||||
</inline>
|
||||
{/* Recreated by normalizer */}
|
||||
<text />
|
||||
</element>
|
||||
<element>b</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,31 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from 'slate-hyperscript'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>a</element>
|
||||
<element>
|
||||
<text id="0">
|
||||
<cursor />
|
||||
</text>
|
||||
<text id="1">b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [1, 0],
|
||||
node: { text: '', id: '0' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>a</element>
|
||||
<element>
|
||||
<text id="1">
|
||||
<cursor />b
|
||||
</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,33 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from '../../'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">a</text>
|
||||
<text id="1">
|
||||
<cursor />
|
||||
</text>
|
||||
<inline>b</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 1],
|
||||
node: { text: '', id: '1' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">
|
||||
a<cursor />
|
||||
</text>
|
||||
<inline>b</inline>
|
||||
<text />
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,31 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from 'slate-hyperscript'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">a</text>
|
||||
<text id="1">
|
||||
<cursor />
|
||||
</text>
|
||||
</element>
|
||||
<element>b</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 1],
|
||||
node: { text: '', id: '1' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">
|
||||
a<cursor />
|
||||
</text>
|
||||
</element>
|
||||
<element>b</element>
|
||||
</editor>
|
||||
)
|
@@ -0,0 +1,31 @@
|
||||
/** @jsx jsx */
|
||||
import { jsx } from 'slate-hyperscript'
|
||||
|
||||
export const input = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">a</text>
|
||||
<text id="1">
|
||||
<cursor />
|
||||
</text>
|
||||
<text id="2">b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
||||
export const operations = [
|
||||
{
|
||||
type: 'remove_node',
|
||||
path: [0, 1],
|
||||
node: { text: '', id: '1' },
|
||||
},
|
||||
]
|
||||
export const output = (
|
||||
<editor>
|
||||
<element>
|
||||
<text id="0">
|
||||
a<cursor />
|
||||
</text>
|
||||
<text id="2">b</text>
|
||||
</element>
|
||||
</editor>
|
||||
)
|
@@ -25,10 +25,9 @@ export const output = (
|
||||
<block>
|
||||
<text />
|
||||
<inline void>
|
||||
<text>
|
||||
<cursor />
|
||||
</text>
|
||||
<text />
|
||||
</inline>
|
||||
<cursor />
|
||||
word
|
||||
</block>
|
||||
</editor>
|
||||
|
Reference in New Issue
Block a user