Esanders has uploaded a new change for review. ( 
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
2 files changed, 18 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/68/334368/1

diff --git a/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js 
b/src/ce/keydownhandlers/ve.ce.LinearArrowKeyDownHandler.js
index caf9626..6c9a1b3 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,11 @@
        // 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 +80,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 +124,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 +139,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 +172,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
 ];
 

-- 
To view, visit https://gerrit.wikimedia.org/r/334368
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib34f32a7aa64c4a682725e94c5114b48b23a4ec0
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to