GWicke has submitted this change and it was merged.

Change subject: WTS Code cleanup: Simplify calls to serializeChildren
......................................................................


WTS Code cleanup: Simplify calls to serializeChildren

* No change in parser test results.

Change-Id: Iabf7a6e819762fbaf75a348e51da5dd3f0978bfc
---
M js/lib/mediawiki.WikitextSerializer.js
1 file changed, 39 insertions(+), 35 deletions(-)

Approvals:
  GWicke: Verified; Looks good to me, approved



diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index 667233e..f3fbe8a 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -374,37 +374,41 @@
        // Serialize the children of a DOM node, sharing the global serializer
        // state. Typically called by a DOM-based handler to continue handling 
its
        // children.
-       serializeChildren: function(nodes, chunkCB, wtEscaper, forceSep) {
+       serializeChildren: function(node, chunkCB, wtEscaper, forceSep) {
                var oldCB = this.chunkCB,
-                       oldSep = this.sep;
+                       oldSep = this.sep,
+                       children = node.childNodes,
+                       child = children[0],
+                       nextChild;
+
                this.chunkCB = chunkCB;
                if ( wtEscaper ) {
                        this.wteHandlerStack.push(wtEscaper);
                }
-               var node = nodes[0],
-                       parentNode = node && node.parentNode,
-                       nextNode;
-               while (node) {
-                       nextNode = this.serializer._serializeNode(node, this);
-                       if (nextNode === parentNode) {
+
+               while (child) {
+                       nextChild = this.serializer._serializeNode(child, this);
+                       if (nextChild === node) {
                                // serialized all children
                                break;
-                       } else if (nextNode === node) {
+                       } else if (nextChild === child) {
                                // advance the child
-                               node = node.nextSibling;
+                               child = child.nextSibling;
                        } else {
-                               //console.log('nextNode', nextNode && 
nextNode.outerHTML);
-                               node = nextNode;
+                               //console.log('nextChild', nextChild && 
nextChild.outerHTML);
+                               child = nextChild;
                        }
                }
+
                if (forceSep && oldSep === this.sep) {
                        // Force separator out
-                       if (nodes.length) {
-                               chunkCB('', nodes.last());
+                       if (children.length) {
+                               chunkCB('', children.last());
                        } else {
                                chunkCB('', {nodeName: 'fooobar'});
                        }
                }
+
                this.chunkCB = oldCB;
                if ( wtEscaper ) {
                        this.wteHandlerStack.pop();
@@ -430,7 +434,7 @@
                                bits.push(res);
                        };
                this.sep = {};
-               this.serializeChildren(node.childNodes, cb, wtEscaper);
+               this.serializeChildren(node, cb, wtEscaper);
                self.serializer.emitSeparator(this, cb, node);
                // restore the separator state
                this.sep = sepState;
@@ -1115,7 +1119,7 @@
                handle: function(node, state, cb) {
                        cb(headingWT, node);
                        if (node.childNodes.length) {
-                               state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.headingHandler);
+                               state.serializeChildren(node, cb, 
state.serializer.wteHandlers.headingHandler);
                        } else {
                                // Deal with empty headings
                                cb('<nowiki/>', node);
@@ -1282,7 +1286,7 @@
                                cb(state.serializer._getListBullets(node), 
node);
                        }
                        // Just serialize the children, ignore the (implicit) 
tbody
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.liHandler, true);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.liHandler, true);
                },
                sepnls: {
                        before: function (node, otherNode) {
@@ -1312,7 +1316,7 @@
                                cb(state.serializer._getListBullets(node), 
node);
                                forceSep = true;
                        }
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.liHandler, forceSep);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.liHandler, forceSep);
                },
                sepnls: {
                        before: function (node, otherNode) {
@@ -1341,7 +1345,7 @@
                        if (!DU.isList(firstChildElement)) {
                                cb(state.serializer._getListBullets(node), 
node);
                        }
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.liHandler);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.liHandler);
                },
                sepnls: {
                        before: id({min:1, max:2}),
@@ -1375,7 +1379,7 @@
                                }
                                forceSep = true;
                        }
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.liHandler, forceSep);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.liHandler, forceSep);
                },
                sepnls: {
                        before: function(node, othernode) {
@@ -1403,7 +1407,7 @@
                handle: function (node, state, cb) {
                        var wt = node.data.parsoid.startTagSrc || "{|";
                        cb(state.serializer._serializeTableTag(wt, '', state, 
DU.mkTagTk(node)), node);
-                       state.serializeChildren(node.childNodes, cb);
+                       state.serializeChildren(node, cb);
                        emitEndTag(node.data.parsoid.endTagSrc || "|}", node, 
state, cb);
                },
                sepnls: {
@@ -1423,7 +1427,7 @@
        tbody: {
                handle: function (node, state, cb) {
                        // Just serialize the children, ignore the (implicit) 
tbody
-                       state.serializeChildren(node.childNodes, cb);
+                       state.serializeChildren(node, cb);
                }
        },
        tr: {
@@ -1436,7 +1440,7 @@
                                                        DU.mkTagTk(node) );
                                emitStartTag(res, node, state, cb);
                        }
-                       state.serializeChildren(node.childNodes, cb);
+                       state.serializeChildren(node, cb);
                },
                sepnls: {
                        before: function(node, othernode) {
@@ -1463,7 +1467,7 @@
                                                state, DU.mkTagTk(node));
                        }
                        emitStartTag(res, node, state, cb);
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.thHandler);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.thHandler);
                },
                sepnls: {
                        before: function(node, otherNode) {
@@ -1496,7 +1500,7 @@
                        }
                        emitStartTag(res, node, state, cb);
                        state.resetCurrLine();
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.tdHandler);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.tdHandler);
                        // FIXME: bad state hack!
                        state.inWideTD = undefined;
                },
