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