jenkins-bot has submitted this change and it was merged.
Change subject: Fix up result of selectNodes
......................................................................
Fix up result of selectNodes
Exclude empty selections in unwrapped nodes.
Bug: 60117
Change-Id: Ifa2ed0c1d315d78fdf7fbb6d13fca37e19445b1e
---
M modules/ve/dm/ve.dm.Document.js
M modules/ve/test/dm/ve.dm.Document.test.js
2 files changed, 38 insertions(+), 4 deletions(-)
Approvals:
Catrope: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/ve/dm/ve.dm.Document.js b/modules/ve/dm/ve.dm.Document.js
index 08e8287..2119052 100644
--- a/modules/ve/dm/ve.dm.Document.js
+++ b/modules/ve/dm/ve.dm.Document.js
@@ -381,11 +381,23 @@
contextOpenings = [],
contextClosings = [];
+ // Fix up selection to remove empty items in unwrapped nodes
+ // TODO: fix this is selectNodes
+ while ( selection[0] && selection[0].range &&
selection[0].range.isCollapsed() && !selection[0].node.isWrapped() ) {
+ selection.shift();
+ }
+
+ i = selection.length - 1;
+ while ( selection[i] && selection[i].range &&
selection[i].range.isCollapsed() && !selection[i].node.isWrapped() ) {
+ selection.pop();
+ i--;
+ }
+
if ( selection.length === 0 ) {
// Nothing selected
data = new ve.dm.ElementLinearData( this.getStore(), [] );
originalRange = balancedRange = new ve.Range( 0 );
- } else if ( selection.length === 1 && selection[0].range &&
selection[0].range.equalsSelection( range ) ) {
+ } else if ( selection.length === 1 && range.equalsSelection(
selection[0].range || selection[0].nodeRange ) ) {
// Nothing to fix up
data = new ve.dm.ElementLinearData( this.getStore(),
this.data.slice( range.start, range.end ) );
originalRange = balancedRange = new ve.Range( 0,
data.getLength() );
diff --git a/modules/ve/test/dm/ve.dm.Document.test.js
b/modules/ve/test/dm/ve.dm.Document.test.js
index 92e5dfe..9547136 100644
--- a/modules/ve/test/dm/ve.dm.Document.test.js
+++ b/modules/ve/test/dm/ve.dm.Document.test.js
@@ -282,8 +282,7 @@
} );
QUnit.test( 'cloneSliceFromRange', function ( assert ) {
- var i, expectedData, slice, range,
- doc = ve.dm.example.createExampleDocument(),
+ var i, expectedData, slice, range, doc,
cases = [
{
'msg': 'empty range',
@@ -441,10 +440,33 @@
],
'originalRange': new ve.Range( 3, 29 ),
'balancedRange': new ve.Range( 3, 29 )
+ },
+ {
+ 'doc': 'inlineAtEdges',
+ 'msg': 'inline node at start',
+ 'range': new ve.Range( 1, 3 ),
+ 'expected': [
+ ve.dm.example.image.data,
+ { 'type': '/image' }
+ ],
+ 'originalRange': new ve.Range( 0, 2 ),
+ 'balancedRange': new ve.Range( 0, 2 )
+ },
+ {
+ 'doc': 'inlineAtEdges',
+ 'msg': 'inline node at end',
+ 'range': new ve.Range( 6, 8 ),
+ 'expected': [
+ { 'type': 'alienInline', 'attributes': {
'domElements': $( '<foobar />' ).toArray() } },
+ { 'type': '/alienInline' }
+ ],
+ 'originalRange': new ve.Range( 0, 2 ),
+ 'balancedRange': new ve.Range( 0, 2 )
}
];
QUnit.expect( 3 * cases.length );
for ( i = 0; i < cases.length; i++ ) {
+ doc = ve.dm.example.createExampleDocument( cases[i].doc );
expectedData = ve.dm.example.preprocessAnnotations(
cases[i].expected.slice(), doc.getStore() ).getData();
range = new ve.Range( 0, cases[i].expected.length );
expectedData = expectedData.concat( [
@@ -452,7 +474,7 @@
{ 'type': '/internalList' },
] );
slice = doc.cloneSliceFromRange( cases[i].range );
- assert.deepEqual(
+ assert.deepEqualWithDomElements(
slice.getData(),
expectedData,
cases[i].msg + ': data'
--
To view, visit https://gerrit.wikimedia.org/r/108720
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ifa2ed0c1d315d78fdf7fbb6d13fca37e19445b1e
Gerrit-PatchSet: 5
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: jenkins-bot <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits