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