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