@@ -1519,7 +1523,7 @@
                        var res = state.serializer._serializeTableTag(
                                        dp.startTagSrc || "|+", null, state, 
DU.mkTagTk(node));
                        emitStartTag(res, node, state, cb);
-                       state.serializeChildren(node.childNodes, cb);
+                       state.serializeChildren(node, cb);
                },
                sepnls: {
                        before: function(node, otherNode) {
@@ -1539,7 +1543,7 @@
                        if (state.sep.src && state.sep.src.match(/[ \t]$/)) {
                                state.sep.src = state.sep.src.replace(/[ 
\t]+$/, '');
                        }
-                       state.serializeChildren(node.childNodes, cb, null, 
true);
+                       state.serializeChildren(node, cb, null, true);
                },
                sepnls: {
                        before: function(node, otherNode) {
@@ -1723,7 +1727,7 @@
                                if (type === 'mw:Nowiki') {
                                        cb('<nowiki>', node);
                                        if (node.childNodes.length === 1 && 
node.firstChild.nodeName === 'PRE') {
-                                               
state.serializeChildren(node.childNodes, cb);
+                                               state.serializeChildren(node, 
cb);
                                        } else {
                                                var child = node.firstChild;
                                                while(child) {
@@ -1731,14 +1735,14 @@
                                                                if 
(child.nodeName === 'SPAN' &&
                                                                                
child.getAttribute('typeof') === 'mw:Entity')
                                                                {
-                                                                       
state.serializeChildren([child], cb);
+                                                                       
state.serializer._serializeNode(child, state, cb);
                                                                } else {
                                                                        
cb(child.outerHTML, node);
                                                                }
                                                        } else if 
(child.nodeType === node.TEXT_NODE) {
                                                                
cb(child.nodeValue.replace(/<(\/?nowiki)>/g, '&lt;$1&gt;'), child);
                                                        } else {
-                                                               
state.serializeChildren([child], cb);
+                                                               
state.serializer._serializeNode(child, state, cb);
                                                        }
                                                        child = 
child.nextSibling;
                                                }
@@ -1831,7 +1835,7 @@
                                emitStartTag('<nowiki/>', node, state, cb);
                        }
                        emitStartTag("'''", node, state, cb);
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.quoteHandler);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.quoteHandler);
                        emitEndTag("'''", node, state, cb);
                }
        },
@@ -1841,7 +1845,7 @@
                                emitStartTag('<nowiki/>', node, state, cb);
                        }
                        emitStartTag("''", node, state, cb);
-                       state.serializeChildren(node.childNodes, cb, 
state.serializer.wteHandlers.quoteHandler);
+                       state.serializeChildren(node, cb, 
state.serializer.wteHandlers.quoteHandler);
                        emitEndTag("''", node, state, cb);
                }
        },
@@ -1859,7 +1863,7 @@
        body: {
                handle: function(node, state, cb) {
                        // Just serialize the children
-                       state.serializeChildren(node.childNodes, cb);
+                       state.serializeChildren(node, cb);
                },
                sepnls: {
                        firstChild: id({min:0, max:1}),
@@ -2007,7 +2011,7 @@
                if (Util.tagOpensBlockScope(node.nodeName.toLowerCase())) {
                        state.inPHPBlock = true;
                }
-               state.serializeChildren(node.childNodes, cb);
+               state.serializeChildren(node, cb);
                state.inPHPBlock = inPHPBlock;
        }
        emitEndTag(this._serializeHTMLEndTag(state, DU.mkEndTagTk(node)),
@@ -2968,7 +2972,7 @@
                        // FIXME: Do we need this fallback at all?
                        this._serializeNode( body, state );
                } else {
-                       state.serializeChildren(body.childNodes, state.chunkCB);
+                       state.serializeChildren(body, state.chunkCB);
                }
 
                // Handle EOF

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Iabf7a6e819762fbaf75a348e51da5dd3f0978bfc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to