1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-16 12:14:14 +02:00

fix: use text utils to move forward and backward by word (#2169)

* fix: don't check for adjacent void with modified move

This was causing a problem where when the current text was followed by a void node using a modifier key to move forward would force the selection to creep forward a character at a time.

With this change, now the modifier will move as expected, but will jump over void nodes. This is not ideal, but seems like a behavior that will be slightly better than the current one.

* fix: modified key movement.

Use TextUtils.getWordOffsetForward and TextUtils.getWordOffsetBackward to move around by words.

The idea now is that if you move forward or backward, it is completely controlled by slate instead of trying to rely on a combination of browser behavior and slate trying to stop the browser from doing something wrong. This makes things quite a bit more intuitive in the implementation, and gives us a bit more control.

* tests: a whole bunch of selection movement tests.

* tests: more movement tests.
This commit is contained in:
Eric Edem
2018-10-22 11:21:20 -07:00
committed by Ian Storm Taylor
parent f56f28a8fa
commit 805c329e5d
53 changed files with 1445 additions and 14 deletions

View File

@@ -10,8 +10,10 @@ import { IS_IOS, IS_MAC } from 'slate-dev-environment'
const HOTKEYS = {
bold: 'mod+b',
compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],
moveBackward: 'mod?+ctrl?+alt?+left',
moveForward: 'mod?+ctrl?+alt?+right',
moveBackward: 'left',
moveForward: 'right',
moveWordBackward: 'ctrl+left',
moveWordForward: 'ctrl+right',
deleteBackward: 'shift?+backspace',
deleteForward: 'shift?+delete',
extendBackward: 'shift+left',
@@ -24,6 +26,8 @@ const HOTKEYS = {
const APPLE_HOTKEYS = {
moveLineBackward: 'opt+up',
moveLineForward: 'opt+down',
moveWordBackward: 'opt+left',
moveWordForward: 'opt+right',
deleteBackward: ['ctrl+backspace', 'ctrl+h'],
deleteForward: ['ctrl+delete', 'ctrl+d'],
deleteLineBackward: 'cmd+shift?+backspace',

View File

@@ -530,25 +530,33 @@ function AfterPlugin(options = {}) {
// an inline is selected, we need to handle these hotkeys manually because
// browsers won't know what to do.
if (Hotkeys.isMoveBackward(event)) {
const { previousText, startText } = value
const isPreviousInVoid =
previousText && document.hasVoidParent(previousText.key, editor)
event.preventDefault()
if (hasVoidParent || isPreviousInVoid || startText.text == '') {
event.preventDefault()
return change.moveBackward()
if (!selection.isCollapsed) {
return change.moveToStart()
}
return change.moveBackward()
}
if (Hotkeys.isMoveForward(event)) {
const { nextText, startText } = value
const isNextInVoid =
nextText && document.hasVoidParent(nextText.key, editor)
event.preventDefault()
if (hasVoidParent || isNextInVoid || startText.text == '') {
event.preventDefault()
return change.moveForward()
if (!selection.isCollapsed) {
return change.moveToEnd()
}
return change.moveForward()
}
if (Hotkeys.isMoveWordBackward(event)) {
event.preventDefault()
return change.moveWordBackward()
}
if (Hotkeys.isMoveWordForward(event)) {
event.preventDefault()
return change.moveWordForward()
}
if (Hotkeys.isExtendBackward(event)) {

View File

@@ -2,6 +2,7 @@ import { is } from 'immutable'
import pick from 'lodash/pick'
import Selection from '../models/selection'
import TextUtils from '../utils/text-utils'
const Commands = {}
@@ -26,10 +27,18 @@ Commands.moveAnchorBackward = (change, ...args) => {
change.call(pointBackward, 'anchor', ...args)
}
Commands.moveAnchorWordBackward = (change, ...args) => {
change.call(pointWordBackward, 'anchor', ...args)
}
Commands.moveAnchorForward = (change, ...args) => {
change.call(pointForward, 'anchor', ...args)
}
Commands.moveAnchorWordForward = (change, ...args) => {
change.call(pointWordForward, 'anchor', ...args)
}
Commands.moveAnchorTo = (change, ...args) => {
change.call(proxy, 'moveAnchorTo', ...args)
}
@@ -126,14 +135,26 @@ Commands.moveBackward = (change, ...args) => {
change.moveAnchorBackward(...args).moveFocusBackward(...args)
}
Commands.moveWordBackward = (change, ...args) => {
change.moveFocusWordBackward(...args).moveToFocus()
}
Commands.moveEndBackward = (change, ...args) => {
change.call(pointBackward, 'end', ...args)
}
Commands.moveEndWordBackward = (change, ...args) => {
change.call(pointWordBackward, 'end', ...args)
}
Commands.moveEndForward = (change, ...args) => {
change.call(pointForward, 'end', ...args)
}
Commands.moveEndWordForward = (change, ...args) => {
change.call(pointWordForward, 'end', ...args)
}
Commands.moveEndTo = (change, ...args) => {
change.call(proxy, 'moveEndTo', ...args)
}
@@ -230,10 +251,18 @@ Commands.moveFocusBackward = (change, ...args) => {
change.call(pointBackward, 'focus', ...args)
}
Commands.moveFocusWordBackward = (change, ...args) => {
change.call(pointWordBackward, 'focus', ...args)
}
Commands.moveFocusForward = (change, ...args) => {
change.call(pointForward, 'focus', ...args)
}
Commands.moveFocusWordForward = (change, ...args) => {
change.call(pointWordForward, 'focus', ...args)
}
Commands.moveFocusTo = (change, ...args) => {
change.call(proxy, 'moveFocusTo', ...args)
}
@@ -330,14 +359,26 @@ Commands.moveForward = (change, ...args) => {
change.moveAnchorForward(...args).moveFocusForward(...args)
}
Commands.moveWordForward = (change, ...args) => {
change.moveFocusWordForward(...args).moveToFocus(...args)
}
Commands.moveStartBackward = (change, ...args) => {
change.call(pointBackward, 'start', ...args)
}
Commands.moveStartWordBackward = (change, ...args) => {
change.call(pointWordBackward, 'start', ...args)
}
Commands.moveStartForward = (change, ...args) => {
change.call(pointForward, 'start', ...args)
}
Commands.moveStartWordForward = (change, ...args) => {
change.call(pointWordForward, 'start', ...args)
}
Commands.moveStartTo = (change, ...args) => {
change.call(proxy, 'moveStartTo', ...args)
}
@@ -718,4 +759,28 @@ function pointForward(change, point, n = 1) {
}
}
function pointWordBackward(change, pointName) {
const { value } = change
const { document, selection } = value
const point = selection[pointName]
const block = document.getClosestBlock(point.key)
const offset = block.getOffset(point.key)
const o = offset + point.offset
const { text } = block
const n = TextUtils.getWordOffsetBackward(text, o)
change.call(pointBackward, pointName, n > 0 ? n : 1)
}
function pointWordForward(change, pointName) {
const { value } = change
const { document, selection } = value
const point = selection[pointName]
const block = document.getClosestBlock(point.key)
const offset = block.getOffset(point.key)
const o = offset + point.offset
const { text } = block
const n = TextUtils.getWordOffsetForward(text, o)
change.call(pointForward, pointName, n > 0 ? n : 1)
}
export default Commands

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<anchor /> tw<focus />o three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorBackward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two <anchor />t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorBackward(8)
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two th<anchor />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
on<anchor />e <focus />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorBackward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
o<anchor />ne tw<focus />o three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<anchor />w<focus />o three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorForward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<focus />h<anchor />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorForward(8)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two th<focus />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two th<focus />re<anchor />e
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveAnchorForward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two thr<focus />ee
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two<anchor /> thr<focus />ee
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<cursor /> two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two th<focus />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<anchor /> two t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveBackward(6)
}
export const input = (
<value>
<document>
<paragraph>
one two th<cursor />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two th<anchor />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<focus /> two t<anchor />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />two <focus />three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two <focus />t<anchor />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward(6)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two<focus /> three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
o<focus />ne <anchor />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward(7)
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two <anchor />three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
o<anchor />ne <focus />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two t<anchor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <focus />two <anchor />three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />two th<focus />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndForward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<anchor />h<focus />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndForward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />two thre<focus />e
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveEndForward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two t<anchor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <focus />two th<anchor />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />t<focus />wo three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusBackward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two <focus />t<anchor />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusBackward(10)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two thr<focus />ee
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
o<focus />ne <anchor />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusBackward(6)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two thr<focus />ee
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />t<focus />wo three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />two<focus /> three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusForward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<anchor />h<focus />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusForward(7)
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two <anchor />three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two <anchor />thr<focus />ee
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveFocusForward(4)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />tw<focus />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <anchor />two th<focus />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveForward()
}
export const input = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<cursor />wo three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two th<focus />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<anchor />wo thr<focus />ee
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveForward(6)
}
export const input = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two th<cursor />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveForward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two th<anchor />ree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<focus />wo thr<anchor />ee
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<anchor /> two t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartBackward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two <anchor />t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartBackward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
o<anchor />ne two t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two t<anchor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one<focus /> two t<anchor />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<anchor />wo t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward()
}
export const input = (
<value>
<document>
<paragraph>
one two t<cursor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<focus />h<anchor />ree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward(8)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<focus />hre<anchor />e
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward(7)
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two t<anchor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two t<anchor />hr<focus />ee
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward(3)
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two t<focus />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two<anchor /> t<focus />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveStartForward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two t<anchor />hree
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one t<focus />wo t<anchor />hree
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordBackward()
}
export const input = (
<value>
<document>
<paragraph>
one tw<cursor />o three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,28 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two three f<focus />our five six
</paragraph>
</document>
</value>
)
// Should move to next word after focus and collapse
export const output = (
<value>
<document>
<paragraph>
one two three <cursor />four five six
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,28 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordBackward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two three fou<anchor />r five six
</paragraph>
</document>
</value>
)
// Should move to next word after focus and collapse
export const output = (
<value>
<document>
<paragraph>
<cursor />one two three four five six
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,27 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordForward()
}
export const input = (
<value>
<document>
<paragraph>
one <cursor />two three
</paragraph>
</document>
</value>
)
export const output = (
<value>
<document>
<paragraph>
one two<cursor /> three
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,28 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordForward()
}
export const input = (
<value>
<document>
<paragraph>
one <anchor />two three f<focus />our five six
</paragraph>
</document>
</value>
)
// Should move to next word after focus and collapse
export const output = (
<value>
<document>
<paragraph>
one two three four<cursor /> five six
</paragraph>
</document>
</value>
)

View File

@@ -0,0 +1,28 @@
/** @jsx h */
import h from '../../../helpers/h'
export default function(change) {
change.moveWordForward()
}
export const input = (
<value>
<document>
<paragraph>
one <focus />two three fou<anchor />r five six
</paragraph>
</document>
</value>
)
// Should move to next word after focus and collapse
export const output = (
<value>
<document>
<paragraph>
one two<cursor /> three four five six
</paragraph>
</document>
</value>
)