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\":\"''a\"}},\"i\":0}},{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"b''c''d\"}},\"i\":1}},{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"''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</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}}]}'>{{<includeonly>subst:</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