From 9b39a89f200dcaef923e3cb16fc6e18685fc5e7b Mon Sep 17 00:00:00 2001 From: Jinxuan Zhu Date: Fri, 27 Apr 2018 17:02:56 -0400 Subject: [PATCH] Hanging Selection paste in insertFragmentAtRange (#1742) --- packages/slate/src/changes/at-range.js | 6 ++- .../hanging-selection-single-block.js | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/slate/test/changes/at-current-range/insert-fragment/hanging-selection-single-block.js diff --git a/packages/slate/src/changes/at-range.js b/packages/slate/src/changes/at-range.js index 28f7c85e1..7c549eb76 100644 --- a/packages/slate/src/changes/at-range.js +++ b/packages/slate/src/changes/at-range.js @@ -671,7 +671,11 @@ Changes.insertFragmentAtRange = (change, range, fragment, options = {}) => { // If the range is expanded, delete it first. if (range.isExpanded) { change.deleteAtRange(range, { normalize: false }) - range = range.collapseToStart() + if (change.value.document.getDescendant(range.startKey)) { + range = range.collapseToStart() + } else { + range = range.collapseTo(range.endKey, 0) + } } // If the fragment is empty, there's nothing to do after deleting. diff --git a/packages/slate/test/changes/at-current-range/insert-fragment/hanging-selection-single-block.js b/packages/slate/test/changes/at-current-range/insert-fragment/hanging-selection-single-block.js new file mode 100644 index 000000000..e75eae19e --- /dev/null +++ b/packages/slate/test/changes/at-current-range/insert-fragment/hanging-selection-single-block.js @@ -0,0 +1,44 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +const fragment = ( + + fragment zero + fragment one + fragment two + +) +export default function(change) { + change.insertFragment(fragment) +} + +export const input = ( + + + zero + + one + + + two + + + +) + +// The cursor position of insertFragment has some problems; +// If you submit PR to fixed cursor position restore in insertFragment; +// Please change this test as well +export const output = ( + + + zero + fragment zero + fragment one + + fragment twotwo + + + +)