Arlolra has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/399766 )

Change subject: Account for SOL transparent templates in p-wrapping
......................................................................

Account for SOL transparent templates in p-wrapping

Fixes the gratuitous template wrapping on,
/en.wikipedia.org/v3/page/html/Wikimedia_Foundation/803552163

Bug: T182349
Change-Id: I5093a3af83db2352309c2a39e95412c441cf68aa
---
M lib/wt2html/tt/ParagraphWrapper.js
M tests/parserTests-blacklist.js
M tests/parserTests.txt
3 files changed, 33 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/66/399766/1

diff --git a/lib/wt2html/tt/ParagraphWrapper.js 
b/lib/wt2html/tt/ParagraphWrapper.js
index af24c3b..f1badfc 100644
--- a/lib/wt2html/tt/ParagraphWrapper.js
+++ b/lib/wt2html/tt/ParagraphWrapper.js
@@ -215,6 +215,7 @@
 ParagraphWrapper.prototype.openPTag = function(out) {
        if (!this.hasOpenPTag) {
                var i = 0;
+               var enteredTransclusion = -1;
                // Be careful not to expand template ranges unnecessarily.
                // Look for open markers before starting a p-tag.
                for (; i < out.length; i++) {
@@ -222,18 +223,20 @@
                        if (t.name === "meta") {
                                var typeOf = t.getAttribute("typeof");
                                if (/^mw:Transclusion$/.test(typeOf)) {
+                                       enteredTransclusion = i;
                                        // We hit a start tag and everything 
before it is sol-transparent.
-                                       break;
+                                       continue;
                                } else if (/^mw:Transclusion/.test(typeOf)) {
                                        // End tag. All tokens before this are 
sol-transparent.
                                        // Let leave them all out of the 
p-wrapping.
-                                       i += 1;
-                                       break;
+                                       enteredTransclusion = -1;
+                                       continue;
                                }
                        }
                        // Not a transclusion meta; Check for 
nl/sol-transparent tokens
                        // and leave them out of the p-wrapping.
                        if (!Util.isSolTransparent(this.env, t) && 
t.constructor !== NlTk) {
+                               if (enteredTransclusion > -1) { i = 
enteredTransclusion; }
                                break;
                        }
                }
@@ -245,6 +248,7 @@
 ParagraphWrapper.prototype.closeOpenPTag = function(out) {
        if (this.hasOpenPTag) {
                var i = out.length - 1;
+               var enteredTransclusion = -1;
                // Be careful not to expand template ranges unnecessarily.
                // Look for open markers before closing.
                for (; i > -1; i--) {
@@ -254,18 +258,20 @@
                                if (/^mw:Transclusion$/.test(typeOf)) {
                                        // We hit a start tag and everything 
after it is sol-transparent.
                                        // Don't include the sol-transparent 
tags OR the start tag.
-                                       i -= 1;
-                                       break;
+                                       enteredTransclusion = -1;
+                                       continue;
                                } else if (/^mw:Transclusion/.test(typeOf)) {
                                        // End tag. We're done.
                                        // The rest of the tags past this are 
sol-transparent.
                                        // Let us leave them all out of the 
p-wrapping.
-                                       break;
+                                       enteredTransclusion = i;
+                                       continue;
                                }
                        }
                        // Not a transclusion meta; Check for 
nl/sol-transparent tokens
                        // and leave them out of the p-wrapping.
                        if (!Util.isSolTransparent(this.env, t) && 
t.constructor !== NlTk) {
+                               if (enteredTransclusion > -1) { i = 
enteredTransclusion; }
                                break;
                        }
                }
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index cc7c8a0..6699748 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -123,7 +123,7 @@
 add("wt2html", "Templates: Lists: Multi-line list-items via templates", "<ul 
data-parsoid='{\"dsr\":[0,71,0,0]}'><li 
data-parsoid='{\"dsr\":[0,35,1,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[1,35,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"a
 {{nonexistent|\\nunused}}\"}},\"i\":0}}]}'>a 
{{nonexistent|\nunused}}</span></li>\n<li 
data-parsoid='{\"dsr\":[36,71,1,0]}'><span about=\"#mwt3\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[37,71,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"b
 {{nonexistent|\\nunused}}\"}},\"i\":0}}]}'>b 
{{nonexistent|\nunused}}</span></li></ul>");
 add("wt2html", "Templates: Ugly nesting: 1. Quotes opened/closed across 
templates (echo)", "<p data-parsoid='{\"dsr\":[0,40,0,0]}'><i about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,40,null,null],\"pi\":[[{\"k\":\"1\"}],[{\"k\":\"1\"}],[{\"k\":\"1\"}]]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&apos;&apos;a\"}},\"i\":0}},{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"b&apos;&apos;c&apos;&apos;d\"}},\"i\":1}},{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&apos;&apos;e\"}},\"i\":2}}]}'>ab</i><span
 about=\"#mwt1\">c</span><i about=\"#mwt1\">d</i><span 
about=\"#mwt1\">e</span></p>");
 add("wt2html", "Templates: Ugly templates: 1. Navbox template parses badly 
leading to table misnesting\n(Parsoid-centric)", "<table about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[0,32,2,null],\"firstWikitextNode\":\"TABLE_html\",\"pi\":[[{\"k\":\"1\"}]]}'
 
data-mw='{\"parts\":[\"{|\\n|\",{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"foo&lt;/table>\"}},\"i\":0}},\"\\n|bar\\n|}\"]}'>\n<tbody><tr><td>foo</td></tr></tbody></table><span
 about=\"#mwt1\">\n|bar\n</span>");
-add("wt2html", "Templates: Ugly templates: 4. newline-only template parameter 
inconsistency", "<p about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,10,0,0],\"pi\":[[{\"k\":\"1\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"\\n\"}},\"i\":0}}]}'>\n</p>");
+add("wt2html", "Templates: Ugly templates: 4. newline-only template parameter 
inconsistency", "<span about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[0,10,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"\\n\"}},\"i\":0}}]}'>\n</span>");
 add("wt2html", "subst: does not work during normal parse", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,13,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SubstTest\",\"href\":\"./Template:SubstTest\"},\"params\":{},\"i\":0}}]}'>{{&lt;includeonly>subst:&lt;/includeonly>Includes}}</p>");
 add("wt2html", "message transform: magic variables", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,12,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SITENAME\",\"function\":\"sitename\"},\"params\":{},\"i\":0}}]}'>MediaWiki</p>");
 add("wt2html", "message transform: should not transform wiki markup", "<p 
data-parsoid='{\"dsr\":[0,8,0,0]}'><i 
data-parsoid='{\"dsr\":[0,8,2,2]}'>test</i></p>");
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 0e234de..af9e50a 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -1888,6 +1888,7 @@
 ###
 ### paragraph wrapping tests
 ###
+
 !! test
 No block tags
 !! wikitext
@@ -2128,9 +2129,26 @@
 <link rel="mw:PageProp/Category" href="./Category:A1"/><p>a</p>
 !! end
 
+!! test
+No paragraph necessary for SOL transparent template
+!! wikitext
+<span><div>foo</div></span>
+[[Category:Foo]]
+
+<span><div>foo</div></span>
+{{echo|[[Category:Foo]]}}
+!! html/parsoid
+<span data-parsoid='{"stx":"html"}'><div 
data-parsoid='{"stx":"html"}'>foo</div></span>
+<link rel="mw:PageProp/Category" href="./Category:Foo"/>
+
+<span data-parsoid='{"stx":"html"}'><div 
data-parsoid='{"stx":"html"}'>foo</div></span>
+<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" 
typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]"}},"i":0}}]}'/>
+!! end
+
 ###
 ### Preformatted text
 ###
+
 !! test
 Preformatted text
 !! wikitext
@@ -16177,7 +16195,8 @@
 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
 <p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
-<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> Bar <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz" typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/></p>
+<p>Foo <link rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> Bar</p>
+<link rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz"/> <link 
rel="mw:PageProp/Category" href="./Category:Baz" typeof="mw:Transclusion" 
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Baz]]"}},"i":0}}]}'/>
 <link rel="mw:PageProp/Category" href="./Category:Baz"/>
 !! end
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5093a3af83db2352309c2a39e95412c441cf68aa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>

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

Reply via email to