From fe5aef8b4e9632f0bb7c960fdc3c2011dc32d584 Mon Sep 17 00:00:00 2001 From: Alexander Wilde Date: Mon, 3 Jun 2019 16:15:15 +0100 Subject: [PATCH 1/2] Fix deleting backwards when there are only inlines (unfortunaly it deletes all inlines) --- packages/slate/src/commands/at-range.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/slate/src/commands/at-range.js b/packages/slate/src/commands/at-range.js index 1a13fa9a44..2d40cd8346 100644 --- a/packages/slate/src/commands/at-range.js +++ b/packages/slate/src/commands/at-range.js @@ -377,9 +377,10 @@ Commands.deleteBackwardAtRange = (editor, range, n = 1) => { let node = text let offset = 0 let traversed = focus.offset + let prevNode = document.getPreviousText(node.key) - while (n > traversed) { - node = document.getPreviousText(node.key) + while (prevNode && n > traversed) { + node = prevNode const next = traversed + node.text.length if (n <= next) { @@ -388,6 +389,8 @@ Commands.deleteBackwardAtRange = (editor, range, n = 1) => { } else { traversed = next } + + prevNode = document.getPreviousText(node.key) } range = range.moveAnchorTo(node.key, offset) From 754a8f49ea4d1d03780a9ddddf637da56f0bf3de Mon Sep 17 00:00:00 2001 From: Alexander Wilde Date: Fri, 7 Jun 2019 16:33:24 +0100 Subject: [PATCH 2/2] Fix support for deleting inlines. Can now delete inlines 1 by 1 --- packages/slate/src/commands/at-range.js | 40 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/packages/slate/src/commands/at-range.js b/packages/slate/src/commands/at-range.js index 2d40cd8346..302150ed2d 100644 --- a/packages/slate/src/commands/at-range.js +++ b/packages/slate/src/commands/at-range.js @@ -375,26 +375,38 @@ Commands.deleteBackwardAtRange = (editor, range, n = 1) => { // Otherwise, we need to see how many nodes backwards to go. let node = text - let offset = 0 let traversed = focus.offset - let prevNode = document.getPreviousText(node.key) + const prevSibling = document.getPreviousSibling(node.key) - while (prevNode && n > traversed) { - node = prevNode - const next = traversed + node.text.length + // If the next sibling is an inline, has no text and the focus offset is 0, + // then delete the inline + if ( + traversed === 0 && + Inline.isInline(prevSibling) && + prevSibling.text === '' + ) { + editor.removeNodeByKey(prevSibling.key) + } else { + let offset = 0 + let prevNode = document.getPreviousText(node.key) - if (n <= next) { - offset = next - n - break - } else { - traversed = next + while (prevNode && n > traversed) { + node = prevNode + const next = traversed + node.text.length + + if (n <= next) { + offset = next - n + break + } else { + traversed = next + } + + prevNode = document.getPreviousText(node.key) } - prevNode = document.getPreviousText(node.key) + range = range.moveAnchorTo(node.key, offset) + editor.deleteAtRange(range) } - - range = range.moveAnchorTo(node.key, offset) - editor.deleteAtRange(range) } /**