Arlolra has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/386459 )
Change subject: Remove unnecesasry serialize/parse of references content
......................................................................
Remove unnecesasry serialize/parse of references content
Change-Id: I4bb44573fe7203277d51e804a4a6423100a34f03
---
M lib/ext/Cite/index.js
M lib/ext/Gallery/index.js
M lib/utils/DOMUtils.js
M lib/wt2html/tt/DOMFragmentBuilder.js
M lib/wt2html/tt/LinkHandler.js
M lib/wt2html/tt/TemplateHandler.js
M tests/parserTestsParserHook.js
7 files changed, 31 insertions(+), 20 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid
refs/changes/59/386459/1
diff --git a/lib/ext/Cite/index.js b/lib/ext/Cite/index.js
index 72c7f5c..61b3add 100644
--- a/lib/ext/Cite/index.js
+++ b/lib/ext/Cite/index.js
@@ -323,14 +323,21 @@
// Emit a marker mw:DOMFragment for the references
// token so that the dom post processor can generate
// and emit references at this point in the DOM.
- var emitReferencesFragment = function(toks, refsBody) {
- var dummyOl = dummyDoc.createElement('ol');
- DU.addAttributes(dummyOl, {
+ var emitReferencesFragment = function(toks, body) {
+ var ol;
+ if (body) {
+ ol = body.ownerDocument.createElement('ol');
+ DU.migrateChildren(body, ol);
+ } else {
+ ol = dummyDoc.createElement('ol');
+ body = dummyDoc.createElement('body');
+ }
+ body.appendChild(ol);
+ DU.addAttributes(ol, {
'class': 'mw-references references',
typeof: 'mw:Extension/references',
about: referencesId,
});
- dummyOl.innerHTML = refsBody || '';
var olProcessor = function(ol) {
var dp = DU.getDataParsoid(ol);
dp.src = refsTok.getAttribute('source');
@@ -346,7 +353,7 @@
tokens: DU.buildDOMFragmentTokens(
manager.env,
refsTok,
- dummyOl.outerHTML,
+ body,
olProcessor,
// The <ol> HTML above is wrapper HTML added on
and doesn't
// have any DSR on it. We want DSR added to it.
@@ -373,7 +380,7 @@
emptyContentCB: emitReferencesFragment,
endCB: emitReferencesFragment,
documentCB: function(refsDoc) {
- emitReferencesFragment([], DU.ppToXML(refsDoc.body, {
innerXML: true }));
+ emitReferencesFragment([], refsDoc.body);
},
});
};
diff --git a/lib/ext/Gallery/index.js b/lib/ext/Gallery/index.js
index 6cdef35..6687985 100644
--- a/lib/ext/Gallery/index.js
+++ b/lib/ext/Gallery/index.js
@@ -231,7 +231,7 @@
src: dataAttribs.src,
});
};
- var tokens = DU.buildDOMFragmentTokens(env, extToken, doc,
addAttrs, {
+ var tokens = DU.buildDOMFragmentTokens(env, extToken, doc.body,
addAttrs, {
isForeignContent: true, setDSR: true,
});
cb({ tokens: tokens });
diff --git a/lib/utils/DOMUtils.js b/lib/utils/DOMUtils.js
index 7d7407f..db8d74f 100644
--- a/lib/utils/DOMUtils.js
+++ b/lib/utils/DOMUtils.js
@@ -1965,8 +1965,8 @@
* @param {Token} token
* The token that generated the DOM.
*
- * @param {Node|String} docOrHTML
- * The DOM (or HTML string) that the token expanded to.
+ * @param {Node} body
+ * The DOM that the token expanded to.
*
* @param {Function} addAttrsCB
* Callback that adds additional attributes to the generated tokens.
@@ -1975,14 +1975,10 @@
* Options to be passed onto the encapsulation code
* See encapsulateExpansionHTML's doc. for more info about these
options.
*/
- buildDOMFragmentTokens: function(env, token, docOrHTML, addAttrsCB,
opts) {
- var body, nodes;
- if (docOrHTML.constructor === String) {
- body = DU.ppToDOM(docOrHTML);
- } else {
- body = docOrHTML.body;
- }
+ buildDOMFragmentTokens: function(env, token, body, addAttrsCB, opts) {
+ console.assert(DU.isBody(body), 'DOMFragment expected body
node.');
+ var nodes;
if (body.hasChildNodes()) {
nodes = body.childNodes;
} else {
diff --git a/lib/wt2html/tt/DOMFragmentBuilder.js
b/lib/wt2html/tt/DOMFragmentBuilder.js
index 432782d..2c1cb90 100644
--- a/lib/wt2html/tt/DOMFragmentBuilder.js
+++ b/lib/wt2html/tt/DOMFragmentBuilder.js
@@ -100,7 +100,7 @@
DOMFragmentBuilder.prototype.wrapDOMFragment = function(cb, scopeToken, opts,
dom) {
// Pass through pipeline options
- var toks = DU.buildDOMFragmentTokens(this.manager.env, scopeToken, dom,
false, opts);
+ var toks = DU.buildDOMFragmentTokens(this.manager.env, scopeToken,
dom.body, false, opts);
// Nothing more to send cb after this
cb({ tokens: toks, async: false });
diff --git a/lib/wt2html/tt/LinkHandler.js b/lib/wt2html/tt/LinkHandler.js
index 36a2b99..691026e 100644
--- a/lib/wt2html/tt/LinkHandler.js
+++ b/lib/wt2html/tt/LinkHandler.js
@@ -245,7 +245,13 @@
tsr = null;
}
- tokens = tokens.concat(DU.buildDOMFragmentTokens(env,
token, html, null, { noPWrapping: true, tsr: tsr }));
+ var body = DU.ppToDOM(html);
+ var dft = DU.buildDOMFragmentTokens(env, token, body,
null, {
+ noPWrapping: true,
+ tsr: tsr,
+ });
+
+ tokens = tokens.concat(dft);
} else {
// FIXME: Duplicate work
tokens[0] +=
Util.tokensToString(token.getAttribute("href"));
diff --git a/lib/wt2html/tt/TemplateHandler.js
b/lib/wt2html/tt/TemplateHandler.js
index ed07943..568dc55 100644
--- a/lib/wt2html/tt/TemplateHandler.js
+++ b/lib/wt2html/tt/TemplateHandler.js
@@ -1068,7 +1068,7 @@
var toks = DU.buildDOMFragmentTokens(
this.manager.env,
state.token,
- doc,
+ doc.body,
addWrapperAttrs,
{ setDSR: state.token.name === 'extension', isForeignContent:
true }
);
diff --git a/tests/parserTestsParserHook.js b/tests/parserTestsParserHook.js
index 180a6ef..5531cf8 100644
--- a/tests/parserTestsParserHook.js
+++ b/tests/parserTestsParserHook.js
@@ -24,8 +24,10 @@
});
};
+ var body = DU.ppToDOM(html);
+
var tokens = DU.buildDOMFragmentTokens(
- env, extToken, html, addWrapperAttrs,
+ env, extToken, body, addWrapperAttrs,
{ setDSR: true, isForeignContent: true }
);
--
To view, visit https://gerrit.wikimedia.org/r/386459
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4bb44573fe7203277d51e804a4a6423100a34f03
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits