jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/334368 )
Change subject: Handle home/end/pageup/pagedown keys when on focusable nodes
......................................................................
Handle home/end/pageup/pagedown keys when on focusable nodes
Bug: T156376
Change-Id: Ib34f32a7aa64c4a682725e94c5114b48b23a4ec0
---
M src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
M src/ce/keydownhandlers/ve.ce.TableArrowKeyDownHandler.js
M tests/ce/ve.ce.Surface.test.js
3 files changed, 46 insertions(+), 13 deletions(-)
Approvals:
jenkins-bot: Verified
Jforrester: Looks good to me, approved
diff --git a/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
b/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
index caf9626..df3e3c0 100644
--- a/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
+++ b/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
@@ -25,7 +25,10 @@
ve.ce.LinearArrowKeyDownHandler.static.name = 'linearArrow';
-ve.ce.LinearArrowKeyDownHandler.static.keys = [ OO.ui.Keys.UP,
OO.ui.Keys.DOWN, OO.ui.Keys.LEFT, OO.ui.Keys.RIGHT ];
+ve.ce.LinearArrowKeyDownHandler.static.keys = [
+ OO.ui.Keys.UP, OO.ui.Keys.DOWN, OO.ui.Keys.LEFT, OO.ui.Keys.RIGHT,
+ OO.ui.Keys.HOME, OO.ui.Keys.END, OO.ui.Keys.PAGEUP, OO.ui.Keys.PAGEDOWN
+];
ve.ce.LinearArrowKeyDownHandler.static.supportedSelections = [ 'linear' ];
@@ -35,8 +38,12 @@
* @inheritdoc
*/
ve.ce.LinearArrowKeyDownHandler.static.execute = function ( surface, e ) {
- var nativeRange, collapseNode, collapseOffset, direction,
directionality, upOrDown,
+ var nativeRange, collapseNode, collapseOffset, direction,
directionality,
startFocusNode, startFocusOffset,
+ isBlockMove = e.keyCode === OO.ui.Keys.UP || e.keyCode ===
OO.ui.Keys.DOWN ||
+ e.keyCode === OO.ui.Keys.PAGEUP || e.keyCode ===
OO.ui.Keys.PAGEDOWN ||
+ e.keyCode === OO.ui.Keys.HOME || e.keyCode ===
OO.ui.Keys.END,
+ keyBlockDirection = e.keyCode === OO.ui.Keys.DOWN || e.keyCode
=== OO.ui.Keys.PAGEDOWN || e.keyCode === OO.ui.Keys.END ? 1 : -1,
range = surface.model.getSelection().getRange();
// TODO: onDocumentKeyDown did this already
@@ -44,12 +51,10 @@
// TODO: onDocumentKeyDown did this already
surface.surfaceObserver.pollOnce();
- upOrDown = e.keyCode === OO.ui.Keys.UP || e.keyCode === OO.ui.Keys.DOWN;
-
if ( surface.focusedBlockSlug ) {
// Block level selection, so directionality is just css
directionality
- if ( upOrDown ) {
- direction = e.keyCode === OO.ui.Keys.DOWN ? 1 : -1;
+ if ( isBlockMove ) {
+ direction = keyBlockDirection;
} else {
directionality = $( surface.focusedBlockSlug ).css(
'direction' );
// eslint-disable-next-line no-bitwise
@@ -74,8 +79,8 @@
}
if ( surface.focusedNode ) {
- if ( upOrDown ) {
- direction = e.keyCode === OO.ui.Keys.DOWN ? 1 : -1;
+ if ( isBlockMove ) {
+ direction = keyBlockDirection;
} else {
directionality = surface.getFocusedNodeDirectionality();
// eslint-disable-next-line no-bitwise
@@ -118,7 +123,7 @@
// Move to start/end of node in the model in DM (and
DOM)
range = new ve.Range( direction === 1 ? range.end :
range.start );
surface.model.setLinearSelection( range );
- if ( !upOrDown ) {
+ if ( !isBlockMove ) {
// un-shifted left/right: we've already moved
so preventDefault
e.preventDefault();
return true;
@@ -133,7 +138,7 @@
// is backwards, then use "collapse to anchor - observe -
expand".
collapseNode = surface.nativeSelection.anchorNode;
collapseOffset = surface.nativeSelection.anchorOffset;
- } else if ( e.shiftKey && !range.isCollapsed() && upOrDown ) {
+ } else if ( e.shiftKey && !range.isCollapsed() && isBlockMove ) {
// If selection is expanded and cursoring is up/down, use
// "collapse to focus - observe - expand" to work round quirks.
collapseNode = surface.nativeSelection.focusNode;
@@ -166,10 +171,10 @@
if ( viewNode.isFocusable() ) {
// We've landed in a focusable node; fixup the range
- if ( upOrDown ) {
+ if ( isBlockMove ) {
// The intended direction is clear, even if the
cursor did not move
// or did something completely preposterous
- afterDirection = e.keyCode === OO.ui.Keys.DOWN
? 1 : -1;
+ afterDirection = keyBlockDirection;
} else {
// Observe which way the cursor moved
afterDirection = ve.compareDocumentOrder(
diff --git a/src/ce/keydownhandlers/ve.ce.TableArrowKeyDownHandler.js
b/src/ce/keydownhandlers/ve.ce.TableArrowKeyDownHandler.js
index f47746a..84cbcd2 100644
--- a/src/ce/keydownhandlers/ve.ce.TableArrowKeyDownHandler.js
+++ b/src/ce/keydownhandlers/ve.ce.TableArrowKeyDownHandler.js
@@ -27,7 +27,7 @@
ve.ce.TableArrowKeyDownHandler.static.keys = [
OO.ui.Keys.UP, OO.ui.Keys.DOWN, OO.ui.Keys.LEFT, OO.ui.Keys.RIGHT,
- OO.ui.Keys.END, OO.ui.Keys.HOME, OO.ui.Keys.PAGEUP, OO.ui.Keys.PAGEDOWN,
+ OO.ui.Keys.HOME, OO.ui.Keys.END, OO.ui.Keys.PAGEUP, OO.ui.Keys.PAGEDOWN,
OO.ui.Keys.TAB
];
diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index 250aacc..91eb825 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -756,9 +756,23 @@
{
htmlOrDoc: blockImageDoc,
rangeOrSelection: new ve.Range( 5, 18 ),
+ keys: [ 'HOME' ],
+ expectedRangeOrSelection: new ve.Range( 4 ),
+ msg: 'Cursor home off a block node'
+ },
+ {
+ htmlOrDoc: blockImageDoc,
+ rangeOrSelection: new ve.Range( 5, 18 ),
keys: [ 'UP' ],
expectedRangeOrSelection: new ve.Range( 4 ),
msg: 'Cursor up off a block node'
+ },
+ {
+ htmlOrDoc: blockImageDoc,
+ rangeOrSelection: new ve.Range( 5, 18 ),
+ keys: [ 'PAGEUP' ],
+ expectedRangeOrSelection: new ve.Range( 4 ),
+ msg: 'Cursor page up off a block node'
},
{
htmlOrDoc: blockImageDoc,
@@ -770,10 +784,24 @@
{
htmlOrDoc: blockImageDoc,
rangeOrSelection: new ve.Range( 5, 18 ),
+ keys: [ 'END' ],
+ expectedRangeOrSelection: new ve.Range( 19 ),
+ msg: 'Cursor end off a block node'
+ },
+ {
+ htmlOrDoc: blockImageDoc,
+ rangeOrSelection: new ve.Range( 5, 18 ),
keys: [ 'DOWN' ],
expectedRangeOrSelection: new ve.Range( 19 ),
msg: 'Cursor down off a block node'
},
+ {
+ htmlOrDoc: blockImageDoc,
+ rangeOrSelection: new ve.Range( 5, 18 ),
+ keys: [ 'PAGEDOWN' ],
+ expectedRangeOrSelection: new ve.Range( 19 ),
+ msg: 'Cursor page down off a block node'
+ },
// Cursoring onto a block node, which should focus it
// Again, these are forcibly moving the cursor, so it's
not a perfect
// test; it's more checking how we fix up the selection
afterwards.
--
To view, visit https://gerrit.wikimedia.org/r/334368
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib34f32a7aa64c4a682725e94c5114b48b23a4ec0
Gerrit-PatchSet: 3
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: Divec <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits