C. Scott Ananian has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/351669 )
Change subject: Refactor TemplateHandler to improve commonality of native and PHP expansion. ...................................................................... Refactor TemplateHandler to improve commonality of native and PHP expansion. Change-Id: I5e2a52ef1248f06e0b69172c84cfa71c6ecb5a75 --- M lib/wt2html/tt/TemplateHandler.js 1 file changed, 41 insertions(+), 42 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid refs/changes/69/351669/1 diff --git a/lib/wt2html/tt/TemplateHandler.js b/lib/wt2html/tt/TemplateHandler.js index 858f553..333de90 100644 --- a/lib/wt2html/tt/TemplateHandler.js +++ b/lib/wt2html/tt/TemplateHandler.js @@ -125,6 +125,30 @@ var accumReceiveToksFromSibling; var accumReceiveToksFromChild; + var templateName; + + if (this.options.wrapTemplates) { + templateName = tgt.target; + // We still need to check for loops and depth limit violations + // because of the higher precedence of extension tags, which can + // result in nested templates even while using the php preprocessor + // for expansion. + var checkRes = tgt && this.checkRes(templateName); + if (Array.isArray(checkRes)) { + cb({ tokens: checkRes }); + return; + } + // Check if we have an expansion for this template in the cache + // already + var cachedTransclusion = env.transclusionCache[text]; + if (cachedTransclusion) { + // cache hit: reuse the expansion DOM + var opts = { setDSR: true, isForeignContent: true }; + toks = DU.encapsulateExpansionHTML(env, token, cachedTransclusion, opts); + cb({ tokens: toks }); + return; + } + } if (env.conf.parsoid.usePHPPreProcessor) { if (this.options.wrapTemplates) { @@ -138,48 +162,25 @@ // It's sufficient to pass `[]` in place of attribs since they // won't be used. In `usePHPPreProcessor`, there is no parameter // substitution coming from the frame. - - var templateName = tgt.target; var attribs = []; - // We still need to check for loops and depth limit violations - // because of the higher precedence of extension tags, which can - // result in nested templates even while using the php preprocessor - // for expansion. - var checkRes = this.checkRes(templateName); - if (Array.isArray(checkRes)) { - cb({ tokens: checkRes }); - return; - } + // Use a TokenAccumulator to divide the template processing + // in two parts: The child part will take care of the main + // template element (including parameters) and the sibling + // will process the returned template expansion + state.accum = new TokenAccumulator(this.manager, cb); + accumReceiveToksFromSibling = state.accum.receiveToksFromSibling.bind(state.accum); + accumReceiveToksFromChild = state.accum.receiveToksFromChild.bind(state.accum); + var srcHandler = state.srcCB.bind( + this, state, frame, + accumReceiveToksFromSibling, + { name: templateName, attribs: attribs, cacheKey: text }); - // Check if we have an expansion for this template in the cache - // already - var cachedTransclusion = env.transclusionCache[text]; - if (cachedTransclusion) { - // cache hit: reuse the expansion DOM - var opts = { setDSR: true, isForeignContent: true }; - toks = DU.encapsulateExpansionHTML(env, token, cachedTransclusion, opts); - cb({ tokens: toks }); - } else { - // Use a TokenAccumulator to divide the template processing - // in two parts: The child part will take care of the main - // template element (including parameters) and the sibling - // will process the returned template expansion - state.accum = new TokenAccumulator(this.manager, cb); - accumReceiveToksFromSibling = state.accum.receiveToksFromSibling.bind(state.accum); - accumReceiveToksFromChild = state.accum.receiveToksFromChild.bind(state.accum); - var srcHandler = state.srcCB.bind( - this, state, frame, - accumReceiveToksFromSibling, - { name: templateName, attribs: attribs, cacheKey: text }); - - // Process the main template element - this._encapsulateTemplate(state, - accumReceiveToksFromChild); - // Fetch and process the template expansion - this.fetchExpandedTpl(env.page.name || '', - text, accumReceiveToksFromSibling, srcHandler); - } + // Process the main template element + this._encapsulateTemplate(state, accumReceiveToksFromChild); + // Fetch and process the template expansion + this.fetchExpandedTpl(env.page.name || '', + text, accumReceiveToksFromSibling, srcHandler); } else { // We don't perform recursive template expansion- something // template-like that the PHP parser did not expand. This is @@ -201,10 +202,8 @@ // console.warn("onTemplate created TA-" + state.accum.uid); accumReceiveToksFromSibling = state.accum.receiveToksFromSibling.bind(state.accum); accumReceiveToksFromChild = state.accum.receiveToksFromChild.bind(state.accum); - // Process the main template element - this._encapsulateTemplate(state, - state.accum.receiveToksFromChild.bind(state.accum)); + this._encapsulateTemplate(state, accumReceiveToksFromChild); } else { // Don't wrap templates, so we don't need to use the // TokenAccumulator and can return the expansion directly -- To view, visit https://gerrit.wikimedia.org/r/351669 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5e2a52ef1248f06e0b69172c84cfa71c6ecb5a75 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/services/parsoid Gerrit-Branch: master Gerrit-Owner: C. Scott Ananian <canan...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits