Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/278011

Change subject: Link pasting: Match RDFa-less links as external
......................................................................

Link pasting: Match RDFa-less links as external

Now that some targets support link pasting (Flow) we need to
make sure that pasted links match to an allowed type ('link/mwExternal')
instead of plain 'link' annotations which should never exist
in an MW document.

In a later commit we should auto-detect internal links.

Change-Id: I7faae834aa6e730c3cf93a691331a05fd0fe3d5c
---
M modules/ve-mw/dm/annotations/ve.dm.MWExternalLinkAnnotation.js
M modules/ve-mw/dm/nodes/ve.dm.MWNumberedExternalLinkNode.js
M modules/ve-mw/tests/ve.test.utils.js
3 files changed, 20 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/11/278011/1

diff --git a/modules/ve-mw/dm/annotations/ve.dm.MWExternalLinkAnnotation.js 
b/modules/ve-mw/dm/annotations/ve.dm.MWExternalLinkAnnotation.js
index 055594c..5ab1301 100644
--- a/modules/ve-mw/dm/annotations/ve.dm.MWExternalLinkAnnotation.js
+++ b/modules/ve-mw/dm/annotations/ve.dm.MWExternalLinkAnnotation.js
@@ -33,18 +33,26 @@
 
 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 */
diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWNumberedExternalLinkNode.js 
b/modules/ve-mw/dm/nodes/ve.dm.MWNumberedExternalLinkNode.js
index 7f37dc1..9011b9a 100644
--- a/modules/ve-mw/dm/nodes/ve.dm.MWNumberedExternalLinkNode.js
+++ b/modules/ve-mw/dm/nodes/ve.dm.MWNumberedExternalLinkNode.js
@@ -41,9 +41,9 @@
 
 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 
) {
diff --git a/modules/ve-mw/tests/ve.test.utils.js 
b/modules/ve-mw/tests/ve.test.utils.js
index ec19af3..ce6859b 100644
--- a/modules/ve-mw/tests/ve.test.utils.js
+++ b/modules/ve-mw/tests/ve.test.utils.js
@@ -30,6 +30,7 @@
 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 @@
        var overrides = [
                        ve.dm.MWHeadingNode,
                        ve.dm.MWPreformattedNode,
-                       ve.dm.MWTableNode
+                       ve.dm.MWTableNode,
+                       ve.dm.MWExternalLinkAnnotation
                ],
                overridden = [
                        ve.dm.InlineImageNode,

-- 
To view, visit https://gerrit.wikimedia.org/r/278011
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7faae834aa6e730c3cf93a691331a05fd0fe3d5c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to