diff --git a/src/transforms/at-range.js b/src/transforms/at-range.js index daa6f2ad3..24f1b34f3 100644 --- a/src/transforms/at-range.js +++ b/src/transforms/at-range.js @@ -597,7 +597,11 @@ Transforms.insertBlockAtRange = (transform, range, block, options = {}) => { const index = parent.nodes.indexOf(startBlock) if (startBlock.isVoid) { - transform.insertNodeByKey(parent.key, index + 1, block, { normalize }) + let beforeOrAfterIndex = index + if (range.isAtEndOf(startBlock)) { + beforeOrAfterIndex++ + } + transform.insertNodeByKey(parent.key, beforeOrAfterIndex, block, { normalize }) } else if (startBlock.isEmpty) { diff --git a/test/transforms/fixtures/at-current-range/insert-block/is-void/index.js b/test/transforms/fixtures/at-current-range/insert-block/is-void/index.js index 43ef87f9a..a26597973 100644 --- a/test/transforms/fixtures/at-current-range/insert-block/is-void/index.js +++ b/test/transforms/fixtures/at-current-range/insert-block/is-void/index.js @@ -15,10 +15,10 @@ export default function (state) { const next = state .transform() .select(range) - .insertBlock('image') + .insertBlock('video') .apply() - const updated = next.document.getTexts().last() + const updated = next.document.getTexts().first() assert.deepEqual( next.selection.toJS(), diff --git a/test/transforms/fixtures/at-current-range/insert-block/is-void/input.yaml b/test/transforms/fixtures/at-current-range/insert-block/is-void/input.yaml index 1700caf75..1a7fb4d13 100644 --- a/test/transforms/fixtures/at-current-range/insert-block/is-void/input.yaml +++ b/test/transforms/fixtures/at-current-range/insert-block/is-void/input.yaml @@ -6,3 +6,8 @@ nodes: nodes: - kind: text text: "" + - kind: block + type: paragraph + nodes: + - kind: text + text: "Some text" diff --git a/test/transforms/fixtures/at-current-range/insert-block/is-void/output.yaml b/test/transforms/fixtures/at-current-range/insert-block/is-void/output.yaml index 8d6405375..bd7a839fb 100644 --- a/test/transforms/fixtures/at-current-range/insert-block/is-void/output.yaml +++ b/test/transforms/fixtures/at-current-range/insert-block/is-void/output.yaml @@ -1,10 +1,15 @@ nodes: - kind: block - type: image - isVoid: true - - kind: block - type: image + type: video nodes: - kind: text text: "" + - kind: block + isVoid: true + type: image + - kind: block + type: paragraph + nodes: + - kind: text + text: "Some text" diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/index.js b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/index.js new file mode 100644 index 000000000..74252f927 --- /dev/null +++ b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 1, + focusKey: first.key, + focusOffset: 1 + }) + + return state + .transform() + .insertBlockAtRange(range, 'image') + .apply() +} diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/input.yaml b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/input.yaml new file mode 100644 index 000000000..5c4272312 --- /dev/null +++ b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/input.yaml @@ -0,0 +1,5 @@ + +nodes: + - kind: block + type: video + isVoid: true diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void/output.yaml b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/output.yaml similarity index 88% rename from test/transforms/fixtures/at-range/insert-block-at-range/is-void/output.yaml rename to test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/output.yaml index 8d6405375..3abe01acb 100644 --- a/test/transforms/fixtures/at-range/insert-block-at-range/is-void/output.yaml +++ b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-end/output.yaml @@ -1,7 +1,7 @@ nodes: - kind: block - type: image + type: video isVoid: true - kind: block type: image diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void/index.js b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/index.js similarity index 100% rename from test/transforms/fixtures/at-range/insert-block-at-range/is-void/index.js rename to test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/index.js diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/input.yaml b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/input.yaml new file mode 100644 index 000000000..5c4272312 --- /dev/null +++ b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/input.yaml @@ -0,0 +1,5 @@ + +nodes: + - kind: block + type: video + isVoid: true diff --git a/test/transforms/fixtures/at-range/insert-block-at-range/is-void/input.yaml b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/output.yaml similarity index 76% rename from test/transforms/fixtures/at-range/insert-block-at-range/is-void/input.yaml rename to test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/output.yaml index 1700caf75..d19e8c6e5 100644 --- a/test/transforms/fixtures/at-range/insert-block-at-range/is-void/input.yaml +++ b/test/transforms/fixtures/at-range/insert-block-at-range/is-void-focus-start/output.yaml @@ -2,7 +2,9 @@ nodes: - kind: block type: image - isVoid: true nodes: - kind: text text: "" + - kind: block + type: video + isVoid: true