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

Change subject: Fix edge case in expandLinearSelection when selection covers 
node
......................................................................


Fix edge case in expandLinearSelection when selection covers node

Bug: T86762
Change-Id: Ifdd18b6db5c74f1d3ce00f1f1a829e45eb61ced6
---
M src/dm/ve.dm.SurfaceFragment.js
M tests/dm/ve.dm.SurfaceFragment.test.js
2 files changed, 29 insertions(+), 5 deletions(-)

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



diff --git a/src/dm/ve.dm.SurfaceFragment.js b/src/dm/ve.dm.SurfaceFragment.js
index 9e862c4..7c6d0d6 100644
--- a/src/dm/ve.dm.SurfaceFragment.js
+++ b/src/dm/ve.dm.SurfaceFragment.js
@@ -375,8 +375,13 @@
                        break;
                case 'closest':
                        // Grow range to cover closest common ancestor node of 
given type
-                       node = this.document.selectNodes( oldRange, 'siblings' 
)[0].node;
-                       parent = node.getParent();
+                       nodes = this.document.selectNodes( oldRange, 'siblings' 
);
+                       // If the range covered the entire node check that node
+                       if ( nodes[0].nodeRange.equalsSelection( oldRange ) && 
nodes[0].node instanceof type ) {
+                               newRange = nodes[0].nodeOuterRange;
+                               break;
+                       }
+                       parent = nodes[0].node.getParent();
                        while ( parent && !( parent instanceof type ) ) {
                                node = parent;
                                parent = parent.getParent();
diff --git a/tests/dm/ve.dm.SurfaceFragment.test.js 
b/tests/dm/ve.dm.SurfaceFragment.test.js
index e233337..3adcd6d 100644
--- a/tests/dm/ve.dm.SurfaceFragment.test.js
+++ b/tests/dm/ve.dm.SurfaceFragment.test.js
@@ -96,12 +96,30 @@
 } );
 
 QUnit.test( 'expandLinearSelection (closest)', function ( assert ) {
-       var i, fragment,
+       var i, fragment, surface,
                doc = ve.dm.example.createExampleDocument(),
-               surface = new ve.dm.Surface( doc ),
                cases = [
                        {
-                               msg: 'closest with invalid type results in null 
fragment',
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph',
+                               range: new ve.Range( 1 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 5 ) )
+                       },
+                       {
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph in empty paragraph',
+                               doc: 'alienWithEmptyData',
+                               range: new ve.Range( 1 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 2 ) )
+                       },
+                       {
+                               msg: 've.dm.BranchNode selects surrounding 
paragraph when entire paragrpah selected',
+                               range: new ve.Range( 1, 4 ),
+                               type: ve.dm.BranchNode,
+                               expected: new ve.dm.LinearSelection( doc, new 
ve.Range( 0, 5 ) )
+                       },
+                       {
+                               msg: 'invalid type results in null fragment',
                                range: new ve.Range( 20, 21 ),
                                type: function () {},
                                expected: new ve.dm.NullSelection( doc )
@@ -110,6 +128,7 @@
 
        QUnit.expect( cases.length );
        for ( i = 0; i < cases.length; i++ ) {
+               surface = new ve.dm.Surface( 
ve.dm.example.createExampleDocument( cases[i].doc ) );
                fragment = surface.getLinearFragment( cases[i].range 
).expandLinearSelection( 'closest', cases[i].type );
                assert.equalHash( fragment.getSelection(), cases[i].expected, 
cases[i].msg );
        }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifdd18b6db5c74f1d3ce00f1f1a829e45eb61ced6
Gerrit-PatchSet: 2
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to