Subramanya Sastry has uploaded a new change for review.

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

Change subject: WIP: Bug 62716: Fix buggy 'isConvertibleToString'
......................................................................

WIP: Bug 62716: Fix buggy 'isConvertibleToString'

* To be completed.

Change-Id: I590b8675ea82c1d2b305dee750a4c378febfec07
---
M lib/ext.core.TemplateHandler.js
M tests/parserTests-blacklist.js
2 files changed, 20 insertions(+), 22 deletions(-)


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

diff --git a/lib/ext.core.TemplateHandler.js b/lib/ext.core.TemplateHandler.js
index b7be757..c3e0589 100644
--- a/lib/ext.core.TemplateHandler.js
+++ b/lib/ext.core.TemplateHandler.js
@@ -254,28 +254,24 @@
 
 TemplateHandler.prototype.resolveTemplateTarget = function ( state, targetToks 
) {
 
-       function isConvertibleToString( tokens ) {
+       function resolvabilityInfo( tokens ) {
                var maybeTarget = Util.tokensToString( tokens, true );
                if ( Array.isArray(maybeTarget) ) {
+                       var allString = true;
                        for ( var i = 0, l = maybeTarget[1].length; i < l; i++ 
) {
                                var ntt = maybeTarget[1][0];
-                               var nonTextTokenCons = ntt.constructor;
-                               if ( nonTextTokenCons === TagTk ||
-                                               nonTextTokenCons === 
SelfclosingTagTk ||
-                                               nonTextTokenCons === EndTagTk )
-                               {
-                                       if (ntt.name !== 'meta' ||
-                                                       
!ntt.getAttribute("typeof") ||
-                                                       
!ntt.getAttribute("typeof").match(/mw:/))
-                                       {
-                                               return false;
+                               // We are okay with {{..}} and {{{..}}} in 
template targets.
+                               if (ntt.constructor === SelfclosingTagTk) {
+                                       allString = false;
+                                       if (ntt.name !== 'template' && ntt.name 
!== 'templatearg') {
+                                               return { isStr: false };
                                        }
                                }
                        }
 
-                       return true;
+                       return { isStr: true, simple: allString }
                } else {
-                       return true;
+                       return { isStr: true, simple: true }
                }
        }
 
@@ -313,7 +309,8 @@
 
        // We are dealing with a real template, not a parser function.
        // Apply more stringent standards for template targets.
-       if (isConvertibleToString(targetToks)) {
+       var tgtInfo = resolvabilityInfo(targetToks);
+       if (tgtInfo.isStr) {
                // We can use the stringified target tokens
                var namespaceId = 
env.conf.wiki.namespaceIds[lowerPrefix.replace(' ', '_')];
 
@@ -331,7 +328,9 @@
                target = env.resolveTitle(target, namespaceId);
 
                // data-mw.target.href should be a url
-               state.resolvedTemplateTarget = 
Util.sanitizeTitleURI(env.page.relativeLinkPrefix + target);
+               if (tgtInfo.simple) {
+                       state.resolvedTemplateTarget = 
Util.sanitizeTitleURI(env.page.relativeLinkPrefix + target);
+               }
 
                return { isPF: false, target: target };
        } else {
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index 639f9c5..82eadf3 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -135,8 +135,9 @@
 add("wt2html", "Namespace (lang=de) Benutzer Diskussion {{ns:3}}", "<p 
data-parsoid='{\"dsr\":[0,8,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ns:3\",\"function\":\"ns\"},\"params\":{},\"i\":0}}]}'
 
data-parsoid='{\"src\":\"{{ns:3}}\",\"dsr\":[0,8,null,null],\"pi\":[[]]}'>3</span></p>");
 add("wt2html", "Urlencode", "<p data-parsoid='{\"dsr\":[0,115,0,0]}'><span 
typeof=\"mw:Transclusion\" about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"urlencode:hi 
world?!\",\"function\":\"urlencode\"},\"params\":{},\"i\":0}}]}' 
data-parsoid='{\"src\":\"{{urlencode:hi 
world?!}}\",\"dsr\":[0,24,null,null],\"pi\":[[]]}'>hi%20world%3F!</span>\n<span 
typeof=\"mw:Transclusion\" about=\"#mwt2\" id=\"mwt2\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"urlencode:hi 
world?!\",\"function\":\"urlencode\"},\"params\":{\"1\":{\"wt\":\"WIKI\"}},\"i\":0}}]}'
 
data-parsoid='{\"dsr\":[25,54,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>hi%20world%3F!</span>\n<span
 typeof=\"mw:Transclusion\" about=\"#mwt3\" id=\"mwt3\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"urlencode:hi 
world?!\",\"function\":\"urlencode\"},\"params\":{\"1\":{\"wt\":\"PATH\"}},\"i\":0}}]}'
 
data-parsoid='{\"dsr\":[55,84,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>hi%20world%3F!</span>\n<span
 typeof=\"mw:Transclusion\" about=\"#mwt4\" id=\"mwt4\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"urlencode:hi 
world?!\",\"function\":\"urlencode\"},\"params\":{\"1\":{\"wt\":\"QUERY\"}},\"i\":0}}]}'
 
data-parsoid='{\"dsr\":[85,115,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>hi%20world%3F!</span></p>");
 add("wt2html", "Nonexistent template", "<p 
data-parsoid='{\"dsr\":[0,28,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{thistemplatedoesnotexist}}\",\"dsr\":[0,28,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:Thistemplatedoesnotexist</span></p>");
-add("wt2html", "Template with invalid target containing tags", "<p 
data-parsoid='{\"dsr\":[0,54,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"a&lt;b>b&lt;/b>\"},\"params\":{\"1\":{\"wt\":\"{{echo|foo}}\"},\"{{echo|a}}\":{\"wt\":\"{{echo|b}}\"},\"a\":{\"wt\":\"b\"}},\"i\":0}}]}'
 
data-parsoid='{\"src\":\"{{a&lt;b>b&lt;/b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a 
= 
b}}\",\"dsr\":[0,54,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"{{echo|a}}\",\"named\":true,\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"a\",\"named\":true}]]}'>{{a</span><b
 about=\"#mwt1\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[3,11,3,4]}'>b</b><span about=\"#mwt1\" 
data-parsoid=\"{}\">|foo|a=b|a =b}}</span></p>");
-add("wt2html", "Template with invalid target containing unclosed tag", "<p 
data-parsoid='{\"dsr\":[0,49,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"a&lt;b>\"},\"params\":{\"1\":{\"wt\":\"{{echo|foo}}\"},\"{{echo|a}}\":{\"wt\":\"{{echo|b}}\"},\"a\":{\"wt\":\"b\"}},\"i\":0}}]}'
 data-parsoid='{\"src\":\"{{a&lt;b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = 
b}}\",\"dsr\":[0,49,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"{{echo|a}}\",\"named\":true,\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"a\",\"named\":true}]]}'>{{a</span><b
 about=\"#mwt1\" 
data-parsoid='{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[3,49,3,0]}'>|foo|a=b|a
 =b}}</b></p>");
+add("wt2html", "Template with invalid target containing tags", "<p 
data-parsoid='{\"dsr\":[0,54,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{a&lt;b>b&lt;/b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a 
= b}}\",\"dsr\":[0,54,null,null]}'>Warning: Page/template fetching disabled, 
and no cache for Template:Ab</span></p>");
+add("wt2html", "Template with invalid target containing unclosed tag", "<p 
data-parsoid='{\"dsr\":[0,49,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{a&lt;b>|{{echo|foo}}|{{echo|a}}={{echo|b}}|a = 
b}}\",\"dsr\":[0,49,null,null]}'>Warning: Page/template fetching disabled, and 
no cache for Template:A</span></p>");
+add("wt2html", "Template with invalid target containing wikilink", "<p 
data-parsoid='{\"dsr\":[0,17,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{[[Main 
Page]]}}\",\"dsr\":[0,17,null,null]}'>Warning: Page/template fetching disabled, 
and no cache for Template:Main_Page</span></p>");
 add("wt2html", "Template redirect", "<link rel=\"mw:PageProp/redirect\" 
href=\"./Template:Templatesimple\" about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"templateredirect\",\"href\":\"./Template:Templateredirect\"},\"params\":{},\"i\":0}}]}'
 
data-parsoid='{\"a\":{\"href\":\"./Template:Templatesimple\"},\"sa\":{\"href\":\"Template:templatesimple\"},\"dsr\":[0,20,null,null],\"pi\":[[]]}'/>");
 add("wt2html", "Template with thumb image (with link in description)", "<p 
about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"paramtest\",\"href\":\"./Template:Paramtest\"},\"params\":{\"param\":{\"wt\":\"[[Image:noimage.png|thumb|[[no
 link|link]] [[no link|caption]]]]\"}},\"i\":0}}]}' 
