Catrope has uploaded a new change for review.
https://gerrit.wikimedia.org/r/68607
Change subject: Fix selectNodes() bug with empty non-content branch nodes
......................................................................
Fix selectNodes() bug with empty non-content branch nodes
These kinds of empty nodes shouldn't occur since the converter fills
them with empty paragraphs, but selectNodes() should still behave
correctly for them.
Change-Id: Ia37f3db1c2a84b842e2311cf70642fa66af04d91
---
M modules/ve/test/dm/ve.dm.example.js
M modules/ve/ve.Document.js
2 files changed, 34 insertions(+), 3 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/07/68607/1
diff --git a/modules/ve/test/dm/ve.dm.example.js
b/modules/ve/test/dm/ve.dm.example.js
index 4af8941..cf17704 100644
--- a/modules/ve/test/dm/ve.dm.example.js
+++ b/modules/ve/test/dm/ve.dm.example.js
@@ -693,6 +693,11 @@
{ 'type': '/paragraph' }
];
+ve.dm.example.emptyBranch = [
+ { 'type': 'table' },
+ { 'type': '/table' }
+];
+
/**
* Sample content data index.
*
@@ -4103,5 +4108,23 @@
}
],
'msg': 'zero-length range in text node after inline node'
+ },
+ {
+ 'doc': 'emptyBranch',
+ 'range': new ve.Range( 1 ),
+ 'mode': 'leaves',
+ 'expected': [
+ // table
+ {
+ 'node': [ 0],
+ 'range': new ve.Range( 1, 1 ),
+ 'index': 0,
+ 'indexInNode': 0,
+ 'nodeRange': new ve.Range( 1, 1 ),
+ 'nodeOuterRange': new ve.Range( 0, 2 ),
+ 'parentOuterRange': new ve.Range( 0, 2 )
+ }
+ ],
+ 'msg': 'Zero-length range in empty branch node'
}
];
diff --git a/modules/ve/ve.Document.js b/modules/ve/ve.Document.js
index b528dba..aae7ba4 100644
--- a/modules/ve/ve.Document.js
+++ b/modules/ve/ve.Document.js
@@ -60,7 +60,8 @@
* - `indexInNode`: If range is a zero-length range between two children of
node,
* this is set to the index of the child following range (or to
* `node.children.length + 1` if range is between the last child and
- * the end). Missing in all other cases.
+ * the end). If range is a zero-length range inside an empty non-content
branch node, this is 0.
+ * Missing in all other cases.
* - `nodeRange`: Range covering the inside of the entire node, not including
wrapper
* - `nodeOuterRange`: Range covering the entire node, including wrapper
* - `parentOuterRange`: Outer range of node's parent. Missing if there is no
parent
@@ -99,7 +100,8 @@
parentRange,
isWrapped,
isPrevUnwrapped,
- isNextUnwrapped;
+ isNextUnwrapped,
+ isEmptyBranch;
mode = mode || 'leaves';
if ( mode !== 'leaves' && mode !== 'branches' && mode !== 'covered' &&
mode !== 'siblings' ) {
@@ -141,6 +143,8 @@
isPrevUnwrapped = prevNode ? !prevNode.isWrapped() : false;
// Is there an unwrapped node right after this node?
isNextUnwrapped = nextNode ? !nextNode.isWrapped() : false;
+ // Is this node an empty non-content branch node?
+ isEmptyBranch = node.getLength() === 0 && !node.isContent() &&
!node.canContainContent();
// Is the start between prevNode's closing and node or between
the parent's opening and node?
startBetween = ( isWrapped ? start === left - 1 : start ===
left ) && !isPrevUnwrapped;
// Is the end between node and nextNode's opening or between
node and the parent's closing?
@@ -258,7 +262,7 @@
continue;
} else {
// node is a leaf node and the range is
entirely inside it
- return [ {
+ retval = [ {
'node': node,
'range': new ve.Range( start, end ),
'index': currentFrame.index,
@@ -269,6 +273,10 @@
parentRange.end +
currentFrame.node.isWrapped()
)
} ];
+ if ( isEmptyBranch ) {
+ retval[0].indexInNode = 0;
+ }
+ return retval;
}
} else if ( startInside ) {
if ( ( mode === 'leaves' ||
--
To view, visit https://gerrit.wikimedia.org/r/68607
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia37f3db1c2a84b842e2311cf70642fa66af04d91
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits