mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-28 16:20:52 +00:00
HACK: Don't merge adjacent annotations from Parsoid
Adjacent annotations should not be merged if they both originate from Parsoid. This is a hack because this logic should be in Parsoid, not VE. Bug: 49873 Change-Id: If1e23e3039178300d72b1c0c585931417bb603b5
This commit is contained in:
parent
4c85442047
commit
f2b4998faf
|
@ -535,6 +535,77 @@ ve.dm.mwExample.references = [
|
||||||
];
|
];
|
||||||
|
|
||||||
ve.dm.mwExample.domToDataCases = {
|
ve.dm.mwExample.domToDataCases = {
|
||||||
|
'adjacent annotations': {
|
||||||
|
'html':
|
||||||
|
'<body>' +
|
||||||
|
'<b>a</b><b data-parsoid="1">b</b><b>c</b><b data-parsoid="2">d</b> ' +
|
||||||
|
'<b>a</b><b>b</b> ' +
|
||||||
|
'<b data-parsoid="3">ab</b><b data-parsoid="4">c</b>' +
|
||||||
|
'</body>',
|
||||||
|
'data': [
|
||||||
|
{ 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
|
||||||
|
[ 'a', [ ve.dm.example.bold ] ],
|
||||||
|
[
|
||||||
|
'b',
|
||||||
|
[ {
|
||||||
|
'type': 'textStyle/bold',
|
||||||
|
'htmlAttributes': [ { 'values': {
|
||||||
|
'data-parsoid': '1'
|
||||||
|
} } ]
|
||||||
|
} ]
|
||||||
|
],
|
||||||
|
[ 'c', [ ve.dm.example.bold ] ],
|
||||||
|
[
|
||||||
|
'd',
|
||||||
|
[ {
|
||||||
|
'type': 'textStyle/bold',
|
||||||
|
'htmlAttributes': [ { 'values': {
|
||||||
|
'data-parsoid': '2'
|
||||||
|
} } ]
|
||||||
|
} ]
|
||||||
|
],
|
||||||
|
' ',
|
||||||
|
[ 'a', [ ve.dm.example.bold ] ],
|
||||||
|
[ 'b', [ ve.dm.example.bold ] ],
|
||||||
|
' ',
|
||||||
|
[
|
||||||
|
'a',
|
||||||
|
[ {
|
||||||
|
'type': 'textStyle/bold',
|
||||||
|
'htmlAttributes': [ { 'values': {
|
||||||
|
'data-parsoid': '3'
|
||||||
|
} } ]
|
||||||
|
} ]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'b',
|
||||||
|
[ {
|
||||||
|
'type': 'textStyle/bold',
|
||||||
|
'htmlAttributes': [ { 'values': {
|
||||||
|
'data-parsoid': '3'
|
||||||
|
} } ]
|
||||||
|
} ]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'c',
|
||||||
|
[ {
|
||||||
|
'type': 'textStyle/bold',
|
||||||
|
'htmlAttributes': [ { 'values': {
|
||||||
|
'data-parsoid': '4'
|
||||||
|
} } ]
|
||||||
|
} ]
|
||||||
|
],
|
||||||
|
{ 'type': '/paragraph' },
|
||||||
|
{ 'type': 'internalList' },
|
||||||
|
{ 'type': '/internalList' }
|
||||||
|
],
|
||||||
|
'normalizedHtml':
|
||||||
|
'<body>' +
|
||||||
|
'<b>abcd</b> ' +
|
||||||
|
'<b>ab</b> ' +
|
||||||
|
'<b data-parsoid="3">ab</b><b data-parsoid="4">c</b>' +
|
||||||
|
'</body>'
|
||||||
|
},
|
||||||
'mw:Image': {
|
'mw:Image': {
|
||||||
'html': '<body><p>' + ve.dm.mwExample.MWInlineImageHtml + '</p></body>',
|
'html': '<body><p>' + ve.dm.mwExample.MWInlineImageHtml + '</p></body>',
|
||||||
'data': [
|
'data': [
|
||||||
|
@ -1433,7 +1504,17 @@ ve.dm.mwExample.domToDataCases = {
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'attribute preservation does not crash due to text node split': {
|
'attribute preservation does not crash due to text node split': {
|
||||||
'html': '<body><figure typeof="mw:Image/Thumb" data-parsoid="{}"><a href="Foo" data-parsoid="{}"><img src="Bar" width="1" height="2" resource="FooBar" data-parsoid="{}"></a><figcaption data-parsoid="{}"> foo <a rel="mw:WikiLink" href="./Bar" data-parsoid="{}">bar</a> baz</figcaption></figure></body>',
|
'html':
|
||||||
|
'<body>' +
|
||||||
|
'<figure typeof="mw:Image/Thumb" data-parsoid="{}">' +
|
||||||
|
'<a href="Foo" data-parsoid="{}">' +
|
||||||
|
'<img src="Bar" width="1" height="2" resource="FooBar" data-parsoid="{}">' +
|
||||||
|
'</a>' +
|
||||||
|
'<figcaption data-parsoid="{}">' +
|
||||||
|
' foo <a rel="mw:WikiLink" href="./Bar" data-parsoid="{}">bar</a> baz' +
|
||||||
|
'</figcaption>' +
|
||||||
|
'</figure>' +
|
||||||
|
'</body>',
|
||||||
'data': [
|
'data': [
|
||||||
{
|
{
|
||||||
'type': 'mwBlockImage',
|
'type': 'mwBlockImage',
|
||||||
|
|
|
@ -111,4 +111,37 @@ ve.dm.Annotation.prototype.getComparableObjectForSerialization = function () {
|
||||||
object.htmlAttributes = htmlAttributes;
|
object.htmlAttributes = htmlAttributes;
|
||||||
}
|
}
|
||||||
return object;
|
return object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HACK: Check if the annotation was generated by the converter
|
||||||
|
*
|
||||||
|
* Used by compareToForSerialization to avoid merging generated annotations.
|
||||||
|
*
|
||||||
|
* @returns {boolean} The annotation was generated
|
||||||
|
*/
|
||||||
|
ve.dm.Annotation.prototype.isGenerated = function () {
|
||||||
|
var attributes = this.getHtmlAttributes();
|
||||||
|
return attributes[0] && attributes[0].values && attributes[0].values['data-parsoid'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HACK: Compare to another annotation for serialization
|
||||||
|
*
|
||||||
|
* Compares two annotations using getComparableObjectForSerialization, unless
|
||||||
|
* they are both generated annotations, in which case they must be identical.
|
||||||
|
*
|
||||||
|
* @param {ve.dm.Annotation} annotation Annotation to compare to
|
||||||
|
* @returns {boolean} The other annotation is similar to this one
|
||||||
|
*/
|
||||||
|
ve.dm.Annotation.prototype.compareToForSerialization = function ( annotation ) {
|
||||||
|
// If both annotations were generated
|
||||||
|
if ( this.isGenerated() && annotation.isGenerated() ) {
|
||||||
|
return ve.compare( this, annotation );
|
||||||
|
}
|
||||||
|
|
||||||
|
return ve.compare(
|
||||||
|
this.getComparableObjectForSerialization(),
|
||||||
|
annotation.getComparableObjectForSerialization()
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
|
@ -268,10 +268,7 @@ ve.dm.AnnotationSet.prototype.containsComparable = function ( annotation ) {
|
||||||
*/
|
*/
|
||||||
ve.dm.AnnotationSet.prototype.containsComparableForSerialization = function ( annotation ) {
|
ve.dm.AnnotationSet.prototype.containsComparableForSerialization = function ( annotation ) {
|
||||||
return this.filter( function ( a ) {
|
return this.filter( function ( a ) {
|
||||||
return ve.compare(
|
return annotation.compareToForSerialization( a );
|
||||||
annotation.getComparableObjectForSerialization(),
|
|
||||||
a.getComparableObjectForSerialization()
|
|
||||||
);
|
|
||||||
}, true );
|
}, true );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue