Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/197954
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, 27 insertions(+), 3 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/54/197954/1
diff --git a/src/dm/ve.dm.SurfaceFragment.js b/src/dm/ve.dm.SurfaceFragment.js
index 9e862c4..33494f9 100644
--- a/src/dm/ve.dm.SurfaceFragment.js
+++ b/src/dm/ve.dm.SurfaceFragment.js
@@ -376,6 +376,11 @@
case 'closest':
// Grow range to cover closest common ancestor node of
given type
node = this.document.selectNodes( oldRange, 'siblings'
)[0].node;
+ // If the range covered the entire node check that node
+ if ( node.getRange().equalsSelection( oldRange ) &&
node instanceof type ) {
+ newRange = node.getOuterRange();
+ break;
+ }
parent = node.getParent();
while ( parent && !( parent instanceof type ) ) {
node = parent;
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: newchange
Gerrit-Change-Id: Ifdd18b6db5c74f1d3ce00f1f1a829e45eb61ced6
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits