Catrope has uploaded a new change for review.
https://gerrit.wikimedia.org/r/191557
Change subject: newFromDocumentInsertion: Also remap store indexes in
internalList data
......................................................................
newFromDocumentInsertion: Also remap store indexes in internalList data
Store indexes were remapped in the main data inserted from newDoc,
but not in internalList data inserted from newDoc. This led to
strange bugs when pasting content that introduced new internal items
containing annotated text.
Bug: T89943
Change-Id: Ibfe797de3535b69b9530291aed6b9c1c75f592b7
---
M src/dm/ve.dm.Transaction.js
1 file changed, 23 insertions(+), 10 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/57/191557/1
diff --git a/src/dm/ve.dm.Transaction.js b/src/dm/ve.dm.Transaction.js
index d1ca047..6ba3419 100644
--- a/src/dm/ve.dm.Transaction.js
+++ b/src/dm/ve.dm.Transaction.js
@@ -104,8 +104,8 @@
* @returns {ve.dm.Transaction} Transaction that inserts the nodes and updates
the internal list
*/
ve.dm.Transaction.newFromDocumentInsertion = function ( doc, offset, newDoc,
newDocRange ) {
- var i, len, merge, data, metadata, listData, listMetadata,
oldEndOffset, newEndOffset, tx,
- insertion, spliceItemRange, spliceListNodeRange,
+ var i, len, storeMerge, listMerge, data, metadata, listData,
listMetadata, linearData,
+ oldEndOffset, newEndOffset, tx, insertion, spliceItemRange,
spliceListNodeRange,
listNode = doc.internalList.getListNode(),
listNodeRange = listNode.getRange(),
newListNode = newDoc.internalList.getListNode(),
@@ -133,13 +133,13 @@
}
// Merge the stores
- merge = doc.getStore().merge( newDoc.getStore() );
+ storeMerge = doc.getStore().merge( newDoc.getStore() );
// Remap the store indexes in the data
- data.remapStoreIndexes( merge );
+ data.remapStoreIndexes( storeMerge );
- merge = doc.internalList.merge( newDoc.internalList,
newDoc.origInternalListLength || 0 );
+ listMerge = doc.internalList.merge( newDoc.internalList,
newDoc.origInternalListLength || 0 );
// Remap the indexes in the data
- data.remapInternalListIndexes( merge.mapping, doc.internalList );
+ data.remapInternalListIndexes( listMerge.mapping, doc.internalList );
// Get data for the new internal list
if ( newDoc.origDoc === doc ) {
// newDoc is a document slice based on doc, so all the internal
list items present in doc
@@ -152,7 +152,13 @@
oldEndOffset = listNodeRange.start;
newEndOffset = newListNodeRange.start;
}
- listData = newDoc.getData( new ve.Range(
newListNodeRange.start, newEndOffset ), true )
+ linearData = new ve.dm.ElementLinearData(
+ doc.getStore(),
+ newDoc.getData( new ve.Range( newListNodeRange.start,
newEndOffset ), true )
+ );
+ // Remap indexes in data coming from newDoc
+ linearData.remapStoreIndexes( storeMerge );
+ listData = linearData.data
.concat( doc.getData( new ve.Range( oldEndOffset,
listNodeRange.end ), true ) );
listMetadata = newDoc.getMetadata( new ve.Range(
newListNodeRange.start, newEndOffset ), true )
.concat( doc.getMetadata( new ve.Range( oldEndOffset,
listNodeRange.end ), true ) );
@@ -161,11 +167,18 @@
listData = doc.getData( listNodeRange, true );
listMetadata = doc.getMetadata( listNodeRange, true );
}
- for ( i = 0, len = merge.newItemRanges.length; i < len; i++ ) {
- listData = listData.concat( newDoc.getData(
merge.newItemRanges[i], true ) );
+ for ( i = 0, len = listMerge.newItemRanges.length; i < len; i++ ) {
+ linearData = new ve.dm.ElementLinearData(
+ doc.getStore(),
+ newDoc.getData( listMerge.newItemRanges[i], true )
+ );
+ // Remap indexes in data coming from newDoc
+ debugger;
+ linearData.remapStoreIndexes( storeMerge );
+ listData = listData.concat( linearData.data );
// We don't have to worry about merging metadata at the edges,
because there can't be
// metadata between internal list items
- listMetadata = listMetadata.concat( newDoc.getMetadata(
merge.newItemRanges[i], true ) );
+ listMetadata = listMetadata.concat( newDoc.getMetadata(
listMerge.newItemRanges[i], true ) );
}
tx = new ve.dm.Transaction();
--
To view, visit https://gerrit.wikimedia.org/r/191557
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibfe797de3535b69b9530291aed6b9c1c75f592b7
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits