Catrope has uploaded a new change for review.
https://gerrit.wikimedia.org/r/73533
Change subject: Actually use op.retainMetadata in structural replace mode
......................................................................
Actually use op.retainMetadata in structural replace mode
It was being used correctly in the textual replace case, but it was
omitted in the structural replace case. This caused rare, insidious
metadata placement bugs that I haven't been able to reproduce outside
of newFromDocumentInsertion testing, but this might explain some of
the odd category bugs that have been reported.
Change-Id: I1424e482303853f285e4516a93c9609076648eff
---
M modules/ve/dm/ve.dm.MetaList.js
M modules/ve/dm/ve.dm.TransactionProcessor.js
M modules/ve/test/dm/ve.dm.TransactionProcessor.test.js
3 files changed, 24 insertions(+), 2 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/33/73533/1
diff --git a/modules/ve/dm/ve.dm.MetaList.js b/modules/ve/dm/ve.dm.MetaList.js
index 861b06a..78e8af4 100644
--- a/modules/ve/dm/ve.dm.MetaList.js
+++ b/modules/ve/dm/ve.dm.MetaList.js
@@ -96,7 +96,7 @@
index = 0;
break;
case 'replace':
- // if we have metadata replace info we can
calulcate the new
+ // if we have metadata replace info we can
calculate the new
// offset and index directly
ins = reversed ? ops[i].removeMetadata :
ops[i].insertMetadata;
rm = reversed ? ops[i].insertMetadata :
ops[i].removeMetadata;
diff --git a/modules/ve/dm/ve.dm.TransactionProcessor.js
b/modules/ve/dm/ve.dm.TransactionProcessor.js
index 9a8f86d..5e628b3 100644
--- a/modules/ve/dm/ve.dm.TransactionProcessor.js
+++ b/modules/ve/dm/ve.dm.TransactionProcessor.js
@@ -387,7 +387,7 @@
this.document.data.batchSplice( this.cursor,
opRemove.length, opInsert );
// Keep the meta linear model in sync
if ( opRemoveMetadata !== undefined ) {
- this.document.metadata.batchSplice(
this.cursor, opRemoveMetadata.length, opInsertMetadata );
+ this.document.metadata.batchSplice(
this.cursor + op.retainMetadata, opRemoveMetadata.length, opInsertMetadata );
} else if ( opInsert.length > opRemove.length )
{
this.document.metadata.batchSplice(
this.cursor + opRemove.length, 0, new Array( opInsert.length - opRemove.length
) );
} else if ( opInsert.length < opRemove.length )
{
diff --git a/modules/ve/test/dm/ve.dm.TransactionProcessor.test.js
b/modules/ve/test/dm/ve.dm.TransactionProcessor.test.js
index d461358..b52623a 100644
--- a/modules/ve/test/dm/ve.dm.TransactionProcessor.test.js
+++ b/modules/ve/test/dm/ve.dm.TransactionProcessor.test.js
@@ -315,6 +315,28 @@
'expected': function ( data ) {
data.splice( 15, 2 );
}
+ },
+ 'structural replacement starting at an offset without
metadata': {
+ 'data': [
+ { 'type': 'paragraph' },
+ 'F',
+ {
+ 'type': 'alienMeta',
+ 'attributes': {
+ 'domElements': $( '<!--
foo -->' ).toArray()
+ }
+ },
+ { 'type': '/alienMeta' },
+ 'o', 'o',
+ { 'type': '/paragraph' }
+ ],
+ 'calls': [
+ ['pushReplace', 0, 5, [ { 'type':
'table' }, { 'type': '/table' } ]]
+ ],
+ 'expected': function ( data ) {
+ data.splice( 0, 2, { 'type': 'table' },
{ 'type': '/table' } );
+ data.splice( 4, 3 );
+ }
}
};
--
To view, visit https://gerrit.wikimedia.org/r/73533
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1424e482303853f285e4516a93c9609076648eff
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