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\":\"<gallery>\\nimage1.png |\\nimage2.gif|||||\\n\\nimage3|\\nimage4 |300px| centre\\n image5.svg| http://///////\\n[[x|xx]]]]\\n* image6\\n</gallery>\",\"tagWidths\":[9,10],\"autoInsertedEnd\":true,\"dsr\":[0,131,9,0]}'><gallery>\nimage1.png |\nimage2.gif|||||\n\nimage3|\nimage4 |300px| centre\n image5.svg| http://///////\n[[x|xx]]]]\n* image6\n</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=\"{"stx":"html","src":"<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</gallery>","tagWidths":[78,10],"autoInsertedEnd":true,"dsr":[0,261,78,0]}\"><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</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\":\"<gallery>\\nimage:foobar.jpg|link=Main_Page\\nimage:foobar.jpg|link=Main_Page#section\\nimage:foobar.jpg|link=Main Page#section|caption\\n</gallery>\",\"tagWidths\":[9,10],\"autoInsertedEnd\":true,\"dsr\":[0,140,9,0]}'><gallery>\nimage:foobar.jpg|link=Main_Page\nimage:foobar.jpg|link=Main_Page#section\nimage:foobar.jpg|link=Main Page#section|caption\n</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