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

Reply via email to