mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-24 02:38:40 +00:00
ve.dm.MWTemplateModel: Don't add spurious empty parameters
Make ve.dm.MWTemplateModel#serialize ignore empty parameters if they were not present in the transclusion before the edit. This avoids dirty diffs where an user edits a template transclusion via VisualEditor, and the editor adds all available template parameters to the edit wikitext, even if they were not changed during the edit. This logic was ported from the old Wikia-WMF VisualEditor project.[1] Additionally, add tests for ve.dm.MWTemplateModel serialization. --- [1] https://github.com/Wikia/app/pull/6450/commits/858eaa9 Bug: T101075 Change-Id: I35f8812724658904d30034db4e4684193a661c1e
This commit is contained in:
parent
e38dd7188e
commit
d127dc48b7
|
@ -2672,6 +2672,7 @@
|
|||
"modules/ve-mw/tests/dm/ve.dm.mwExample.js",
|
||||
"modules/ve-mw/tests/dm/ve.dm.Converter.test.js",
|
||||
"modules/ve-mw/tests/dm/ve.dm.MWImageModel.test.js",
|
||||
"modules/ve-mw/tests/dm/ve.dm.MWTemplateModel.test.js",
|
||||
"modules/ve-mw/tests/dm/ve.dm.MWTransclusionModel.test.js",
|
||||
"modules/ve-mw/tests/dm/ve.dm.MWInternalLinkAnnotation.test.js",
|
||||
"lib/ve/tests/ce/ve.ce.test.js",
|
||||
|
|
|
@ -345,6 +345,12 @@ ve.dm.MWTemplateModel.prototype.serialize = function () {
|
|||
if ( name === '' ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Don't add empty parameters if they were not present before the edit (T101075)
|
||||
if ( params[ name ].getValue() === '' && !Object.prototype.hasOwnProperty.call( origParams, name ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
origName = params[ name ].getOriginalName();
|
||||
template.params[ origName ] = ve.extendObject(
|
||||
{},
|
||||
|
|
82
modules/ve-mw/tests/dm/ve.dm.MWTemplateModel.test.js
Normal file
82
modules/ve-mw/tests/dm/ve.dm.MWTemplateModel.test.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*!
|
||||
* VisualEditor DataModel MWTemplateModel tests.
|
||||
*
|
||||
* @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
|
||||
* @license The MIT License (MIT); see LICENSE.txt
|
||||
*/
|
||||
|
||||
( function () {
|
||||
var transclusionData = {
|
||||
params: {
|
||||
foo: { wt: 'Foo value' },
|
||||
bar: { wt: 'Bar value' },
|
||||
empty: { wt: '' }
|
||||
},
|
||||
target: {
|
||||
href: './Template:Test',
|
||||
wt: 'Test'
|
||||
}
|
||||
};
|
||||
|
||||
QUnit.module( 've.dm.MWTemplateModel', ve.test.utils.mwEnvironment );
|
||||
|
||||
/**
|
||||
* Create a new MWTemplateModel initialized with a static transclusion data fixture.
|
||||
*
|
||||
* @return {ve.dm.MWTemplateModel}
|
||||
*/
|
||||
function newTemplateModel() {
|
||||
var doc = ve.dm.Document.static.newBlankDocument(),
|
||||
transclusion = new ve.dm.MWTransclusionModel( doc ),
|
||||
clonedTransclusionData = ve.extendObject( {}, transclusionData );
|
||||
|
||||
return ve.dm.MWTemplateModel.newFromData( transclusion, clonedTransclusionData );
|
||||
}
|
||||
|
||||
/* Tests */
|
||||
|
||||
QUnit.test( 'serialize input parameters', function ( assert ) {
|
||||
var templateModel = newTemplateModel(),
|
||||
serializedTransclusionData = templateModel.serialize();
|
||||
|
||||
assert.deepEqual( serializedTransclusionData, { template: transclusionData } );
|
||||
} );
|
||||
|
||||
QUnit.test( 'serialize changed input parameters', function ( assert ) {
|
||||
var templateModel = newTemplateModel(),
|
||||
newParameterModel = new ve.dm.MWParameterModel( templateModel, 'baz', 'Baz value' ),
|
||||
serializedTransclusionData;
|
||||
|
||||
templateModel.addParameter( newParameterModel );
|
||||
|
||||
serializedTransclusionData = templateModel.serialize();
|
||||
|
||||
assert.deepEqual( serializedTransclusionData.template.params.baz, { wt: 'Baz value' } );
|
||||
} );
|
||||
|
||||
// T75134
|
||||
QUnit.test( 'serialize after parameter was removed', function ( assert ) {
|
||||
var templateModel = newTemplateModel(),
|
||||
barParam = templateModel.getParameter( 'bar' ),
|
||||
serializedTransclusionData;
|
||||
|
||||
templateModel.removeParameter( barParam );
|
||||
|
||||
serializedTransclusionData = templateModel.serialize();
|
||||
|
||||
assert.deepEqual( serializedTransclusionData.template.params, { foo: { wt: 'Foo value' }, empty: { wt: '' } } );
|
||||
} );
|
||||
|
||||
// T101075
|
||||
QUnit.test( 'serialize without empty parameter not present in original parameter set', function ( assert ) {
|
||||
var templateModel = newTemplateModel(),
|
||||
newEmptyParam = new ve.dm.MWParameterModel( templateModel, 'new_empty', '' ),
|
||||
serializedTransclusionData;
|
||||
|
||||
templateModel.addParameter( newEmptyParam );
|
||||
|
||||
serializedTransclusionData = templateModel.serialize();
|
||||
|
||||
assert.deepEqual( serializedTransclusionData, { template: transclusionData } );
|
||||
} );
|
||||
}() );
|
Loading…
Reference in a new issue