From b94d9c7c7ceef095fe0e65c846f1f53326decba4 Mon Sep 17 00:00:00 2001 From: iseulde Date: Fri, 15 Mar 2019 13:12:33 +0100 Subject: [PATCH 1/2] Input Interaction: only consider selection at edge if directed towards it --- packages/dom/src/dom.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/dom/src/dom.js b/packages/dom/src/dom.js index 75f2d10311345..4ea9ad8c0ef78 100644 --- a/packages/dom/src/dom.js +++ b/packages/dom/src/dom.js @@ -169,7 +169,18 @@ export function isVerticalEdge( container, isReverse ) { } const selection = window.getSelection(); + + // Only consider the selection at the edge if the direction is towards the + // edge. + if ( + ! selection.isCollapsed && + isSelectionForward( selection ) === isReverse + ) { + return false; + } + const range = selection.rangeCount ? selection.getRangeAt( 0 ) : null; + if ( ! range ) { return false; } From ebb0d9aa0c184f7be2d217e4e3eab19c8941b64b Mon Sep 17 00:00:00 2001 From: iseulde Date: Fri, 15 Mar 2019 13:32:53 +0100 Subject: [PATCH 2/2] Add e2e test --- .../multi-block-selection.test.js.snap | 6 ++++++ .../e2e-tests/specs/multi-block-selection.test.js | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/e2e-tests/specs/__snapshots__/multi-block-selection.test.js.snap b/packages/e2e-tests/specs/__snapshots__/multi-block-selection.test.js.snap index 3634f485a83ee..dad6ac487081b 100644 --- a/packages/e2e-tests/specs/__snapshots__/multi-block-selection.test.js.snap +++ b/packages/e2e-tests/specs/__snapshots__/multi-block-selection.test.js.snap @@ -9,3 +9,9 @@ exports[`Multi-block selection should only trigger multi-selection when at the e

" `; + +exports[`Multi-block selection should use selection direction to determine vertical edge 1`] = ` +" +

1
2.

+" +`; diff --git a/packages/e2e-tests/specs/multi-block-selection.test.js b/packages/e2e-tests/specs/multi-block-selection.test.js index 5a83abc74036d..b65a7afa49b64 100644 --- a/packages/e2e-tests/specs/multi-block-selection.test.js +++ b/packages/e2e-tests/specs/multi-block-selection.test.js @@ -165,4 +165,19 @@ describe( 'Multi-block selection', () => { expect( await getEditedPostContent() ).toMatchSnapshot(); } ); + + it( 'should use selection direction to determine vertical edge', async () => { + await clickBlockAppender(); + await page.keyboard.type( '1' ); + await pressKeyWithModifier( 'shift', 'Enter' ); + await page.keyboard.type( '2' ); + + await pressKeyWithModifier( 'shift', 'ArrowUp' ); + await pressKeyWithModifier( 'shift', 'ArrowDown' ); + + // Should type at the end of the paragraph. + await page.keyboard.type( '.' ); + + expect( await getEditedPostContent() ).toMatchSnapshot(); + } ); } );