From 805c329e5d9af21fb6286e7811c2689872e3a7f2 Mon Sep 17 00:00:00 2001 From: Eric Edem Date: Mon, 22 Oct 2018 11:21:20 -0700 Subject: [PATCH] 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. --- packages/slate-hotkeys/src/index.js | 8 ++- packages/slate-react/src/plugins/after.js | 32 +++++---- packages/slate/src/commands/on-selection.js | 65 +++++++++++++++++++ .../move-anchor-backward/default.js | 27 ++++++++ .../move-anchor-backward/from-collapsed.js | 27 ++++++++ .../move-anchor-backward/out-of-reverse.js | 27 ++++++++ .../move-anchor-backward/param.js | 27 ++++++++ .../move-anchor-forward/default.js | 27 ++++++++ .../move-anchor-forward/from-collapsed.js | 27 ++++++++ .../move-anchor-forward/into-reverse.js | 27 ++++++++ .../on-selection/move-anchor-forward/param.js | 27 ++++++++ .../on-selection/move-backward/default.js | 27 ++++++++ .../on-selection/move-backward/expanded.js | 27 ++++++++ .../on-selection/move-backward/param.js | 27 ++++++++ .../on-selection/move-backward/reversed.js | 27 ++++++++ .../on-selection/move-end-backward/default.js | 27 ++++++++ .../move-end-backward/from-collapsed.js | 27 ++++++++ .../move-end-backward/into-reverse.js | 27 ++++++++ .../move-end-backward/out-of-reverse.js | 27 ++++++++ .../on-selection/move-end-backward/param.js | 27 ++++++++ .../move-end-backward/reversed.js | 27 ++++++++ .../on-selection/move-end-forward/default.js | 27 ++++++++ .../move-end-forward/from-collapsed.js | 27 ++++++++ .../on-selection/move-end-forward/param.js | 27 ++++++++ .../on-selection/move-end-forward/reversed.js | 27 ++++++++ .../move-focus-backward/default.js | 27 ++++++++ .../move-focus-backward/from-collapsed.js | 27 ++++++++ .../move-focus-backward/into-reverse.js | 27 ++++++++ .../on-selection/move-focus-backward/param.js | 27 ++++++++ .../move-focus-forward/default.js | 27 ++++++++ .../move-focus-forward/from-collapsed.js | 27 ++++++++ .../move-focus-forward/out-of-reverse.js | 27 ++++++++ .../on-selection/move-focus-forward/param.js | 27 ++++++++ .../on-selection/move-forward/default.js | 27 ++++++++ .../on-selection/move-forward/expanded.js | 27 ++++++++ .../on-selection/move-forward/param.js | 27 ++++++++ .../on-selection/move-forward/reversed.js | 27 ++++++++ .../move-start-backward/default.js | 27 ++++++++ .../move-start-backward/from-collapsed.js | 27 ++++++++ .../on-selection/move-start-backward/param.js | 27 ++++++++ .../move-start-backward/reversed.js | 27 ++++++++ .../move-start-forward/default.js | 27 ++++++++ .../move-start-forward/from-collapsed.js | 27 ++++++++ .../move-start-forward/into-reverse.js | 27 ++++++++ .../move-start-forward/out-of-reverse.js | 27 ++++++++ .../on-selection/move-start-forward/param.js | 27 ++++++++ .../move-start-forward/reversed.js | 27 ++++++++ .../move-word-backward/collapsed.js | 27 ++++++++ .../move-word-backward/expanded.js | 28 ++++++++ .../move-word-backward/reversed.js | 28 ++++++++ .../move-word-forward/collapsed.js | 27 ++++++++ .../move-word-forward/expanded.js | 28 ++++++++ .../move-word-forward/reversed.js | 28 ++++++++ 53 files changed, 1445 insertions(+), 14 deletions(-) create mode 100644 packages/slate/test/commands/on-selection/move-anchor-backward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-backward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-forward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-anchor-forward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-backward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-backward/expanded.js create mode 100644 packages/slate/test/commands/on-selection/move-backward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-backward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-end-backward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-end-forward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-end-forward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-end-forward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-backward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-backward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-forward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-focus-forward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-forward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-forward/expanded.js create mode 100644 packages/slate/test/commands/on-selection/move-forward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-forward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-start-backward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-start-backward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-start-backward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/default.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/param.js create mode 100644 packages/slate/test/commands/on-selection/move-start-forward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-word-backward/collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-word-backward/expanded.js create mode 100644 packages/slate/test/commands/on-selection/move-word-backward/reversed.js create mode 100644 packages/slate/test/commands/on-selection/move-word-forward/collapsed.js create mode 100644 packages/slate/test/commands/on-selection/move-word-forward/expanded.js create mode 100644 packages/slate/test/commands/on-selection/move-word-forward/reversed.js diff --git a/packages/slate-hotkeys/src/index.js b/packages/slate-hotkeys/src/index.js index b11573e99..752225de9 100644 --- a/packages/slate-hotkeys/src/index.js +++ b/packages/slate-hotkeys/src/index.js @@ -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', diff --git a/packages/slate-react/src/plugins/after.js b/packages/slate-react/src/plugins/after.js index 64f8ff423..fe9bc1e66 100644 --- a/packages/slate-react/src/plugins/after.js +++ b/packages/slate-react/src/plugins/after.js @@ -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)) { diff --git a/packages/slate/src/commands/on-selection.js b/packages/slate/src/commands/on-selection.js index c92e586d6..13336b006 100644 --- a/packages/slate/src/commands/on-selection.js +++ b/packages/slate/src/commands/on-selection.js @@ -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 diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/default.js b/packages/slate/test/commands/on-selection/move-anchor-backward/default.js new file mode 100644 index 000000000..72301aa65 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-backward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js new file mode 100644 index 000000000..36d2638d1 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js new file mode 100644 index 000000000..6c0aca315 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorBackward(8) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/param.js b/packages/slate/test/commands/on-selection/move-anchor-backward/param.js new file mode 100644 index 000000000..efb6eeefa --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-backward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorBackward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/default.js b/packages/slate/test/commands/on-selection/move-anchor-forward/default.js new file mode 100644 index 000000000..238d85153 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-forward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js new file mode 100644 index 000000000..2a905b8a5 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js b/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js new file mode 100644 index 000000000..b17088d95 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorForward(8) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/param.js b/packages/slate/test/commands/on-selection/move-anchor-forward/param.js new file mode 100644 index 000000000..78ca98dd8 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-anchor-forward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveAnchorForward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-backward/default.js b/packages/slate/test/commands/on-selection/move-backward/default.js new file mode 100644 index 000000000..e8a18e6e2 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-backward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-backward/expanded.js b/packages/slate/test/commands/on-selection/move-backward/expanded.js new file mode 100644 index 000000000..24a76f4d1 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-backward/expanded.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-backward/param.js b/packages/slate/test/commands/on-selection/move-backward/param.js new file mode 100644 index 000000000..5300f5fff --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-backward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveBackward(6) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-backward/reversed.js b/packages/slate/test/commands/on-selection/move-backward/reversed.js new file mode 100644 index 000000000..a1488d56c --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-backward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/default.js b/packages/slate/test/commands/on-selection/move-end-backward/default.js new file mode 100644 index 000000000..d07b1d982 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js new file mode 100644 index 000000000..60833f6c5 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js b/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js new file mode 100644 index 000000000..d6942db78 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward(6) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js new file mode 100644 index 000000000..63dc248a2 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward(7) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/param.js b/packages/slate/test/commands/on-selection/move-end-backward/param.js new file mode 100644 index 000000000..6105a6293 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-backward/reversed.js b/packages/slate/test/commands/on-selection/move-end-backward/reversed.js new file mode 100644 index 000000000..ad96af0f5 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-backward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-forward/default.js b/packages/slate/test/commands/on-selection/move-end-forward/default.js new file mode 100644 index 000000000..603514047 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-forward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js new file mode 100644 index 000000000..e1138a4f7 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-forward/param.js b/packages/slate/test/commands/on-selection/move-end-forward/param.js new file mode 100644 index 000000000..57ea918d2 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-forward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndForward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-end-forward/reversed.js b/packages/slate/test/commands/on-selection/move-end-forward/reversed.js new file mode 100644 index 000000000..68b74ad6c --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-end-forward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveEndForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/default.js b/packages/slate/test/commands/on-selection/move-focus-backward/default.js new file mode 100644 index 000000000..e87b12d25 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-backward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js new file mode 100644 index 000000000..1ff052be3 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js b/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js new file mode 100644 index 000000000..fcfc2c1a8 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusBackward(10) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/param.js b/packages/slate/test/commands/on-selection/move-focus-backward/param.js new file mode 100644 index 000000000..57f37ab64 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-backward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusBackward(6) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/default.js b/packages/slate/test/commands/on-selection/move-focus-forward/default.js new file mode 100644 index 000000000..9174f6f20 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-forward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js new file mode 100644 index 000000000..51e555784 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js new file mode 100644 index 000000000..487fda569 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusForward(7) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/param.js b/packages/slate/test/commands/on-selection/move-focus-forward/param.js new file mode 100644 index 000000000..413dcea1a --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-focus-forward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveFocusForward(4) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-forward/default.js b/packages/slate/test/commands/on-selection/move-forward/default.js new file mode 100644 index 000000000..857b1e478 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-forward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-forward/expanded.js b/packages/slate/test/commands/on-selection/move-forward/expanded.js new file mode 100644 index 000000000..9f760af00 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-forward/expanded.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-forward/param.js b/packages/slate/test/commands/on-selection/move-forward/param.js new file mode 100644 index 000000000..73dd38d98 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-forward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveForward(6) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-forward/reversed.js b/packages/slate/test/commands/on-selection/move-forward/reversed.js new file mode 100644 index 000000000..b00f6cd29 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-forward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-backward/default.js b/packages/slate/test/commands/on-selection/move-start-backward/default.js new file mode 100644 index 000000000..20a44992d --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-backward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js new file mode 100644 index 000000000..a94dcaeeb --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-backward/param.js b/packages/slate/test/commands/on-selection/move-start-backward/param.js new file mode 100644 index 000000000..bdaf7833c --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-backward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartBackward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-backward/reversed.js b/packages/slate/test/commands/on-selection/move-start-backward/reversed.js new file mode 100644 index 000000000..03287292f --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-backward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/default.js b/packages/slate/test/commands/on-selection/move-start-forward/default.js new file mode 100644 index 000000000..9dc1c57ff --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/default.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js new file mode 100644 index 000000000..797e444ce --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js b/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js new file mode 100644 index 000000000..649321b9d --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward(8) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js new file mode 100644 index 000000000..b70fa04e6 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward(7) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/param.js b/packages/slate/test/commands/on-selection/move-start-forward/param.js new file mode 100644 index 000000000..b8d78d86d --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/param.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward(3) +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-start-forward/reversed.js b/packages/slate/test/commands/on-selection/move-start-forward/reversed.js new file mode 100644 index 000000000..7f6691bb7 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-start-forward/reversed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveStartForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js b/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js new file mode 100644 index 000000000..051397248 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordBackward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-backward/expanded.js b/packages/slate/test/commands/on-selection/move-word-backward/expanded.js new file mode 100644 index 000000000..4e2064415 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-backward/expanded.js @@ -0,0 +1,28 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordBackward() +} + +export const input = ( + + + + one two three four five six + + + +) + +// Should move to next word after focus and collapse +export const output = ( + + + + one two three four five six + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-backward/reversed.js b/packages/slate/test/commands/on-selection/move-word-backward/reversed.js new file mode 100644 index 000000000..4b97448dc --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-backward/reversed.js @@ -0,0 +1,28 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordBackward() +} + +export const input = ( + + + + one two three four five six + + + +) + +// Should move to next word after focus and collapse +export const output = ( + + + + one two three four five six + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js b/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js new file mode 100644 index 000000000..80ea11801 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordForward() +} + +export const input = ( + + + + one two three + + + +) + +export const output = ( + + + + one two three + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-forward/expanded.js b/packages/slate/test/commands/on-selection/move-word-forward/expanded.js new file mode 100644 index 000000000..486c7a09e --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-forward/expanded.js @@ -0,0 +1,28 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordForward() +} + +export const input = ( + + + + one two three four five six + + + +) + +// Should move to next word after focus and collapse +export const output = ( + + + + one two three four five six + + + +) diff --git a/packages/slate/test/commands/on-selection/move-word-forward/reversed.js b/packages/slate/test/commands/on-selection/move-word-forward/reversed.js new file mode 100644 index 000000000..c5f1bdc85 --- /dev/null +++ b/packages/slate/test/commands/on-selection/move-word-forward/reversed.js @@ -0,0 +1,28 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function(change) { + change.moveWordForward() +} + +export const input = ( + + + + one two three four five six + + + +) + +// Should move to next word after focus and collapse +export const output = ( + + + + one two three four five six + + + +)