Subramanya Sastry has uploaded a new change for review.
https://gerrit.wikimedia.org/r/179783
Change subject: Get rid of 'env' from DOMUtil.helpers and dependent call chain
......................................................................
Get rid of 'env' from DOMUtil.helpers and dependent call chain
* Moved aboutId tests from the MWEnvironment object to Util
to eliminate unnecessary dependency on the env object in
various helpers.
* This lets me remove env from a whole bunch of dependent calls
and in a future patch, will let me tweak the isNewElt helper
without needing to pass the env object from everywhere.
Change-Id: Ia855f9e56ce58d87539682454c47fc6cb6306336
---
M lib/dom.cleanUpTemplates.js
M lib/dom.cleanup.js
M lib/dom.linter.js
M lib/dom.markFosteredContent.js
M lib/dom.markTreeBuilderFixups.js
M lib/dom.t.handleLinkNeighbours.js
M lib/dom.wrapTemplates.js
M lib/mediawiki.DOMDiff.js
M lib/mediawiki.DOMUtils.js
M lib/mediawiki.Util.js
M lib/mediawiki.parser.environment.js
M tests/domdiff.test.js
M tests/parserTests.js
13 files changed, 36 insertions(+), 37 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid
refs/changes/83/179783/1
diff --git a/lib/dom.cleanUpTemplates.js b/lib/dom.cleanUpTemplates.js
index 168a5ea..26bdbd2 100644
--- a/lib/dom.cleanUpTemplates.js
+++ b/lib/dom.cleanUpTemplates.js
@@ -2,7 +2,7 @@
var DU = require('./mediawiki.DOMUtils.js').DOMUtils;
-function stripEmptyElements(node, tplInfo, env, options) {
+function stripEmptyElements(node, tplInfo, options) {
// Cannot delete if:
// * it is the first node since that carries the transclusion
// information (typeof, data-mw). We could delete and migrate
@@ -16,7 +16,7 @@
}
}
-function removeDataParsoid(node, tplInfo, env, options) {
+function removeDataParsoid(node, tplInfo, options) {
if (node !== tplInfo.first) {
// TODO: We can't remove dp from nodes with stx information
// right now, as the serializer needs that information to know
which
diff --git a/lib/dom.cleanup.js b/lib/dom.cleanup.js
index 11c5ba3..dc170ca 100644
--- a/lib/dom.cleanup.js
+++ b/lib/dom.cleanup.js
@@ -43,7 +43,7 @@
// Delete empty auto-inserted elements
var next = node.nextSibling;
if (dp.autoInsertedStart && dp.autoInsertedEnd &&
- !DU.isTplOrExtToplevelNode(env, node) &&
+ !DU.isTplOrExtToplevelNode(node) &&
(node.childNodes.length === 0 ||
node.childNodes.length === 1 &&
!DU.isElt(node.firstChild) && /^\s*$/.test(node.textContent)))
{
diff --git a/lib/dom.linter.js b/lib/dom.linter.js
index 2700b4d..96d0470 100644
--- a/lib/dom.linter.js
+++ b/lib/dom.linter.js
@@ -87,7 +87,7 @@
// 1. c is a void element
// 2. c is not self-closed
// 3. c is not tbody
- if ( DU.isTplOrExtToplevelNode(env, c) ||
+ if ( DU.isTplOrExtToplevelNode(c) ||
(!Util.isVoidElement(cNodeName) &&
!dp.selfClose &&
cNodeName !== 'tbody' &&
@@ -258,7 +258,7 @@
// Store info from the first node of an about id group.
// Nested templates aren't an issue because we expand top-level
// templates with the mediawiki api.
- if ( !tmpl && DU.isTplOrExtToplevelNode(env, c) ) {
+ if ( !tmpl && DU.isTplOrExtToplevelNode(c) ) {
var about = c.getAttribute('about');
tmpl = {
last: DU.getAboutSiblings(c, about).last(),
diff --git a/lib/dom.markFosteredContent.js b/lib/dom.markFosteredContent.js
index 7522674..98ece7c 100644
--- a/lib/dom.markFosteredContent.js
+++ b/lib/dom.markFosteredContent.js
@@ -67,7 +67,7 @@
// between so keep track of that, and backtrack when necessary.
while ( sibling ) {
if ( !DU.isTplStartMarkerMeta( sibling ) && (
- DU.isTplOrExtToplevelNode( env, sibling ) ||
+ DU.isTplOrExtToplevelNode( sibling ) ||
DU.isMarkerMeta( sibling, "mw:EndTag" ) ||
DU.isMarkerMeta( sibling, "mw:TransclusionShadow" )
)) {
diff --git a/lib/dom.markTreeBuilderFixups.js b/lib/dom.markTreeBuilderFixups.js
index 12a37f7..56a6bf2 100644
--- a/lib/dom.markTreeBuilderFixups.js
+++ b/lib/dom.markTreeBuilderFixups.js
@@ -165,7 +165,7 @@
while (c !== null) {
// Skip over template/extension content
- if (DU.isTplOrExtToplevelNode( env, node )) {
+ if (DU.isTplOrExtToplevelNode( node )) {
var about = node.getAttribute( 'about' );
c = c.nextSibling;
while (c && node.getAttribute('about') === about) {
diff --git a/lib/dom.t.handleLinkNeighbours.js
b/lib/dom.t.handleLinkNeighbours.js
index e038620..b87f22f 100644
--- a/lib/dom.t.handleLinkNeighbours.js
+++ b/lib/dom.t.handleLinkNeighbours.js
@@ -18,7 +18,7 @@
return null;
}
- if ( node !== null && DU.isTplOrExtToplevelNode( env, node ) ) {
+ if ( node !== null && DU.isTplOrExtToplevelNode( node ) ) {
baseAbout = node.getAttribute( 'about' );
}
@@ -37,7 +37,7 @@
return null;
}
- if ( node !== null && DU.isTplOrExtToplevelNode( env, node ) ) {
+ if ( node !== null && DU.isTplOrExtToplevelNode( node ) ) {
baseAbout = node.getAttribute( 'about' );
}
@@ -77,7 +77,7 @@
value.content = null;
break;
}
- } else if ( DU.isTplOrExtToplevelNode( env, node ) &&
+ } else if ( DU.isTplOrExtToplevelNode( node ) &&
baseAbout !== '' && baseAbout !== null &&
node.getAttribute( 'about' ) === baseAbout ) {
value = getInnerNeighbour( env, node[innerNode] );
@@ -155,7 +155,7 @@
if ( trail.src.length > 0 ) {
dp.tail = trail.src;
var about = node.getAttribute('about');
- if ( DU.isTplOrExtToplevelNode( env, node ) &&
+ if ( DU.isTplOrExtToplevelNode( node ) &&
DU.getAboutSiblings( node, about ).length === 1
) {
// search back for the first wrapper but
diff --git a/lib/dom.wrapTemplates.js b/lib/dom.wrapTemplates.js
index e2a93bc..f4bd8e9 100644
--- a/lib/dom.wrapTemplates.js
+++ b/lib/dom.wrapTemplates.js
@@ -130,7 +130,7 @@
var range = {
startElem: startElem,
endElem: endMeta,
- id: env.stripIdPrefix(startElem.getAttribute("about")),
+ id: Util.stripParsoidIdPrefix(startElem.getAttribute("about")),
startOffset: DU.getDataParsoid( startElem ).tsr[0],
flipped: false
};
diff --git a/lib/mediawiki.DOMDiff.js b/lib/mediawiki.DOMDiff.js
index 7c923bd..76939f7 100644
--- a/lib/mediawiki.DOMDiff.js
+++ b/lib/mediawiki.DOMDiff.js
@@ -159,8 +159,8 @@
}
};
-function nextNonTemplateSibling(env, node) {
- return DU.isTplOrExtToplevelNode(env, node) ?
DU.skipOverEncapsulatedContent(node) : node.nextSibling;
+function nextNonTemplateSibling(node) {
+ return DU.isTplOrExtToplevelNode(node) ?
DU.skipOverEncapsulatedContent(node) : node.nextSibling;
}
/**
@@ -232,7 +232,7 @@
newNode = lookaheadNode;
break;
}
- lookaheadNode =
nextNonTemplateSibling(this.env, lookaheadNode);
+ lookaheadNode =
nextNonTemplateSibling(lookaheadNode);
}
}
@@ -260,7 +260,7 @@
// between block nodes).
isBlockNode =
DU.isBlockNodeWithVisibleWT(lookaheadNode);
}
- lookaheadNode =
nextNonTemplateSibling(this.env, lookaheadNode);
+ lookaheadNode =
nextNonTemplateSibling(lookaheadNode);
}
}
@@ -275,8 +275,8 @@
// Mark as modified, and recurse.
this.debug("--found diff:
modified-wrapper--");
this.markNode(savedNewNode,
'modified-wrapper');
- if
(!DU.isTplOrExtToplevelNode(this.env, baseNode) &&
-
!DU.isTplOrExtToplevelNode(this.env, savedNewNode))
+ if
(!DU.isTplOrExtToplevelNode(baseNode) &&
+
!DU.isTplOrExtToplevelNode(savedNewNode))
{
// Dont recurse into
template-like-content
this.doDOMDiff(baseNode,
savedNewNode);
@@ -303,7 +303,7 @@
this.markNode(newParentNode, 'children-changed');
foundDiffOverall = true;
- } else if (!DU.isTplOrExtToplevelNode(this.env, baseNode) &&
!DU.isTplOrExtToplevelNode(this.env, newNode)) {
+ } else if (!DU.isTplOrExtToplevelNode(baseNode) &&
!DU.isTplOrExtToplevelNode(newNode)) {
this.debug("--shallow equal: recursing--");
// Recursively diff subtrees if not template-like
content
var subtreeDiffers = this.doDOMDiff(baseNode, newNode);
@@ -316,9 +316,9 @@
// And move on to the next pair (skipping over template HTML)
if (baseNode && newNode) {
- baseNode = nextNonTemplateSibling(this.env, baseNode);
+ baseNode = nextNonTemplateSibling(baseNode);
if (!dontAdvanceNewNode) {
- newNode = nextNonTemplateSibling(this.env,
newNode);
+ newNode = nextNonTemplateSibling(newNode);
}
}
}
@@ -328,7 +328,7 @@
this.debug("--found trailing new node: inserted--");
this.markNode(newNode, 'inserted');
foundDiffOverall = true;
- newNode = nextNonTemplateSibling(this.env, newNode);
+ newNode = nextNonTemplateSibling(newNode);
}
// If there are extra base nodes, something was deleted. Mark the
parent as
diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js
index 272ed0a..578ea81 100644
--- a/lib/mediawiki.DOMUtils.js
+++ b/lib/mediawiki.DOMUtils.js
@@ -792,10 +792,10 @@
* @param {MWParserEnvironment} env
* @param {Node} node
*/
- isTplOrExtToplevelNode: function(env, node) {
+ isTplOrExtToplevelNode: function(node) {
if (isElt(node)) {
var about = node.getAttribute('about');
- return about && env.isParsoidObjectId(about);
+ return about && Util.isParsoidObjectId(about);
} else {
return false;
}
@@ -814,7 +814,7 @@
if (DU.isElt(c)) {
// Identify template/extension content (not
interested in "mw:Param" nodes).
// We are interested in the very first node.
- if (this.isTplOrExtToplevelNode(env, c) &&
+ if (this.isTplOrExtToplevelNode(c) &&
/(^|\s)mw:(Extension|Transclusion)/.test(c.getAttribute("typeof")))
{
// We know that tplInfo will be null
here since we don't
@@ -834,7 +834,7 @@
this.traverseTplOrExtNodes(cb, c, env, options,
atTopLevel, tplInfo);
if (tplInfo) {
- cb(c, tplInfo, env, options);
+ cb(c, tplInfo, options);
// Clear tpl info
if (c === tplInfo.last || tplInfo.done)
{
diff --git a/lib/mediawiki.Util.js b/lib/mediawiki.Util.js
index af26779..f86e288 100644
--- a/lib/mediawiki.Util.js
+++ b/lib/mediawiki.Util.js
@@ -380,6 +380,14 @@
return tgt;
},
+ stripParsoidIdPrefix: function(aboutId) {
+ return aboutId.replace(/^#?mwt/, '');
+ },
+
+ isParsoidObjectId: function(aboutId) {
+ return aboutId.match(/^#mwt/);
+ },
+
/**
* Determine if a tag is block-level or not
*/
diff --git a/lib/mediawiki.parser.environment.js
b/lib/mediawiki.parser.environment.js
index 53a49d2..90ee85e 100644
--- a/lib/mediawiki.parser.environment.js
+++ b/lib/mediawiki.parser.environment.js
@@ -555,14 +555,6 @@
return "#" + this.newObjectId();
};
-MWParserEnvironment.prototype.stripIdPrefix = function(aboutId) {
- return aboutId.replace(/^#?mwt/, '');
-};
-
-MWParserEnvironment.prototype.isParsoidObjectId = function(aboutId) {
- return aboutId.match(/^#mwt/);
-};
-
if (typeof module === "object") {
module.exports.MWParserEnvironment = MWParserEnvironment;
}
diff --git a/tests/domdiff.test.js b/tests/domdiff.test.js
index 66462e6..b4daeb0 100755
--- a/tests/domdiff.test.js
+++ b/tests/domdiff.test.js
@@ -52,8 +52,7 @@
var dummyEnv = {
conf: { parsoid: { debug: Util.booleanOption( argv.debug ) }, wiki: {}
},
- page: { id: null },
- isParsoidObjectId: function() { return true; }
+ page: { id: null }
};
if (argv.debug) {
diff --git a/tests/parserTests.js b/tests/parserTests.js
index 18d1f9f..ec2546d 100755
--- a/tests/parserTests.js
+++ b/tests/parserTests.js
@@ -676,7 +676,7 @@
* Currently true for template and extension content, and for entities.
*/
function domSubtreeIsEditable(env, node) {
- return !DU.isTplOrExtToplevelNode(env, node) &&
+ return !DU.isTplOrExtToplevelNode(node) &&
!(DU.isElt(node) && node.getAttribute("typeof") ===
"mw:Entity");
}
--
To view, visit https://gerrit.wikimedia.org/r/179783
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia855f9e56ce58d87539682454c47fc6cb6306336
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits