Merge "Link pasting: Match RDFa-less links as external"

This commit is contained in:
jenkins-bot 2016-03-17 17:45:52 +00:00 committed by Gerrit Code Review
commit d5ef085b3e
4 changed files with 72 additions and 10 deletions

View file

@ -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 */

View file

@ -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 ) {

View file

@ -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>'
}
};

View file

@ -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,