data-parsoid='{\"dsr\":[0,88,null,null],\"pi\":[[{\"k\":\"param\",\"named\":true,\"spc\":[\"\\n
  \",\" \",\"\",\"\"]}]]}'>This is a test template with parameter </p>");
 add("wt2html", "Template with complex arguments", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Template:Complextemplate\" about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"complextemplate\",\"href\":\"./Template:Complextemplate\"},\"params\":{\"1\":{\"wt\":\"[[Template:complextemplate|link]]\"},\"param\":{\"wt\":\"{{
 templateasargtest  |\\n templ = simple }}\"}},\"i\":0}}]}' 
data-parsoid='{\"stx\":\"piped\",\"a\":{\"href\":\"./Template:Complextemplate\"},\"sa\":{\"href\":\"Template:complextemplate\"},\"dsr\":[0,106,null,null],\"pi\":[[{\"k\":\"param\",\"named\":true,\"spc\":[\"\\n
  \",\" 
\",\"\",\"\"]},{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>link</a><span 
about=\"#mwt1\" data-parsoid=\"{}\"> This is a test template with parameter 
(test)</span></p>");
@@ -144,7 +145,7 @@
 add("wt2html", "Template infinite loop", "<span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"loop1\",\"href\":\"./Template:Loop1\"},\"params\":{},\"i\":0}}]}'
 data-parsoid='{\"dsr\":[0,9,null,null],\"pi\":[[]]}'></span>");
 add("wt2html", "BUG 529: Template with table, not included at beginning of 
line", "foo <table about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"table\",\"href\":\"./Template:Table\"},\"params\":{},\"i\":0}}]}'
 data-parsoid='{\"dsr\":[4,13,null,null],\"pi\":[[]]}'>\n<tbody 
data-parsoid=\"{}\"><tr data-parsoid=\"{}\"><td data-parsoid=\"{}\"> 1 </td><td 
data-parsoid='{\"stx_v\":\"row\"}'> 2</td></tr>\n<tr 
data-parsoid='{\"startTagSrc\":\"|-\"}'>\n<td data-parsoid=\"{}\"> 3 </td><td 
data-parsoid='{\"stx_v\":\"row\"}'> 4</td></tr>\n</tbody></table>");
 add("wt2html", "BUG 41: Template parameters shown as broken links", "<p 
data-parsoid='{\"dsr\":[0,15,0,0]}'><span typeof=\"mw:Param\" about=\"#mwt1\" 
id=\"mwt1\" 
data-parsoid='{\"src\":\"{{{parameter}}}\",\"dsr\":[0,15,null,null]}'>{{{parameter}}}</span></p>");
-add("wt2html", "Template with targets containing wikilinks", "<p 
data-parsoid='{\"dsr\":[0,11,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"[[foo]]\"},\"params\":{},\"i\":0}}]}'
 
data-parsoid='{\"src\":\"{{[[foo]]}}\",\"dsr\":[0,11,null,null],\"pi\":[[]]}'>{{</span><a
 rel=\"mw:WikiLink\" href=\"./Foo\" about=\"#mwt1\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"foo\"},\"dsr\":[2,9,2,2]}'>foo</a><span
 about=\"#mwt1\" data-parsoid=\"{}\">}}</span></p>\n\n<p 
data-parsoid='{\"dsr\":[13,33,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt2\" id=\"mwt2\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"[[{{echo|foo}}]]\"},\"params\":{},\"i\":0}}]}'
 data-parsoid='{\"dsr\":[13,33,null,null],\"pi\":[[]]}'>{{</span><a 
rel=\"mw:WikiLink\" href=\"./Foo\" about=\"#mwt2\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"{{echo|foo}}\"},\"dsr\":[15,31,2,2]}'>foo</a><span
 about=\"#mwt2\" data-parsoid=\"{}\">}}</span></p>\n\n<p 
data-parsoid='{\"dsr\":[35,55,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{{{echo|[[foo}}]]}}\",\"dsr\":[35,55,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:[[foo]]</span></p>");
+add("wt2html", "Template with targets containing wikilinks", "<p 
about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"[[foo]]\",\"href\":\"./Template:Foo\"},\"params\":{},\"i\":0}}]}'
 data-parsoid='{\"dsr\":[0,11,null,null],\"pi\":[[]]}'>FOO</p>\n\n<p 
about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"[[{{echo|foo}}]]\",\"href\":\"./Template:Foo\"},\"params\":{},\"i\":0}}]}'
 data-parsoid='{\"dsr\":[13,33,null,null],\"pi\":[[]]}'>FOO</p>\n\n<p 
data-parsoid='{\"dsr\":[35,55,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{{{echo|[[foo}}]]}}\",\"dsr\":[35,55,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:[[foo]]</span></p>");
 add("wt2html", "msgnw keyword", "<p data-parsoid='{\"dsr\":[0,20,0,0]}'><span 
typeof=\"mw:Placeholder\" data-parsoid='{\"src\":\"{{msgnw:MSGNW 
test}}\",\"dsr\":[0,20,null,null]}'>Warning: Page/template fetching disabled, 
and no cache for Msgnw:MSGNW_test</span></p>");
 add("wt2html", "int keyword", "<p data-parsoid='{\"dsr\":[0,45,0,0]}'><span 
typeof=\"mw:Transclusion\" about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"int:youhavenewmessages\",\"function\":\"int\"},\"params\":{\"1\":{\"wt\":\"lots
 of money\"},\"2\":{\"wt\":\"not!\"}},\"i\":0}}]}' 
data-parsoid='{\"src\":\"{{int:youhavenewmessages|lots of 
money|not!}}\",\"dsr\":[0,45,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"2\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'>Parser
 function implementation for pf_int missing in Parsoid.</span></p>");
 add("wt2html", "<onlyinclude> being included", "<p 
data-parsoid='{\"dsr\":[0,13,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Includes2\",\"href\":\"./Template:Includes2\"},\"params\":{},\"i\":0}}]}'
 
data-parsoid='{\"src\":\"{{Includes2}}\",\"dsr\":[0,13,null,null],\"pi\":[[]]}'>Foo</span><meta
 typeof=\"mw:Includes/OnlyInclude/End\" about=\"#mwt1\" 
data-parsoid='{\"src\":\"\",\"dsr\":[13,null]}'/></p>");
@@ -408,7 +409,7 @@
 add("wt2html", "Don't break list handling if language converter markup is in 
the item.", "<dl data-parsoid='{\"dsr\":[0,24,0,0]}'><dt 
data-parsoid='{\"dsr\":[0,8,1,0]}'>-{zh-cn</dt><dd 
data-parsoid='{\"stx\":\"row\",\"dsr\":[8,24,1,0]}'>AAA;zh-tw:BBB}-</dd></dl>");
 add("wt2html", "Don't break table handling if language converter markup is in 
the cell.", "<table data-parsoid='{\"dsr\":[0,18,2,2]}'>\n<tbody 
data-parsoid='{\"dsr\":[3,16,0,0]}'><tr 
data-parsoid='{\"startTagSrc\":\"|-\",\"autoInsertedEnd\":true,\"dsr\":[3,15,2,0]}'>\n<td
 
data-parsoid='{\"a\":{\"-{R\":null},\"sa\":{\"-{R\":\"\"},\"autoInsertedEnd\":true,\"dsr\":[6,15,6,0]}'>B}-</td></tr>\n</tbody></table>");
 add("wt2html", "Bug 529: Uncovered bullet in parser function result", "<ul 
data-parsoid='{\"dsr\":[0,24,0,0]}'><li data-parsoid='{\"dsr\":[0,24,1,0]}'> 
Foo <span typeof=\"mw:Transclusion\" about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"lc:{{bullet}} 
\",\"function\":\"lc\"},\"params\":{},\"i\":0}}]}' 
data-parsoid='{\"dsr\":[6,24,null,null],\"pi\":[[]]}'> bar</span></li></ul>");
-add("wt2html", "Bug 5678: Double-parsed template invocation", "<p 
data-parsoid='{\"dsr\":[0,42,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"lc:{{paramtest {{!}} 
param = hello }} \",\"function\":\"lc\"},\"params\":{},\"i\":0}}]}' 
data-parsoid='{\"src\":\"{{lc:{{paramtest {{!}} param = hello }} 
}}\",\"dsr\":[0,42,null,null],\"pi\":[[]]}'>{{paramtest  param = hello 
}}</span></p>");
+add("wt2html", "Bug 5678: Double-parsed template invocation", "<p 
data-parsoid='{\"dsr\":[0,42,0,0]}'><span typeof=\"mw:Transclusion\" 
about=\"#mwt1\" id=\"mwt1\" 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"lc:{{paramtest {{!}} 
param = hello }} \",\"function\":\"lc\"},\"params\":{},\"i\":0}}]}' 
data-parsoid='{\"src\":\"{{lc:{{paramtest {{!}} param = hello }} 
}}\",\"dsr\":[0,42,null,null],\"pi\":[[]]}'>warning: page/template fetching 
disabled, and no cache for template:paramtest_param_=_hello</span></p>");
 add("wt2html", "Case insensitivity of parser functions for non-ASCII 
characters (bug 8143)", "<p data-parsoid='{\"dsr\":[0,135,0,0]}'><span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{PRVNÍVELKÉ:ěščř}}\",\"dsr\":[0,19,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for 
PRVNÍVELKÉ:ěščř</span>\n<span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{prvnívelké:ěščř}}\",\"dsr\":[20,39,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for 
Prvnívelké:ěščř</span>\n<span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{PRVNÍMALÉ:ěščř}}\",\"dsr\":[40,58,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for PRVNÍMALÉ:ěščř</span>\n<span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{prvnímalé:ěščř}}\",\"dsr\":[59,77,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for Prvnímalé:ěščř</span>\n<span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{MALÁ:ěščř}}\",\"dsr\":[78,91,null,null]}'>Warning: 
Page/template fetching disabled, and no cache for MALÁ:ěščř</span>\n<span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{malá:ěščř}}\",\"dsr\":[92,105,null,null]}'>Warning: 
Page/template fetching disabled, and no cache for Malá:ěščř</span>\n<span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{VELKÁ:ěščř}}\",\"dsr\":[106,120,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for VELKÁ:ěščř</span>\n<span 
typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{velká:ěščř}}\",\"dsr\":[121,135,null,null]}'>Warning:
 Page/template fetching disabled, and no cache for Velká:ěščř</span></p>");
 add("wt2html", "Nesting tags, paragraphs on lines which begin with <div>", 
"<div data-parsoid='{\"stx\":\"html\",\"dsr\":[0,11,5,6]}'></div><strong 
data-parsoid='{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[11,20,8,0]}'>A</strong>\n<p
 data-parsoid='{\"dsr\":[21,31,0,0]}'><strong 
data-parsoid='{\"stx\":\"html\",\"autoInsertedStart\":true,\"dsr\":[21,31,0,9]}'>B</strong></p>");
 add("wt2html", "Free external link invading image caption", "<figure 
class=\"mw-default-size\" typeof=\"mw:Image/Thumb\" 
data-parsoid='{\"optList\":[{\"ck\":\"thumbnail\",\"ak\":\"thumb\"},{\"ck\":\"bogus\",\"ak\":\"http://x\"},{\"ck\":\"caption\",\"ak\":\"hello\"}],\"dsr\":[0,41,2,2]}'><a
 href=\"./File:Foobar.jpg\" 
data-parsoid='{\"a\":{\"href\":\"./File:Foobar.jpg\"},\"dsr\":[2,null,null,null]}'><img
 resource=\"./File:Foobar.jpg\" 
src=\"//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg\" 
height=\"25\" width=\"220\" 
data-parsoid='{\"a\":{\"resource\":\"./File:Foobar.jpg\",\"height\":\"25\",\"width\":\"220\"},\"sa\":{\"resource\":\"Image:Foobar.jpg\"}}'/></a><figcaption
 data-parsoid='{\"dsr\":[null,39,null,null]}'>hello</figcaption></figure>");
@@ -790,6 +791,7 @@
 add("html2html", "Magic links: internal link to RFC (bug 479)", "<p 
data-parsoid='{\"dsr\":[0,135,0,0]}'>&lt;a 
href=\"/index.php?title=RFC_123&amp;action=edit&amp;redlink=1\" class=\"new\" 
title=\"RFC 123 (page does not exist)\"><span typeof=\"mw:Nowiki\" 
data-parsoid='{\"dsr\":[107,131,8,9]}'>RFC 123</span>&lt;/a></p>\n");
 add("html2html", "Magic links: ISBN (bug 1937)", "<p 
data-parsoid='{\"dsr\":[0,57,0,0]}'>[/wiki/Special:BookSources/0306406152 <a 
href=\"./Special:BookSources/0306406152\" rel=\"mw:ExtLink\" 
data-parsoid='{\"stx\":\"protocol\",\"dsr\":[38,56,0,0]}'>ISBN 
0-306-40615-2</a>]</p>\n");
 add("html2html", "Nonexistent template", "<p 
data-parsoid='{\"dsr\":[0,196,0,0]}'>&lt;a 
href=\"/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit&amp;redlink=1\"
 class=\"new\" title=\"Template:Thistemplatedoesnotexist (page does not 
exist)\">Template:Thistemplatedoesnotexist&lt;/a></p>\n");
+add("html2html", "Template with invalid target containing wikilink", "<p 
data-parsoid='{\"dsr\":[0,17,0,0]}'><span typeof=\"mw:Placeholder\" 
data-parsoid='{\"src\":\"{{[[Main 
Page]]}}\",\"dsr\":[0,17,null,null]}'>Warning: Page/template fetching disabled, 
and no cache for Template:Main_Page</span></p>\n");
 add("html2html", "Template unnamed parameter", "<p 
data-parsoid='{\"dsr\":[0,61,0,0]}'>&lt;a href=\"/wiki/Main_Page\" title=\"Main 
Page\">the main page&lt;/a></p>\n");
 add("html2html", "Template with thumb image (with link in description)", "This 
is a test template with parameter <div class=\"thumb tright\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[39,512,26,6]}'><div 
class=\"thumbinner\" style=\"width:182px;\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[65,506,45,6]}'>&lt;a 
href=\"/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png\" 
class=\"new\" title=\"File:Noimage.png\">File:Noimage.png&lt;/a>  <div 
class=\"thumbcaption\" 
data-parsoid='{\"stx\":\"html\",\"dsr\":[234,500,26,6]}'>&lt;a 
href=\"/index.php?title=No_link&amp;action=edit&amp;redlink=1\" class=\"new\" 
title=\"No link (page does not exist)\">link&lt;/a> &lt;a 
href=\"/index.php?title=No_link&amp;action=edit&amp;redlink=1\" class=\"new\" 
title=\"No link (page does not exist)\">caption&lt;/a></div></div></div>\n");
 add("html2html", "Template with complex arguments", "<p 
data-parsoid='{\"dsr\":[0,128,0,0]}'>&lt;a 
href=\"/wiki/Template:Complextemplate\" 
title=\"Template:Complextemplate\">link&lt;/a> This is a test template with 
parameter (test)</p>\n");
@@ -2842,9 +2844,6 @@
 add("selser", "Template as link source [0,0,0,4,[0,3]]", 
"[[{{linktest2}}]]\n\n[[{{linktest2}}|Main 
Page]]1jdkk1elzz9nqaor\n[[{{linktest2}}]]\n");
 add("selser", "Template as link source [0,2,0,4,[0,2]]", 
"[[{{linktest2}}]]65jfilddxu2chaor\n\n[[{{linktest2}}|Main 
Page]]cu4isvklz0k9\n[[{{linktest2}}]]<nowiki/>rle9sucdvkju4n29Page");
 add("selser", "Template as link source [0,0,0,4,1]", 
"[[{{linktest2}}]]\n\n[[{{linktest2}}|Main 
Page]]2t6j0ntzmy4x6r\n[[{{linktest2}}]]Page");
-add("selser", "Template with targets containing wikilinks [0,4,0,0,3]", 
"{{[[foo]]}}340gvnbe2k7nl8fr\n{{[[{{echo|foo}}]]}}\n");
-add("selser", "Template with targets containing wikilinks [0,0,0,4,1]", 
"{{[[foo]]}}\n\n{{[[{{echo|foo}}]]}}64n4q61ewllyp66r\n{{{{echo|[[foo}}]]}}");
-add("selser", "Template with targets containing wikilinks [2,3,2,0,0]", 
"jn3l3gn2shlac3di\n\n{{[[foo]]}}eps1xdvsq62vgqfr\n{{[[{{echo|foo}}]]}}\n\n{{{{echo|[[foo}}]]}}");
 add("selser", "2. includeonly in html attr value [[0,3,0]]", "<span 
id=\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\">bar</span><span 
id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>bar</span>");
 add("selser", "2. includeonly in html attr value [[0,4,0]]", "<span 
id=\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\">bar</span>3qendv6zaaif6r<span
 id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>bar</span>");
 add("selser", "2. includeonly in html attr value [2]", 
"u352zdrjeccsdcxr\n\n<span 
id=\"<noinclude>v1</noinclude><includeonly>v2</includeonly>\">bar</span>\n<span 
id=<noinclude>\"v1\"</noinclude><includeonly>\"v2\"</includeonly>>bar</span>");

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

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

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

Reply via email to