Arlolra has uploaded a new change for review.

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

Change subject: [jshint] Enable `freeze` option
......................................................................

[jshint] Enable `freeze` option

 * The blacklist change is because of String() wrap of the namespace
   number. In Sanitizer, there was a test for the method
   token.isHTMLTag, which is a little smelly considering we'd been
   adding to native object's prototype. Turns out, for the that
   NAMESPACENUMBER magic word, the token was being emitted as Number,
   and thus taking a different path than expected.

Change-Id: I733a9e5697d3db49ac1d4607049918ca2787342b
---
M .jshintrc
M lib/html2wt/escapeWikitext.js
M lib/utils/Util.js
M lib/wt2html/parser.defines.js
M lib/wt2html/tt/AttributeExpander.js
M lib/wt2html/tt/ParagraphWrapper.js
M lib/wt2html/tt/ParserFunctions.js
M lib/wt2html/tt/PreHandler.js
M lib/wt2html/tt/Sanitizer.js
M lib/wt2html/tt/TokenStreamPatcher.js
M tests/parserTests-blacklist.js
11 files changed, 39 insertions(+), 50 deletions(-)


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

diff --git a/.jshintrc b/.jshintrc
index 1f1718a..b73be56 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -7,6 +7,7 @@
        "bitwise": true,
        "curly": true,
        "eqeqeq": true,
+       "freeze": true,
        "latedef": true,
        "laxbreak": true,
        "loopfunc": true,
diff --git a/lib/html2wt/escapeWikitext.js b/lib/html2wt/escapeWikitext.js
index ed1381e..9c30413 100644
--- a/lib/html2wt/escapeWikitext.js
+++ b/lib/html2wt/escapeWikitext.js
@@ -3,6 +3,7 @@
 
 var wtConsts = require('../config/WikitextConstants.js');
 var DU = require('../utils/DOMUtils.js').DOMUtils;
+var Util = require('../utils/Util.js').Util;
 var PegTokenizer = require('../wt2html/tokenizer.js').PegTokenizer;
 var pd = require('../wt2html/parser.defines.js');
 var SanitizerConstants = 
require('../wt2html/tt/Sanitizer.js').SanitizerConstants;
@@ -246,7 +247,7 @@
                var tc = t.constructor;
 
                // Ignore non-whitelisted html tags
-               if (t.isHTMLTag()) {
+               if (Util.isHTMLTag(t)) {
                        if (linksOnly) {
                                continue;
                        }
@@ -340,7 +341,7 @@
                                continue;
                        }
                        // Ignore table tokens outside of tables
-                       if (t.name in {td: 1, tr: 1, th: 1} && !t.isHTMLTag() 
&& state.wikiTableNesting === 0) {
+                       if (t.name in {td: 1, tr: 1, th: 1} && 
!Util.isHTMLTag(t) && state.wikiTableNesting === 0) {
                                continue;
                        }
 
diff --git a/lib/utils/Util.js b/lib/utils/Util.js
index 412d5a8..f637b21 100644
--- a/lib/utils/Util.js
+++ b/lib/utils/Util.js
@@ -1292,6 +1292,27 @@
                }
                return md5.digest('hex');
        },
+
+       /**
+        * Determine whether the current token was an HTML tag in wikitext.
+        *
+        * @return {boolean}
+        */
+       isHTMLTag: function(token) {
+               switch (token.constructor) {
+               case String:
+               case pd.NlTk:
+               case pd.CommentTk:
+               case pd.EOFTk:
+                       return false;
+               case pd.TagTk:
+               case pd.EndTagTk:
+               case pd.SelfclosingTagTk:
+                       return token.dataAttribs.stx === 'html';
+               default:
+                       console.assert(false, 'Unhandled token type');
+               }
+       },
 };
 
 // FIXME: There is also a DOMUtils.getJSONAttribute. Consolidate
diff --git a/lib/wt2html/parser.defines.js b/lib/wt2html/parser.defines.js
index 003f495..bc640b2 100644
--- a/lib/wt2html/parser.defines.js
+++ b/lib/wt2html/parser.defines.js
@@ -9,10 +9,6 @@
        }
 }; // initialized later to avoid circular dependency
 
