Subramanya Sastry has uploaded a new change for review.

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


Change subject: Dont wrap IEW with spans when they are in fosterable posns in 
tables
......................................................................

Dont wrap IEW with spans when they are in fosterable posns in tables

* On the following wikitext snippet, Parsoid was adding span wrappers
  around IEW emitted by the {{WDL}} tpl. These would then get fostered
  out and introduce dirty diffs by emitting <span></span> on RTing.
----
{|
|5th {{WDL|7|2|2|3}} || 5 || 7 || 6
|}
----

* This patch makes fixes by not span-wrapping IEW in fosterable posns
  in tables.

* Also fixed getAboutSiblings to continue collecting siblings across
  IEW gaps when in fosterable position.

* Fixes parsing of above snippet.

* No change in parser test results (TODO: need to come up with a good
  test case for this to prevent regressions).

Change-Id: Idaf069866510f63921334c272982ec6e38297bea
---
M js/lib/mediawiki.DOMPostProcessor.js
M js/lib/mediawiki.DOMUtils.js
M js/lib/mediawiki.WikitextSerializer.js
3 files changed, 34 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/63/71563/1

diff --git a/js/lib/mediawiki.DOMPostProcessor.js 
b/js/lib/mediawiki.DOMPostProcessor.js
index a783f86..8245de5 100644
--- a/js/lib/mediawiki.DOMPostProcessor.js
+++ b/js/lib/mediawiki.DOMPostProcessor.js
@@ -1329,13 +1329,16 @@
                        var next = n.nextSibling;
 
                        if ( n.nodeType === Node.TEXT_NODE || n.nodeType === 
Node.COMMENT_NODE ) {
-                               span = doc.createElement( 'span' );
-                               span.setAttribute( 'about', about );
-                               // attach the new span to the DOM
-                               n.parentNode.insertBefore( span, n );
-                               // move the text node into the span
-                               span.appendChild( n );
-                               n = span;
+                               // Dont add span-wrappers for IEW in fosterable 
positions
+                               if (!DU.isFosterablePosition(n) || 
!DU.isIEW(n)) {
+                                       span = doc.createElement( 'span' );
+                                       span.setAttribute( 'about', about );
+                                       // attach the new span to the DOM
+                                       n.parentNode.insertBefore( span, n );
+                                       // move the text node into the span
+                                       span.appendChild( n );
+                                       n = span;
+                               }
                        } else if (n.nodeType === Node.ELEMENT_NODE) {
                                n.setAttribute( 'about', about );
                        }
diff --git a/js/lib/mediawiki.DOMUtils.js b/js/lib/mediawiki.DOMUtils.js
index 512d4a2..21a5b27 100644
--- a/js/lib/mediawiki.DOMUtils.js
+++ b/js/lib/mediawiki.DOMUtils.js
@@ -672,6 +672,22 @@
                }
        },
 
+       getAboutSiblings: function(node, about) {
+               var nodes = [node];
+
+               node = node.nextSibling;
+               while (node && (
+                               this.isElt(node) && node.getAttribute('about') 
=== about ||
+                               this.isFosterablePosition(node) && 
!this.isElt(node) && this.isIEW(node)
+                       ))
+               {
+                       nodes.push(node);
+                       node = node.nextSibling;
+               }
+
+               return nodes;
+       },
+
        /**
         * Extract transclusion and extension expansions from a DOM, and return
         * them in a structure like this:
@@ -697,6 +713,8 @@
         * }
         */
        extractExpansions: function (doc) {
+               var DU = this;
+
                var node = doc.body,
                        expansion,
                        expansions = {
@@ -705,17 +723,6 @@
                                files: {}
                        };
 
-               function getAboutSiblings(node, about) {
-                       var nodes = [node];
-                       node = node.nextSibling;
-                       while (node && node.nodeType === node.ELEMENT_NODE &&
-                                       node.getAttribute('about') === about)
-                       {
-                               nodes.push(node);
-                               node = node.nextSibling;
-                       }
-                       return nodes;
-               }
 
                function doExtractExpansions (node) {
                        var nodes, expAccum,
@@ -731,8 +738,8 @@
                                                                .test(typeOf) 
&& about) ||
                                                        
/\b(?:mw:Image(?:\b|\/))/.test(typeOf))
                                        {
-                                               DOMUtils.loadDataParsoid(node);
-                                               nodes = getAboutSiblings(node, 
about);
+                                               DU.loadDataParsoid(node);
+                                               nodes = 
DU.getAboutSiblings(node, about);
                                                var key;
                                                if 
(/\bmw:Transclusion\b/.test(typeOf)) {
                                                        expAccum = 
expansions.transclusions;
@@ -817,6 +824,7 @@
         * mainly for transclusion and extension processing.
         */
        getWrapperTokens: function ( nodes ) {
+               var DU = this;
                function makeWrapperForNode ( node ) {
                        var workNode;
                        if (node.nodeType === node.ELEMENT_NODE && 
node.childNodes.length) {
@@ -837,7 +845,7 @@
                        }
                        var res = [];
                        // Now convert our node to tokens
-                       DOMUtils.convertDOMtoTokens(res, workNode);
+                       DU.convertDOMtoTokens(res, workNode);
                        return res;
                }
 
@@ -846,7 +854,7 @@
                // broken things up already when building the DOM for the first 
time.
                //var hasBlockElement = false;
                //for (var i = 0; i < nodes.length; i++) {
-               //      if (DOMUtils.hasBlockElementDescendant(nodes[i])) {
+               //      if (DU.hasBlockElementDescendant(nodes[i])) {
                //              hasBlockElement = true;
                //              break;
                //      }
diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index 679cc31..95f6d8d 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -2890,12 +2890,7 @@
                return node;
        }
 
-       node = node.nextSibling;
-       while (node && DU.isElt(node) && about === node.getAttribute('about')) {
-               node = node.nextSibling;
-       }
-
-       return node;
+       return DU.getAboutSiblings(node, about).last().nextSibling;
 };
 
 /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idaf069866510f63921334c272982ec6e38297bea
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>

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

Reply via email to