mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-25 11:16:51 +00:00
Merge "Link pasting: Match RDFa-less links as external"
This commit is contained in:
commit
d5ef085b3e
|
@ -33,18 +33,26 @@ OO.inheritClass( ve.dm.MWExternalLinkAnnotation, ve.dm.LinkAnnotation );
|
|||
|
||||
ve.dm.MWExternalLinkAnnotation.static.name = 'link/mwExternal';
|
||||
|
||||
ve.dm.MWExternalLinkAnnotation.static.matchRdfaTypes = [ 'mw:ExtLink' ];
|
||||
ve.dm.MWExternalLinkAnnotation.static.matchFunction = function ( domElement ) {
|
||||
var rel = domElement.getAttribute( 'rel' );
|
||||
// Match explicity mw:ExtLink, or plain RDFa-less links (e.g. from external paste)
|
||||
return !rel || rel === 'mw:ExtLink';
|
||||
};
|
||||
|
||||
ve.dm.MWExternalLinkAnnotation.static.toDataElement = function ( domElements ) {
|
||||
var parentResult = ve.dm.LinkAnnotation.static.toDataElement.apply( this, arguments );
|
||||
parentResult.attributes.rel = domElements[ 0 ].getAttribute( 'rel' );
|
||||
return parentResult;
|
||||
// Parent method
|
||||
var dataElement = ve.dm.MWExternalLinkAnnotation.super.static.toDataElement.apply( this, arguments );
|
||||
|
||||
dataElement.attributes.rel = domElements[ 0 ].getAttribute( 'rel' );
|
||||
return dataElement;
|
||||
};
|
||||
|
||||
ve.dm.MWExternalLinkAnnotation.static.toDomElements = function ( dataElement ) {
|
||||
var parentResult = ve.dm.LinkAnnotation.static.toDomElements.apply( this, arguments );
|
||||
parentResult[ 0 ].setAttribute( 'rel', dataElement.attributes.rel || 'mw:ExtLink' );
|
||||
return parentResult;
|
||||
// Parent method
|
||||
var domElements = ve.dm.MWExternalLinkAnnotation.super.static.toDomElements.apply( this, arguments );
|
||||
|
||||
domElements[ 0 ].setAttribute( 'rel', dataElement.attributes.rel || 'mw:ExtLink' );
|
||||
return domElements;
|
||||
};
|
||||
|
||||
/* Methods */
|
||||
|
|
|
@ -41,9 +41,9 @@ ve.dm.MWNumberedExternalLinkNode.static.matchRdfaTypes = [ 'mw:ExtLink' ];
|
|||
|
||||
ve.dm.MWNumberedExternalLinkNode.static.blacklistedAnnotationTypes = [ 'link' ];
|
||||
|
||||
ve.dm.MWNumberedExternalLinkNode.static.matchFunction = function ( element ) {
|
||||
ve.dm.MWNumberedExternalLinkNode.static.matchFunction = function ( domElement ) {
|
||||
// Must be empty
|
||||
return element.childNodes.length === 0;
|
||||
return domElement.childNodes.length === 0;
|
||||
};
|
||||
|
||||
ve.dm.MWNumberedExternalLinkNode.static.toDataElement = function ( domElements ) {
|
||||
|
|
|
@ -1515,5 +1515,57 @@ ve.dm.mwExample.domToDataCases = {
|
|||
doc.metadata.data[ 1 ].splice( 0, 1 );
|
||||
},
|
||||
normalizedBody: '<h1></h1>'
|
||||
},
|
||||
'Plain links (e.g. on paste) are converted to link/mwExternal': {
|
||||
body: 'Foo<a href="Bar">bar</a>',
|
||||
data: [
|
||||
{
|
||||
type: 'paragraph',
|
||||
internal: {
|
||||
generated: 'wrapper'
|
||||
}
|
||||
},
|
||||
'F', 'o', 'o',
|
||||
[
|
||||
'b',
|
||||
[ {
|
||||
type: 'link/mwExternal',
|
||||
attributes: {
|
||||
href: 'Bar',
|
||||
rel: null
|
||||
}
|
||||
} ]
|
||||
],
|
||||
[
|
||||
'a',
|
||||
[ {
|
||||
type: 'link/mwExternal',
|
||||
attributes: {
|
||||
href: 'Bar',
|
||||
rel: null
|
||||
}
|
||||
} ]
|
||||
],
|
||||
[
|
||||
'r',
|
||||
[ {
|
||||
type: 'link/mwExternal',
|
||||
attributes: {
|
||||
href: 'Bar',
|
||||
rel: null
|
||||
}
|
||||
} ]
|
||||
],
|
||||
{
|
||||
type: '/paragraph'
|
||||
},
|
||||
{
|
||||
type: 'internalList'
|
||||
},
|
||||
{
|
||||
type: '/internalList'
|
||||
}
|
||||
],
|
||||
normalizedBody: 'Foo<a href="Bar" rel="mw:ExtLink">bar</a>'
|
||||
}
|
||||
};
|
||||
|
|
|
@ -30,6 +30,7 @@ ve.test.utils.createSurfaceFromDocument = function ( doc ) {
|
|||
ve.dm.modelRegistry.unregister( ve.dm.MWHeadingNode );
|
||||
ve.dm.modelRegistry.unregister( ve.dm.MWPreformattedNode );
|
||||
ve.dm.modelRegistry.unregister( ve.dm.MWTableNode );
|
||||
ve.dm.modelRegistry.unregister( ve.dm.MWExternalLinkAnnotation );
|
||||
// Re-register unregistered nodes.
|
||||
ve.dm.modelRegistry.register( ve.dm.InlineImageNode );
|
||||
ve.dm.modelRegistry.register( ve.dm.BlockImageNode );
|
||||
|
@ -38,7 +39,8 @@ ve.test.utils.mwEnvironment = ( function () {
|
|||
var overrides = [
|
||||
ve.dm.MWHeadingNode,
|
||||
ve.dm.MWPreformattedNode,
|
||||
ve.dm.MWTableNode
|
||||
ve.dm.MWTableNode,
|
||||
ve.dm.MWExternalLinkAnnotation
|
||||
],
|
||||
overridden = [
|
||||
ve.dm.InlineImageNode,
|
||||
|
|
Loading…
Reference in a new issue