-// To support isHTMLTag querying
-String.prototype.isHTMLTag = function() {
-       return false;
-};
 
 /**
  * @class
@@ -229,17 +225,6 @@
        /**
         * @member Token
         *
-        * Determine whether the current token was an HTML tag in wikitext.
-        *
-        * @return {boolean}
-        */
-       isHTMLTag: function() {
-               return this.dataAttribs.stx === 'html';
-       },
-
-       /**
-        * @member Token
-        *
         * Get the wikitext source of a token.
         *
         * @param {MWParserEnvironment} env
@@ -317,7 +302,7 @@
  */
 TagTk.prototype.toString = function(compact) {
        requireUtil();
-       if (this.isHTMLTag()) {
+       if (Util.isHTMLTag(this)) {
                if (compact) {
                        return "<HTML:" + this.name + ">";
                } else {
@@ -371,7 +356,7 @@
  * @return {string}
  */
 EndTagTk.prototype.toString = function() {
-       if (this.isHTMLTag()) {
+       if (Util.isHTMLTag(this)) {
                return "</HTML:" + this.name + ">";
        } else {
                return "</" + this.name + ">";
@@ -557,7 +542,7 @@
  * @return {string}
  */
 SelfclosingTagTk.prototype.toString = function(compact, indent) {
-       if (this.isHTMLTag()) {
+       if (Util.isHTMLTag(this)) {
                return "<HTML:" + this.name + " />";
        } else {
                var f = SelfclosingTagTk.prototype.tagToStringFns[this.name];
@@ -607,17 +592,6 @@
        toString: function() {
                return "\\n";
        },
-
-       /**
-        * @method
-        *
-        * Tell the caller that this isn't an HTML tag.
-        *
-        * @return {boolean} Always false
-        */
-       isHTMLTag: function() {
-               return false;
-       },
 };
 
 /**
@@ -645,10 +619,6 @@
        toString: function() {
                return "<!--" + this.value + "-->";
        },
-
-       isHTMLTag: function() {
-               return false;
-       },
 };
 
 /* -------------------- EOFTk -------------------- */
@@ -662,10 +632,6 @@
 
        toString: function() {
                return "";
-       },
-
-       isHTMLTag: function() {
-               return false;
        },
 };
 
diff --git a/lib/wt2html/tt/AttributeExpander.js 
b/lib/wt2html/tt/AttributeExpander.js
index a458ae2..08b6e6c 100644
--- a/lib/wt2html/tt/AttributeExpander.js
+++ b/lib/wt2html/tt/AttributeExpander.js
@@ -237,7 +237,7 @@
        var newAttrs = null;
        var nlTkPos = -1;
        var i, l;
-       var nlTkOkay = !(!token.isHTMLTag() && Util.isTableTag(token));
+       var nlTkOkay = !(!Util.isHTMLTag(token) && Util.isTableTag(token));
 
        // Identify attributes that were generated in full or in part using 
templates
        for (i = 0, l = oldAttrs.length; i < l; i++) {
diff --git a/lib/wt2html/tt/ParagraphWrapper.js 
b/lib/wt2html/tt/ParagraphWrapper.js
index 115be0b..b62b1ba 100644
--- a/lib/wt2html/tt/ParagraphWrapper.js
+++ b/lib/wt2html/tt/ParagraphWrapper.js
@@ -91,9 +91,9 @@
        var newRes = null;
        for (var i = 0, n = res.length; i < n; i++) {
                var t = res[i];
-               if (i + 2 < n && t.constructor === TagTk && t.name === 'p' && 
!t.isHTMLTag() &&
+               if (i + 2 < n && t.constructor === TagTk && t.name === 'p' && 
!Util.isHTMLTag(t) &&
                        Consts.HTML.FormattingTags.has((res[i + 1].name || 
'').toUpperCase()) &&
-                       res[i + 2].constructor === EndTagTk && res[i + 2].name 
=== 'p' && !res[i + 2].isHTMLTag()) {
+                       res[i + 2].constructor === EndTagTk && res[i + 2].name 
=== 'p' && !Util.isHTMLTag(res[i + 2])) {
                        // Init newRes
                        if (newRes === null) {
                                newRes = i === 0 ? [] : res.slice(0, i);
@@ -509,7 +509,7 @@
                }
 
                // Deal with HTML P-tokens.
-               if (token.name === 'p' && token.isHTMLTag()) {
+               if (token.name === 'p' && Util.isHTMLTag(token)) {
                        if (tc === TagTk) {
                                // Close unclosed HTML P-tag.
                                if (this.hasOpenHTMLPTag) {
diff --git a/lib/wt2html/tt/ParserFunctions.js 
b/lib/wt2html/tt/ParserFunctions.js
index 5e7519b..ab34f35 100644
--- a/lib/wt2html/tt/ParserFunctions.js
+++ b/lib/wt2html/tt/ParserFunctions.js
@@ -829,7 +829,7 @@
 };
 ParserFunctions.prototype.pf_namespacenumber = function(token, frame, cb, 
args) {
        var target = args[0].k.split(':').pop();
-       cb({ tokens: [this.env.conf.wiki.namespaceIds[target]] });
+       cb({ tokens: [String(this.env.conf.wiki.namespaceIds[target])] });
 };
 ParserFunctions.prototype.pf_pagename = function(token, frame, cb, args) {
        cb({ tokens: [this.env.page.name || ''] });
diff --git a/lib/wt2html/tt/PreHandler.js b/lib/wt2html/tt/PreHandler.js
index f67bc42..b781a0f 100644
--- a/lib/wt2html/tt/PreHandler.js
+++ b/lib/wt2html/tt/PreHandler.js
@@ -382,7 +382,7 @@
                                if (Util.isSolTransparent(env, token)) { // 
continue watching
                                        this.solTransparentTokens.push(token);
                                } else if (Util.isTableTag(token) ||
-                                       (token.isHTMLTag() && 
Util.isBlockTag(token.name))) {
+                                       (Util.isHTMLTag(token) && 
Util.isBlockTag(token.name))) {
                                        ret = this.getResultAndReset(token);
                                        this.moveToIgnoreState();
                                } else {
diff --git a/lib/wt2html/tt/Sanitizer.js b/lib/wt2html/tt/Sanitizer.js
index 2a658f9..65f20a2 100644
--- a/lib/wt2html/tt/Sanitizer.js
+++ b/lib/wt2html/tt/Sanitizer.js
@@ -684,7 +684,7 @@
        var attribs = token.attribs;
        var noEndTagSet = this.constants.noEndTagSet;
 
-       if (token.isHTMLTag && token.isHTMLTag() &&
+       if (Util.isHTMLTag(token) &&
                
(!WikitextConstants.Sanitizer.TagWhiteList.has(token.name.toUpperCase()) ||
                        (token.constructor === EndTagTk && 
noEndTagSet.has(token.name)))
        ) { // unknown tag -- convert to plain text
diff --git a/lib/wt2html/tt/TokenStreamPatcher.js 
b/lib/wt2html/tt/TokenStreamPatcher.js
index 461b671..4228777 100644
--- a/lib/wt2html/tt/TokenStreamPatcher.js
+++ b/lib/wt2html/tt/TokenStreamPatcher.js
@@ -229,7 +229,7 @@
                case TagTk:
                        if (token.getAttribute("typeof") === "mw:Nowiki") {
                                this.inNowiki = true;
-                       } else if (this.atTopLevel && !token.isHTMLTag()) {
+                       } else if (this.atTopLevel && !Util.isHTMLTag(token)) {
                                if (token.name === 'table') {
                                        this.wikiTableNesting++;
                                } else if (this.wikiTableNesting === 0 &&
@@ -243,7 +243,7 @@
                case EndTagTk:
                        if (token.getAttribute("typeof") === "mw:Nowiki") {
                                this.inNowiki = false;
-                       } else if (this.atTopLevel && !token.isHTMLTag() && 
token.name === 'table') {
+                       } else if (this.atTopLevel && !Util.isHTMLTag(token) && 
token.name === 'table') {
                                if (this.wikiTableNesting > 0) {
                                        this.wikiTableNesting--;
                                } else {
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index afe39e9..6c7e6a2 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -76,7 +76,7 @@
 add("wt2html", "Magic Word: {{SUBJECTSPACEE}}", "<p 
data-parsoid='{\"dsr\":[0,17,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,17,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTSPACEE\",\"href\":\"./Template:SUBJECTSPACEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTSPACEE</span></p>");
 add("wt2html", "Magic Word: {{NAMESPACE}}", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,13,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACE\",\"function\":\"namespace\"},\"params\":{},\"i\":0}}]}'>Main</p>");
 add("wt2html", "Magic Word: {{NAMESPACEE}}", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,14,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACEE\",\"function\":\"namespacee\"},\"params\":{},\"i\":0}}]}'>Main</p>");
-add("wt2html", "Magic Word: {{NAMESPACENUMBER}}", "<p 
data-parsoid='{\"dsr\":[0,19,0,0]}'><span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,19,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACENUMBER\",\"function\":\"namespacenumber\"},\"params\":{},\"i\":0}}]}'></span></p>");
+add("wt2html", "Magic Word: {{NAMESPACENUMBER}}", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,19,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACENUMBER\",\"function\":\"namespacenumber\"},\"params\":{},\"i\":0}}]}'>0</p>");
 add("wt2html", "Magic Word: {{SUBPAGENAME}}", "<p 
data-parsoid='{\"dsr\":[0,15,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,15,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAME\",\"href\":\"./Template:SUBPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAME</span></p>");
 add("wt2html", "Magic Word: {{SUBPAGENAMEE}}", "<p 
data-parsoid='{\"dsr\":[0,16,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,16,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAMEE\",\"href\":\"./Template:SUBPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAMEE</span></p>");
 add("wt2html", "Magic Word: {{ROOTPAGENAME}}", "<p 
data-parsoid='{\"dsr\":[0,16,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,16,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ROOTPAGENAME\",\"href\":\"./Template:ROOTPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:ROOTPAGENAME</span></p>");
@@ -189,7 +189,7 @@
 add("wt2html", "Transclusion of MediaWiki message with underscore", "<p 
data-parsoid='{\"dsr\":[0,27,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,27,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"MediaWiki:history_short\",\"href\":\"./MediaWiki:History_short\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
MediaWiki:History_short</span></p>");
 add("wt2html", "Transclusion of MediaWiki message with space", "<p 
data-parsoid='{\"dsr\":[0,27,0,0]}'><span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt1\" id=\"mwt1\" 
data-parsoid='{\"dsr\":[0,27,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"MediaWiki:history 
short\",\"href\":\"./MediaWiki:History_short\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
MediaWiki:History_short</span></p>");
 add("wt2html", "Special:Search page linking.", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,18,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Special:search\",\"function\":\"special\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_special missing in Parsoid.</p>");
-add("wt2html", "Say the magic word", "<ul 
data-parsoid='{\"dsr\":[0,544,0,0]}'><li data-parsoid='{\"dsr\":[0,14,1,0]}'> 
<span about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[2,14,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[15,30,1,0]}'> <span 
about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[17,30,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAMEE\",\"function\":\"pagenamee\"},\"params\":{},\"i\":0}}]}'></span></li>\n<li
 data-parsoid='{\"dsr\":[31,49,1,0]}'> <span about=\"#mwt3\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[33,49,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"FULLPAGENAME\",\"function\":\"fullpagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[50,69,1,0]}'> <span 
about=\"#mwt4\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[52,69,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"FULLPAGENAMEE\",\"function\":\"fullpagenamee\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[70,88,1,0]}'> <span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt5\" id=\"mwt5\" 
data-parsoid='{\"dsr\":[72,88,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"BASEPAGENAME\",\"href\":\"./Template:BASEPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:BASEPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[89,108,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt6\" id=\"mwt6\" 
data-parsoid='{\"dsr\":[91,108,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"BASEPAGENAMEE\",\"href\":\"./Template:BASEPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:BASEPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[109,126,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt7\" id=\"mwt7\" 
data-parsoid='{\"dsr\":[111,126,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAME\",\"href\":\"./Template:SUBPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[127,145,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt8\" id=\"mwt8\" 
data-parsoid='{\"dsr\":[129,145,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAMEE\",\"href\":\"./Template:SUBPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[146,164,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt9\" id=\"mwt9\" 
data-parsoid='{\"dsr\":[148,164,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ROOTPAGENAME\",\"href\":\"./Template:ROOTPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:ROOTPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[165,184,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt10\" id=\"mwt10\" 
data-parsoid='{\"dsr\":[167,184,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ROOTPAGENAMEE\",\"href\":\"./Template:ROOTPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:ROOTPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[185,203,1,0]}'> 
<span about=\"#mwt11\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[187,203,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKPAGENAME\",\"function\":\"talkpagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[204,223,1,0]}'> <span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt12\" id=\"mwt12\" 
data-parsoid='{\"dsr\":[206,223,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKPAGENAMEE\",\"href\":\"./Template:TALKPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:TALKPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[224,245,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt13\" id=\"mwt13\" 
data-parsoid='{\"dsr\":[226,245,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTPAGENAME\",\"href\":\"./Template:SUBJECTPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTPAGENAME</span></li>\n<li 
data-parsoid='{\"dsr\":[246,268,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt14\" id=\"mwt14\" 
data-parsoid='{\"dsr\":[248,268,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTPAGENAMEE\",\"href\":\"./Template:SUBJECTPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTPAGENAMEE</span></li>\n<li 
data-parsoid='{\"dsr\":[269,285,1,0]}'> <span about=\"#mwt15\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[271,285,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACEE\",\"function\":\"namespacee\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[286,301,1,0]}'> <span about=\"#mwt16\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[288,301,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACE\",\"function\":\"namespace\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[302,323,1,0]}'> <span about=\"#mwt17\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[304,323,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACENUMBER\",\"function\":\"namespacenumber\"},\"params\":{},\"i\":0}}]}'></span></li>\n<li
 data-parsoid='{\"dsr\":[324,339,1,0]}'> <span about=\"#mwt18\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[326,339,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKSPACE\",\"function\":\"talkspace\"},\"params\":{},\"i\":0}}]}'>Talk</span></li>\n<li
 data-parsoid='{\"dsr\":[340,356,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt19\" id=\"mwt19\" 
data-parsoid='{\"dsr\":[342,356,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKSPACEE\",\"href\":\"./Template:TALKSPACEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:TALKSPACEE</span></li>\n<li data-parsoid='{\"dsr\":[357,375,1,0]}'> 
<span about=\"#mwt20\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[359,375,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTSPACE\",\"function\":\"subjectspace\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[376,395,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt21\" id=\"mwt21\" 
data-parsoid='{\"dsr\":[378,395,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTSPACEE\",\"href\":\"./Template:SUBJECTSPACEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTSPACEE</span></li>\n<li data-parsoid='{\"dsr\":[396,544,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt22\" id=\"mwt22\" 
data-parsoid='{\"dsr\":[398,544,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"2\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"3\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"4\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"5\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"6\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"7\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Dynamic\",\"href\":\"./Template:Dynamic\"},\"params\":{\"1\":{\"wt\":\"{{NUMBEROFUSERS}}\"},\"2\":{\"wt\":\"{{NUMBEROFPAGES}}\"},\"3\":{\"wt\":\"{{CURRENTVERSION}}\"},\"4\":{\"wt\":\"{{CONTENTLANGUAGE}}\"},\"5\":{\"wt\":\"{{DIRECTIONMARK}}\"},\"6\":{\"wt\":\"{{CURRENTTIMESTAMP}}\"},\"7\":{\"wt\":\"{{NUMBEROFARTICLES}}\"}},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:Dynamic</span></li></ul>");
+add("wt2html", "Say the magic word", "<ul 
data-parsoid='{\"dsr\":[0,544,0,0]}'><li data-parsoid='{\"dsr\":[0,14,1,0]}'> 
<span about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[2,14,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[15,30,1,0]}'> <span 
about=\"#mwt2\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[17,30,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAMEE\",\"function\":\"pagenamee\"},\"params\":{},\"i\":0}}]}'></span></li>\n<li
 data-parsoid='{\"dsr\":[31,49,1,0]}'> <span about=\"#mwt3\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[33,49,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"FULLPAGENAME\",\"function\":\"fullpagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[50,69,1,0]}'> <span 
about=\"#mwt4\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[52,69,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"FULLPAGENAMEE\",\"function\":\"fullpagenamee\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[70,88,1,0]}'> <span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt5\" id=\"mwt5\" 
data-parsoid='{\"dsr\":[72,88,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"BASEPAGENAME\",\"href\":\"./Template:BASEPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:BASEPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[89,108,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt6\" id=\"mwt6\" 
data-parsoid='{\"dsr\":[91,108,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"BASEPAGENAMEE\",\"href\":\"./Template:BASEPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:BASEPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[109,126,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt7\" id=\"mwt7\" 
data-parsoid='{\"dsr\":[111,126,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAME\",\"href\":\"./Template:SUBPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[127,145,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt8\" id=\"mwt8\" 
data-parsoid='{\"dsr\":[129,145,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBPAGENAMEE\",\"href\":\"./Template:SUBPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[146,164,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt9\" id=\"mwt9\" 
data-parsoid='{\"dsr\":[148,164,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ROOTPAGENAME\",\"href\":\"./Template:ROOTPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:ROOTPAGENAME</span></li>\n<li data-parsoid='{\"dsr\":[165,184,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt10\" id=\"mwt10\" 
data-parsoid='{\"dsr\":[167,184,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"ROOTPAGENAMEE\",\"href\":\"./Template:ROOTPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:ROOTPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[185,203,1,0]}'> 
<span about=\"#mwt11\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[187,203,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKPAGENAME\",\"function\":\"talkpagename\"},\"params\":{},\"i\":0}}]}'>Parser
 test</span></li>\n<li data-parsoid='{\"dsr\":[204,223,1,0]}'> <span 
typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt12\" id=\"mwt12\" 
data-parsoid='{\"dsr\":[206,223,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKPAGENAMEE\",\"href\":\"./Template:TALKPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:TALKPAGENAMEE</span></li>\n<li data-parsoid='{\"dsr\":[224,245,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt13\" id=\"mwt13\" 
data-parsoid='{\"dsr\":[226,245,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTPAGENAME\",\"href\":\"./Template:SUBJECTPAGENAME\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTPAGENAME</span></li>\n<li 
data-parsoid='{\"dsr\":[246,268,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt14\" id=\"mwt14\" 
data-parsoid='{\"dsr\":[248,268,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTPAGENAMEE\",\"href\":\"./Template:SUBJECTPAGENAMEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTPAGENAMEE</span></li>\n<li 
data-parsoid='{\"dsr\":[269,285,1,0]}'> <span about=\"#mwt15\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[271,285,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACEE\",\"function\":\"namespacee\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[286,301,1,0]}'> <span about=\"#mwt16\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[288,301,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACE\",\"function\":\"namespace\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[302,323,1,0]}'> <span about=\"#mwt17\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[304,323,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"NAMESPACENUMBER\",\"function\":\"namespacenumber\"},\"params\":{},\"i\":0}}]}'>0</span></li>\n<li
 data-parsoid='{\"dsr\":[324,339,1,0]}'> <span about=\"#mwt18\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[326,339,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKSPACE\",\"function\":\"talkspace\"},\"params\":{},\"i\":0}}]}'>Talk</span></li>\n<li
 data-parsoid='{\"dsr\":[340,356,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt19\" id=\"mwt19\" 
data-parsoid='{\"dsr\":[342,356,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"TALKSPACEE\",\"href\":\"./Template:TALKSPACEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:TALKSPACEE</span></li>\n<li data-parsoid='{\"dsr\":[357,375,1,0]}'> 
<span about=\"#mwt20\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[]],\"dsr\":[359,375,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTSPACE\",\"function\":\"subjectspace\"},\"params\":{},\"i\":0}}]}'>Main</span></li>\n<li
 data-parsoid='{\"dsr\":[376,395,1,0]}'> <span typeof=\"mw:Transclusion 
mw:Placeholder\" about=\"#mwt21\" id=\"mwt21\" 
data-parsoid='{\"dsr\":[378,395,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"SUBJECTSPACEE\",\"href\":\"./Template:SUBJECTSPACEE\"},\"params\":{},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:SUBJECTSPACEE</span></li>\n<li data-parsoid='{\"dsr\":[396,544,1,0]}'> 
<span typeof=\"mw:Transclusion mw:Placeholder\" about=\"#mwt22\" id=\"mwt22\" 
data-parsoid='{\"dsr\":[398,544,null,null],\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"2\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"3\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"4\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"5\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"6\",\"spc\":[\"\",\"\",\"\",\"\"]},{\"k\":\"7\",\"spc\":[\"\",\"\",\"\",\"\"]}]]}'
 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"Dynamic\",\"href\":\"./Template:Dynamic\"},\"params\":{\"1\":{\"wt\":\"{{NUMBEROFUSERS}}\"},\"2\":{\"wt\":\"{{NUMBEROFPAGES}}\"},\"3\":{\"wt\":\"{{CURRENTVERSION}}\"},\"4\":{\"wt\":\"{{CONTENTLANGUAGE}}\"},\"5\":{\"wt\":\"{{DIRECTIONMARK}}\"},\"6\":{\"wt\":\"{{CURRENTTIMESTAMP}}\"},\"7\":{\"wt\":\"{{NUMBEROFARTICLES}}\"}},\"i\":0}}]}'>Warning:
 Page/template fetching disabled, and no cache for 
Template:Dynamic</span></li></ul>");
 add("wt2html", "Gallery", "<p data-parsoid='{\"dsr\":[0,131,0,0]}'><span 
typeof=\"mw:Extension/gallery\" about=\"#mwt1\" 
data-parsoid='{\"stx\":\"html\",\"src\":\"&lt;gallery>\\nimage1.png 
|\\nimage2.gif|||||\\n\\nimage3|\\nimage4    |300px| centre\\n image5.svg| 
http://///////\\n[[x|xx]]]]\\n* 
image6\\n&lt;/gallery>\",\"tagWidths\":[9,10],\"autoInsertedEnd\":true,\"dsr\":[0,131,9,0]}'>&lt;gallery>\nimage1.png
 |\nimage2.gif|||||\n\nimage3|\nimage4    |300px| centre\n image5.svg| 
http://///////\n[[x|xx]]]]\n* image6\n&lt;/gallery></span></p>");
 add("wt2html", "Gallery (with options)", "<p 
data-parsoid='{\"dsr\":[0,261,0,0]}'><span typeof=\"mw:Extension/gallery\" 
about=\"#mwt1\" 
data-parsoid=\"{&quot;stx&quot;:&quot;html&quot;,&quot;src&quot;:&quot;&lt;gallery
 widths='70px' heights='40px' perrow='2' caption='Foo [[Main Page]]' 
>\\nFile:Nonexistent.jpg|caption\\nFile:Nonexistent.jpg\\nimage:foobar.jpg|some 
'''caption''' [[Main 
Page]]\\nimage:foobar.jpg\\nimage:foobar.jpg|Blabla|alt=This is a 
foo-bar.|blabla.\\n&lt;/gallery>&quot;,&quot;tagWidths&quot;:[78,10],&quot;autoInsertedEnd&quot;:true,&quot;dsr&quot;:[0,261,78,0]}\">&lt;gallery
 widths='70px' heights='40px' perrow='2' caption='Foo [[Main Page]]' 
>\nFile:Nonexistent.jpg|caption\nFile:Nonexistent.jpg\nimage:foobar.jpg|some 
'''caption''' [[Main Page]]\nimage:foobar.jpg\nimage:foobar.jpg|Blabla|alt=This 
is a foo-bar.|blabla.\n&lt;/gallery></span></p>");
 add("wt2html", "Gallery with link that has fragment", "<p 
data-parsoid='{\"dsr\":[0,140,0,0]}'><span typeof=\"mw:Extension/gallery\" 
about=\"#mwt1\" 
data-parsoid='{\"stx\":\"html\",\"src\":\"&lt;gallery>\\nimage:foobar.jpg|link=Main_Page\\nimage:foobar.jpg|link=Main_Page#section\\nimage:foobar.jpg|link=Main
 
Page#section|caption\\n&lt;/gallery>\",\"tagWidths\":[9,10],\"autoInsertedEnd\":true,\"dsr\":[0,140,9,0]}'>&lt;gallery>\nimage:foobar.jpg|link=Main_Page\nimage:foobar.jpg|link=Main_Page#section\nimage:foobar.jpg|link=Main
 Page#section|caption\n&lt;/gallery></span></p>");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I733a9e5697d3db49ac1d4607049918ca2787342b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <abrea...@wikimedia.org>

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

Reply via email to