Arlolra has uploaded a new change for review.

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

Change subject: Rename helper to Util.promiseToProcessContent
......................................................................

Rename helper to Util.promiseToProcessContent

 * This is also pulled out of https://gerrit.wikimedia.org/r/#/c/264026/

 * The blacklist change is because async.map is parallel and the extra
   .then changes the ordering, I assume.

Change-Id: Ibed37f4917310634895b4d6800b5c47343cf5257
---
M lib/utils/Util.js
M tests/parserTests-blacklist.js
2 files changed, 26 insertions(+), 25 deletions(-)


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

diff --git a/lib/utils/Util.js b/lib/utils/Util.js
index e70b832..483789d 100644
--- a/lib/utils/Util.js
+++ b/lib/utils/Util.js
@@ -1100,22 +1100,18 @@
        },
 
        /**
-        * Processes an array of tokens all the way to DOM.
-        * Currently used internally within this file.
+        * A promise returning wrapper around processContentInPipeline that
+        * resolves with the docuemnt.
         */
-       _processTokensToDOM: function(env, frame, tokens, opts, cb) {
+       promiseToProcessContent: function(env, frame, content, opts, cb) {
                cb = JSUtils.mkPromised(cb);
-               this.processContentInPipeline(
-                       env,
-                       frame,
-                       tokens.concat([new pd.EOFTk()]), {
-                               pipelineType: "tokens/x-mediawiki/expanded",
-                               pipelineOpts: opts.pipelineOpts,
-                               srcOffsets: opts ? opts.srcOffsets : undefined,
-                               // processContentInPipeline has no error 
callback :(
-                               documentCB: function(dom) { cb(null, dom); },
-                       }
-               );
+               Util.processContentInPipeline(env, frame, content, {
+                       pipelineType: opts.pipelineType,
+                       pipelineOpts: opts.pipelineOpts,
+                       srcOffsets: opts ? opts.srcOffsets : undefined,
+                       // processContentInPipeline has no error callback :(
+                       documentCB: function(dom) { cb(null, dom); },
+               });
                return cb.promise;
        },
 
@@ -1147,11 +1143,11 @@
         */
        expandValuesToDOM: function(env, frame, vals, wrapTemplates, finalCB) {
                if (!DU) { DU = require('./DOMUtils.js').DOMUtils; }
-               var self = this;
                async.map(vals, function(v, cb) {
                        if (Array.isArray(v.html)) {
                                // Set up pipeline options
                                var opts = {
+                                       pipelineType: 
'tokens/x-mediawiki/expanded',
                                        pipelineOpts: {
                                                attrExpansion: true,
                                                noPWrapping: true,
@@ -1159,15 +1155,20 @@
                                                wrapTemplates: wrapTemplates,
                                        },
                                };
-                               self._processTokensToDOM(env, frame, v.html, 
opts, function(err, dom) {
-                                       if (!err) {
-                                               // Since we aren't at the top 
level, data attrs
-                                               // were not applied in cleanup. 
 However, tmp
-                                               // was stripped.
-                                               v.html = DU.ppToXML(dom.body, { 
innerXML: true });
-                                       }
-                                       cb(err, v);
-                               });
+                               var content = v.html.concat([new pd.EOFTk()]);
+                               Util.promiseToProcessContent(env, frame, 
content, opts)
+                               .then(function(dom) {
+                                       // Since we aren't at the top level, 
data attrs
+                                       // were not applied in cleanup.  
However, tmp
+                                       // was stripped.
+                                       v.html = DU.ppToXML(dom.body, { 
innerXML: true });
+                                       return v;
+                               })
+                               .catch(function(err) {
+                                       env.log('error', 'Expanding values to 
DOM', err);
+                                       return v;
+                               })
+                               .nodify(cb);
                        } else {
                                cb(null, v);
                        }
diff --git a/tests/parserTests-blacklist.js b/tests/parserTests-blacklist.js
index b823780..49d01a1 100644
--- a/tests/parserTests-blacklist.js
+++ b/tests/parserTests-blacklist.js
@@ -109,7 +109,7 @@
 add("wt2html", "Template with invalid target containing wikilink", "<p 
data-parsoid='{\"dsr\":[0,17,0,0]}'>{{<a rel=\"mw:WikiLink\" 
href=\"./Main_Page\" title=\"Main Page\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Main_Page\"},\"sa\":{\"href\":\"Main
 Page\"},\"dsr\":[2,15,2,2]}'>Main Page</a>}}</p>");
 add("wt2html", "Template with complex arguments", "<p 
data-parsoid='{\"dsr\":[0,106,0,0]}'><a rel=\"mw:WikiLink\" 
href=\"./Template:Complextemplate\" title=\"Template:Complextemplate\" 
about=\"#mwt1\" typeof=\"mw:Transclusion\" 
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\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"complextemplate\",\"href\":\"./Template:Complextemplate\"},\"params\":{\"1\":{\"wt\":\"[[Template:complextemplate|link]]\"},\"param\":{\"wt\":\"{{
 templateasargtest  |\\n templ = simple }}\"}},\"i\":0}}]}'>link</a><span 
about=\"#mwt1\"> This is a test template with parameter (test)</span></p>");
 add("wt2html", "Template infinite loop", "<span about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,9,null,null],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"loop1\",\"href\":\"./Template:Loop1\"},\"params\":{},\"i\":0}}]}'></span>");
-add("wt2html", "Template with targets containing wikilinks", "<p 
data-parsoid='{\"dsr\":[0,11,0,0]}'>{{<a rel=\"mw:WikiLink\" href=\"./Foo\" 
title=\"Foo\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"foo\"},\"dsr\":[2,9,2,2]}'>foo</a>}}</p>\n\n<p
 data-parsoid='{\"dsr\":[13,33,0,0]}'>{{<a typeof=\"mw:ExpandedAttrs\" 
about=\"#mwt4\" rel=\"mw:WikiLink\" href=\"./Foo\" title=\"Foo\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"{{echo|foo}}\"},\"dsr\":[15,31,null,null]}'
 data-mw='{\"attribs\":[[{\"txt\":\"href\"},{\"html\":\"&lt;span 
about=\\\"#mwt3\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=&#39;{\\\"pi\\\":[[{\\\"k\\\":\\\"1\\\"}]],\\\"dsr\\\":[17,29,null,null]}&#39;
 
data-mw=&#39;{\\\"parts\\\":[{\\\"template\\\":{\\\"target\\\":{\\\"wt\\\":\\\"echo\\\",\\\"href\\\":\\\"./Template:Echo\\\"},\\\"params\\\":{\\\"1\\\":{\\\"wt\\\":\\\"foo\\\"}},\\\"i\\\":0}}]}&#39;>foo&lt;/span>\"}]]}'>foo</a>}}</p>\n\n<p
 data-parsoid='{\"dsr\":[35,55,0,0]}'>{{<span about=\"#mwt6\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[37,51,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"[[foo\"}},\"i\":0}}]}'>[[foo</span>]]}}</p>");
+add("wt2html", "Template with targets containing wikilinks", "<p 
data-parsoid='{\"dsr\":[0,11,0,0]}'>{{<a rel=\"mw:WikiLink\" href=\"./Foo\" 
title=\"Foo\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"foo\"},\"dsr\":[2,9,2,2]}'>foo</a>}}</p>\n\n<p
 data-parsoid='{\"dsr\":[13,33,0,0]}'>{{<a typeof=\"mw:ExpandedAttrs\" 
about=\"#mwt6\" rel=\"mw:WikiLink\" href=\"./Foo\" title=\"Foo\" 
data-parsoid='{\"stx\":\"simple\",\"a\":{\"href\":\"./Foo\"},\"sa\":{\"href\":\"{{echo|foo}}\"},\"dsr\":[15,31,null,null]}'
 data-mw='{\"attribs\":[[{\"txt\":\"href\"},{\"html\":\"&lt;span 
about=\\\"#mwt3\\\" typeof=\\\"mw:Transclusion\\\" 
data-parsoid=&#39;{\\\"pi\\\":[[{\\\"k\\\":\\\"1\\\"}]],\\\"dsr\\\":[17,29,null,null]}&#39;
 
data-mw=&#39;{\\\"parts\\\":[{\\\"template\\\":{\\\"target\\\":{\\\"wt\\\":\\\"echo\\\",\\\"href\\\":\\\"./Template:Echo\\\"},\\\"params\\\":{\\\"1\\\":{\\\"wt\\\":\\\"foo\\\"}},\\\"i\\\":0}}]}&#39;>foo&lt;/span>\"}]]}'>foo</a>}}</p>\n\n<p
 data-parsoid='{\"dsr\":[35,55,0,0]}'>{{<span about=\"#mwt5\" 
typeof=\"mw:Transclusion\" 
data-parsoid='{\"pi\":[[{\"k\":\"1\"}]],\"dsr\":[37,51,null,null]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"[[foo\"}},\"i\":0}}]}'>[[foo</span>]]}}</p>");
 add("wt2html", "int keyword", "<p about=\"#mwt1\" typeof=\"mw:Transclusion\" 
data-parsoid='{\"dsr\":[0,45,0,0],\"pi\":[[{\"k\":\"1\"},{\"k\":\"2\"}]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"int:youhavenewmessages\",\"function\":\"int\"},\"params\":{\"1\":{\"wt\":\"lots
 of money\"},\"2\":{\"wt\":\"not!\"}},\"i\":0}}]}'>Parser function 
implementation for pf_int missing in Parsoid.</p>");
 add("wt2html", "int keyword - non-existing message", "<p about=\"#mwt1\" 
typeof=\"mw:Transclusion\" data-parsoid='{\"dsr\":[0,11,0,0],\"pi\":[[]]}' 
data-mw='{\"parts\":[{\"template\":{\"target\":{\"wt\":\"int:var\",\"function\":\"int\"},\"params\":{},\"i\":0}}]}'>Parser
 function implementation for pf_int missing in Parsoid.</p>");
 add("wt2html", "Self-closed noinclude, includeonly, onlyinclude tags", "<meta 
typeof=\"mw:Includes/NoInclude\" data-parsoid='{\"src\":\"&lt;noinclude 
/>\",\"dsr\":[0,13,null,null]}'/>\n<meta typeof=\"mw:Includes/IncludeOnly\" 
data-parsoid='{\"src\":\"&lt;includeonly 
/>\",\"dsr\":[14,29,null,null]}'/>\n<meta typeof=\"mw:Includes/OnlyInclude\" 
data-parsoid='{\"src\":\"&lt;onlyinclude />\",\"dsr\":[30,45,null,null]}'/>");

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibed37f4917310634895b4d6800b5c47343cf5257
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