--- Comment #1 from Roan Kattouw <> ---
Well, not *completely*, just mostly :)

Go to
and select reference [3] by clicking on it, then press Ctrl+C. You'll get a JS

There are several things wrong here:

In findEndOfNode() inside of
* Line 1172 tries to throw an error using dataElement.type, but dataElement
isn't set anywhere, so the generation of the error itself throws an error

In ve.ce.Surface.prototype.onCopy:
* On line 693, cloneSliceFromRange() returns a slice with unbalanced data: [
{type:'paragraph'}, {type:'mwReference'}, {type:'/mwReference'},
{type:'internalList'}, ..., {type:'/internalList'} ]

* On both lines 378 and 431, selectNodes() for a range exactly covering a
reference returns the text node as well. In my test case, the return value is [
{ node: TextNode, range: [69,69] }, { node: ReferenceNode } ]. This is clearly
a bug in selectNodes()
* Even if selection was correctly set to something of length 1, line 388 does
not allow for selection[0].range to be undefined, but that's actually expected
when a node is completely selected. This case should be handled, and
selection[0].nodeRange should be checked against range instead in that case. So
something like else if ( selection.length === 1 && range.equalsSelection(
selection[0].range || selection[0].nodeRange ) ) . Otherwise, even if we fixed
the selectNodes bug, the selection.length===1 code path still wouldn't be
* Because selection.length>1, the else path is taken, and we populate
balanceOpenings and balanceClosings. These two are populated separately in a
way that's broken: because the first node is a text node (not wrapped) we add
an opening for that node's parent, but because the second node is a reference
node (wrapped), we don't add a closing after it. The result is unbalanced
output. This code seems to wrongly assume that leaf nodes are always unwrapped.

You are receiving this mail because:
You are on the CC list for the bug.
Wikibugs-l mailing list

Reply via email to