From 7567be22103e41110b99b180148e7ef043612c56 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Fri, 18 Nov 2016 11:11:27 -0800 Subject: [PATCH] simplify before-inline split-block test --- src/transforms/at-current-range.js | 25 ++++++++++++++++--- .../index.js | 16 ++++-------- .../input.yaml | 5 +--- .../output.yaml | 3 --- 4 files changed, 27 insertions(+), 22 deletions(-) rename test/transforms/fixtures/at-current-range/split-block/{repeatedly-before-inline => before-inline}/index.js (66%) rename test/transforms/fixtures/at-current-range/split-block/{repeatedly-before-inline => before-inline}/input.yaml (80%) rename test/transforms/fixtures/at-current-range/split-block/{repeatedly-before-inline => before-inline}/output.yaml (87%) diff --git a/src/transforms/at-current-range.js b/src/transforms/at-current-range.js index cf683a67a..8d593929c 100644 --- a/src/transforms/at-current-range.js +++ b/src/transforms/at-current-range.js @@ -312,10 +312,27 @@ export function splitBlock(transform, depth = 1) { state = transform.state document = state.document - const { startKey } = selection - const startNode = document.getDescendant(startKey) - const nextNode = document.getNextText(startNode.key) - const after = selection.collapseToStartOf(nextNode) + const { startKey, startOffset } = selection + const startText = document.getNode(startKey) + const startBlock = document.getClosestBlock(startKey) + const startInline = startBlock.getFurthestInline(startKey) + const nextText = document.getNextText(startText.key) + let after + + // If the selection is at the start of the highest inline child inside the + // block, the starting text node won't need to be split. + if ( + (startOffset == 0) && + (startText == startInline || startInline.getOffset(startText.key) == 0) + ) { + after = selection.collapseToStartOf(startText) + } + + // Otherwise, we'll need to move the selection forward one to account for the + // text node that was split. + else { + after = selection.collapseToStartOf(nextText) + } return transform.moveTo(after) } diff --git a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/index.js b/test/transforms/fixtures/at-current-range/split-block/before-inline/index.js similarity index 66% rename from test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/index.js rename to test/transforms/fixtures/at-current-range/split-block/before-inline/index.js index 3a67cc3ca..09cb21230 100644 --- a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/index.js +++ b/test/transforms/fixtures/at-current-range/split-block/before-inline/index.js @@ -4,12 +4,12 @@ import assert from 'assert' export default function (state) { const { document, selection } = state const texts = document.getTexts() - const first = texts.first() + const second = texts.get(1) const range = selection.merge({ - anchorKey: first.key, - anchorOffset: 4, - focusKey: first.key, - focusOffset: 4 + anchorKey: second.key, + anchorOffset: 0, + focusKey: second.key, + focusOffset: 0 }) const next = state @@ -17,12 +17,6 @@ export default function (state) { .moveTo(range) .splitBlock() .apply() - .transform() - .deleteBackward() - .apply() - .transform() - .splitBlock() - .apply() const updated = next.document.getTexts().get(1) diff --git a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/input.yaml b/test/transforms/fixtures/at-current-range/split-block/before-inline/input.yaml similarity index 80% rename from test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/input.yaml rename to test/transforms/fixtures/at-current-range/split-block/before-inline/input.yaml index 49bd05570..cd77b2980 100644 --- a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/input.yaml +++ b/test/transforms/fixtures/at-current-range/split-block/before-inline/input.yaml @@ -12,8 +12,5 @@ nodes: nodes: - kind: text text: hyperlink - - kind: block - type: paragraph - nodes: - kind: text - text: word \ No newline at end of file + text: word diff --git a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/output.yaml b/test/transforms/fixtures/at-current-range/split-block/before-inline/output.yaml similarity index 87% rename from test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/output.yaml rename to test/transforms/fixtures/at-current-range/split-block/before-inline/output.yaml index 42973df7a..aeb0b0161 100644 --- a/test/transforms/fixtures/at-current-range/split-block/repeatedly-before-inline/output.yaml +++ b/test/transforms/fixtures/at-current-range/split-block/before-inline/output.yaml @@ -15,8 +15,5 @@ nodes: nodes: - kind: text text: hyperlink - - kind: block - type: paragraph - nodes: - kind: text text: word