Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/194352

Change subject: Fix up selection if we cursor into or next to a table node
......................................................................

Fix up selection if we cursor into or next to a table node

Use same code as we use for focusable nodes but check for tables
which are also ce=false.

Simplify focusable node checking code to just search by class.

Bug: T73560
Change-Id: I778af05f6b1e4a46e50f832bbcaa05bde7230cb0
---
M src/ce/nodes/ve.ce.TableNode.js
M src/ce/ve.ce.Surface.js
2 files changed, 18 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/52/194352/1

diff --git a/src/ce/nodes/ve.ce.TableNode.js b/src/ce/nodes/ve.ce.TableNode.js
index e110f20..2114b8a 100644
--- a/src/ce/nodes/ve.ce.TableNode.js
+++ b/src/ce/nodes/ve.ce.TableNode.js
@@ -300,7 +300,7 @@
                ) ||
                (
                        selection instanceof ve.dm.TableSelection &&
-                       selection.tableRange.equals( 
this.getModel().getOuterRange() )
+                       selection.tableRange.equalsSelection( 
this.getModel().getOuterRange() )
                );
 
        if ( active ) {
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 350d01c..004c50c 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -1210,7 +1210,7 @@
  */
 ve.ce.Surface.prototype.afterDocumentKeyDown = function ( e ) {
        var direction, focusableNode, startOffset, endOffset, offsetDiff,
-               range, fixupCursorForUnicorn,
+               range, fixupCursorForUnicorn, matrix,
                surface = this,
                isArrow = (
                        e.keyCode === OO.ui.Keys.UP ||
@@ -1237,7 +1237,7 @@
         * @returns {ve.ce.Node|null} node, or null if not in a focusable node
         */
        function getSurroundingFocusableNode( node, offset, direction ) {
-               var focusNode, $ceNode, focusableNode;
+               var focusNode;
                if ( node.nodeType === Node.TEXT_NODE ) {
                        focusNode = node;
                } else if ( direction > 0 && offset < node.childNodes.length ) {
@@ -1247,19 +1247,7 @@
                } else {
                        focusNode = node;
                }
-               $ceNode = $( focusNode ).closest(
-                       '[contenteditable], .ve-ce-branchNode'
-               );
-               if ( $ceNode.prop( 'contenteditable' ) !== 'false' ) {
-                       return null;
-               }
-               focusableNode = $ceNode.closest(
-                       '.ve-ce-branchNode, .ve-ce-leafNode'
-               ).data( 'view' );
-               if ( !focusableNode || !focusableNode.isFocusable() ) {
-                       return null;
-               }
-               return focusableNode;
+               return $( focusNode ).closest( '.ve-ce-focusableNode, 
.ve-ce-tableNode' ).data( 'view' ) || null;
        }
 
        /**
@@ -1350,7 +1338,20 @@
                                        range = range.flip();
                                }
                        }
-                       this.model.setLinearSelection( range );
+                       if ( focusableNode instanceof ve.ce.TableNode ) {
+                               if ( direction > 0 ) {
+                                       this.model.setSelection( new 
ve.dm.TableSelection(
+                                               this.model.documentModel, 
range, 0, 0
+                                       ) );
+                               } else {
+                                       matrix = 
focusableNode.getModel().getMatrix();
+                                       this.model.setSelection( new 
ve.dm.TableSelection(
+                                               this.model.documentModel, 
range, matrix.getColCount() - 1, matrix.getRowCount() - 1
+                                       ) );
+                               }
+                       } else {
+                               this.model.setLinearSelection( range );
+                       }
                        if ( e.keyCode === OO.ui.Keys.LEFT ) {
                                this.cursorDirectionality = direction > 0 ? 
'rtl' : 'ltr';
                        } else if ( e.keyCode === OO.ui.Keys.RIGHT ) {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I778af05f6b1e4a46e50f832bbcaa05bde7230cb0
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to