jenkins-bot has submitted this change and it was merged.

Change subject: Strip RESTBase IDs from HTML generated when wikitext is pasted
......................................................................


Strip RESTBase IDs from HTML generated when wikitext is pasted

Bug: T146054
Change-Id: I0013673a9e41ea191ea64f3208a06288efb2ecd3
---
M 
modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js
M modules/ve-mw/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.js
2 files changed, 32 insertions(+), 17 deletions(-)

Approvals:
  Jforrester: Looks good to me, approved
  jenkins-bot: Verified



diff --git 
a/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js
 
b/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js
index 726c0b2..9de0ef1 100644
--- 
a/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js
+++ 
b/modules/ve-mw/tests/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.test.js
@@ -9,16 +9,18 @@
        setup: function () {
                // Mock XHR for mw.Api()
                this.server = MWWIKITEXT_MOCK_API ? 
this.sandbox.useFakeServer() : null;
-       }
+               ve.test.utils.mwEnvironment.setup.call( this );
+       },
+       teardown: ve.test.utils.mwEnvironment.teardown
 } ) );
 
 /* Tests */
 
-function runWikitextStringHandlerTest( assert, server, string, mimeType, 
expectedResponse, expectedData, annotations, msg ) {
+function runWikitextStringHandlerTest( assert, server, string, mimeType, 
expectedResponse, expectedData, annotations, assertDom, msg ) {
        var handler, i, j, name,
                done = assert.async(),
                item = ve.ui.DataTransferItem.static.newFromString( string, 
mimeType ),
-               doc = ve.dm.example.createExampleDocument(),
+               doc = new ve.dm.Document( [] ),
                mockSurface = {
                        getModel: function () {
                                return {
@@ -53,7 +55,11 @@
        handler.getInsertableData().done( function ( doc2 ) {
                var actualData = doc2.getData();
                ve.dm.example.postprocessAnnotations( actualData, 
doc2.getStore() );
-               assert.equalLinearData( actualData, expectedData, msg + ': data 
match' );
+               if ( assertDom ) {
+                       assert.equalLinearDataWithDom( doc2.getStore(), 
actualData, expectedData, msg + ': data match (with DOM)' );
+               } else {
+                       assert.equalLinearData( actualData, expectedData, msg + 
': data match' );
+               }
                done();
        } );
 
@@ -144,21 +150,19 @@
                                ]
                        },
                        {
-                               msg: 'Heading',
+                               msg: 'Headings, only RESTBase IDs stripped',
                                pasteString: '==heading==',
                                pasteType: 'text/plain',
-                               parsoidResponse: '<h2>heading</h2>',
+                               parsoidResponse: '<h2 id="mwAB">foo</h2><h2 
id="mw-meaningful-id">bar</h2>',
                                annotations: [],
+                               assertDom: true,
                                expectedData: [
-                                       { type: 'heading', attributes: { level: 
2 } },
-                                       'h',
-                                       'e',
-                                       'a',
-                                       'd',
-                                       'i',
-                                       'n',
-                                       'g',
-                                       { type: '/heading' },
+                                       { type: 'mwHeading', attributes: { 
level: 2 }, originalDomElements: $( '<h2>foo</h2>' ).toArray() },
+                                       'f', 'o', 'o',
+                                       { type: '/mwHeading' },
+                                       { type: 'mwHeading', attributes: { 
level: 2 }, originalDomElements: $( '<h2 id="mw-meaningful-id">bar</h2>' 
).toArray() },
+                                       'b', 'a', 'r',
+                                       { type: '/mwHeading' },
                                        { type: 'internalList' },
                                        { type: '/internalList' }
                                ]
@@ -296,6 +300,9 @@
 
        QUnit.expect( cases.length * 2 );
        for ( i = 0; i < cases.length; i++ ) {
-               runWikitextStringHandlerTest( assert, this.server, cases[ i 
].pasteString, cases[ i ].pasteType, cases[ i ].parsoidResponse, cases[ i 
].expectedData, cases[ i ].annotations, cases[ i ].msg );
+               runWikitextStringHandlerTest(
+                       assert, this.server, cases[ i ].pasteString, cases[ i 
].pasteType, cases[ i ].parsoidResponse,
+                       cases[ i ].expectedData, cases[ i ].annotations, cases[ 
i ].assertDom, cases[ i ].msg
+               );
        }
 } );
diff --git 
a/modules/ve-mw/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.js
 
b/modules/ve-mw/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.js
index 1138852..74e8dc0 100644
--- 
a/modules/ve-mw/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.js
+++ 
b/modules/ve-mw/ui/datatransferhandlers/ve.ui.MWWikitextStringTransferHandler.js
@@ -96,7 +96,7 @@
 
        // Don't immediately chain, as this.parsoidRequest must be abortable
        this.parsoidRequest.then( function ( response ) {
-               var htmlDoc, doc, surface;
+               var htmlDoc, doc, surface, elementsWithIds, len;
 
                if ( ve.getProp( response, 'visualeditor', 'result' ) !== 
'success' ) {
                        return failure();
@@ -104,6 +104,14 @@
 
                htmlDoc = ve.createDocumentFromHtml( 
response.visualeditor.content );
 
+               // Strip RESTBase IDs
+               elementsWithIds = htmlDoc.querySelectorAll( '[id]' );
+               for ( i = 0, len = elementsWithIds.length; i < len; i++ ) {
+                       if ( elementsWithIds[ i ].getAttribute( 'id' ).match( 
ve.init.platform.getMetadataIdRegExp() ) ) {
+                               elementsWithIds[ i ].removeAttribute( 'id' );
+                       }
+               }
+
                // Pass an empty object for the second argument (importRules) 
so that clipboard mode is used
                // TODO: Fix that API
                doc = handler.surface.getModel().getDocument().newFromHtml( 
htmlDoc, {} );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I0013673a9e41ea191ea64f3208a06288efb2ecd3
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <a...@wikimedia.org>
Gerrit-Reviewer: Alex Monk <a...@wikimedia.org>
Gerrit-Reviewer: Divec <da...@troi.org>
Gerrit-Reviewer: Esanders <esand...@wikimedia.org>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to