jenkins-bot has submitted this change and it was merged.

Change subject: Prevent backspacing/deleting over table cells
......................................................................


Prevent backspacing/deleting over table cells

Bug: T92702
Change-Id: Ia3348e2543e956201c1107a14d822eaf56dedd3c
---
M src/ce/ve.ce.Surface.js
M tests/ce/ve.ce.Surface.test.js
2 files changed, 53 insertions(+), 3 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 877e43b..eb0f86e 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -3242,6 +3242,7 @@
  */
 ve.ce.Surface.prototype.handleLinearDelete = function ( e ) {
        var docLength, startNode, tableEditingRange,
+               documentModelSelectedNodes, i, node, nodeOuterRange, matrix,
                direction = e.keyCode === OO.ui.Keys.DELETE ? 1 : -1,
                unit = ( e.altKey === true || e.ctrlKey === true ) ? 'word' : 
'character',
                offset = 0,
@@ -3271,6 +3272,27 @@
                if ( tableEditingRange && !tableEditingRange.containsRange( 
rangeToRemove ) ) {
                        return true;
                }
+
+               // Prevent backspacing/deleting over table cells, select the 
cell instead
+               documentModelSelectedNodes = documentModel.selectNodes( 
rangeToRemove, 'siblings' );
+               for ( i = 0; i < documentModelSelectedNodes.length; i++ ) {
+                       node = documentModelSelectedNodes[ i ].node;
+                       nodeOuterRange = documentModelSelectedNodes[ i 
].nodeOuterRange;
+                       if ( node instanceof ve.dm.TableNode ) {
+                               if ( rangeToRemove.containsOffset( 
nodeOuterRange.start ) ) {
+                                       this.getModel().setSelection( new 
ve.dm.TableSelection(
+                                               documentModel, nodeOuterRange, 
0, 0
+                                       ) );
+                               } else {
+                                       matrix = node.getMatrix();
+                                       this.getModel().setSelection( new 
ve.dm.TableSelection(
+                                               documentModel, nodeOuterRange, 
matrix.getColCount() - 1, matrix.getRowCount() - 1
+                                       ) );
+                               }
+                               return true;
+                       }
+               }
+
                offset = rangeToRemove.start;
                docLength = data.getLength();
                if ( offset < docLength ) {
diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index 001e92a..1b744af 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -96,14 +96,14 @@
                                msg: 'Whole word deleted by modified delete'
                        },
                        {
-                               range: new ve.Range( 1, 4 ),
+                               range: new ve.Range( 56, 57 ),
                                operations: ['delete', 'delete'],
                                expectedData: function ( data ) {
-                                       data.splice( 0, 5 );
+                                       data.splice( 55, 3 );
                                },
                                expectedSelection: {
                                        type: 'linear',
-                                       range: new ve.Range( 5 )
+                                       range: new ve.Range( 56 )
                                },
                                msg: 'Empty node deleted by delete; selection 
goes to nearest content offset'
                        },
@@ -140,6 +140,34 @@
                                msg: 'Focusable node deleted if selected first'
                        },
                        {
+                               range: new ve.Range( 38 ),
+                               operations: ['backspace'],
+                               expectedData: function () {},
+                               expectedSelection: {
+                                       type: 'table',
+                                       tableRange: new ve.Range( 5, 37 ),
+                                       fromCol: 0,
+                                       fromRow: 0,
+                                       toCol: 0,
+                                       toRow: 0
+                               },
+                               msg: 'Table cell selected but not deleted by 
backspace'
+                       },
+                       {
+                               range: new ve.Range( 4 ),
+                               operations: ['delete'],
+                               expectedData: function () {},
+                               expectedSelection: {
+                                       type: 'table',
+                                       tableRange: new ve.Range( 5, 37 ),
+                                       fromCol: 0,
+                                       fromRow: 0,
+                                       toCol: 0,
+                                       toRow: 0
+                               },
+                               msg: 'Table cell selected but not deleted by 
delete'
+                       },
+                       {
                                range: new ve.Range( 0, 63 ),
                                operations: ['backspace'],
                                expectedData: function ( data ) {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia3348e2543e956201c1107a14d822eaf56dedd3c
Gerrit-PatchSet: 10
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Divec <[email protected]>
Gerrit-Reviewer: Esanders <[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

Reply via email to