Arlolra has uploaded a new change for review.

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

Change subject: Only pass document.body to the post-processors
......................................................................

Only pass document.body to the post-processors

Change-Id: I8cee994079579d922da97a4c1c793540bfd8d1b1
---
M lib/dom.computeDSR.js
M lib/dom.dumper.js
M lib/dom.handlePres.js
M lib/dom.markTreeBuilderFixups.js
M lib/dom.migrateTrailingNLs.js
M lib/dom.wrapTemplates.js
M lib/ext.Cite.js
M lib/ext.core.LinkHandler.js
M lib/mediawiki.DOMPostProcessor.js
M lib/mediawiki.DOMUtils.js
M lib/mediawiki.HTML5TreeBuilder.node.js
M lib/mediawiki.WikitextSerializer.js
M tests/parse.js
M tests/parserTests.js
14 files changed, 42 insertions(+), 46 deletions(-)


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

diff --git a/lib/dom.computeDSR.js b/lib/dom.computeDSR.js
index ec2d603..32c9989 100644
--- a/lib/dom.computeDSR.js
+++ b/lib/dom.computeDSR.js
@@ -586,11 +586,10 @@
        if (traceDSR) { console.warn("------- tracing DSR computation 
-------"); }
 
        // The actual computation buried in trace/debug stmts.
-       var body = root.body,
-               opts = { traceDSR: traceDSR, attrExpansion: 
options.attrExpansion };
-       computeNodeDSR(env, body, startOffset, endOffset, 0, opts);
+       var opts = { traceDSR: traceDSR, attrExpansion: options.attrExpansion };
+       computeNodeDSR(env, root, startOffset, endOffset, 0, opts);
 
-       var dp = DU.getDataParsoid( body );
+       var dp = DU.getDataParsoid( root );
        dp.dsr = [startOffset, endOffset, 0, 0];
 
        if (traceDSR) { console.warn("------- done tracing DSR computation 
-------"); }
diff --git a/lib/dom.dumper.js b/lib/dom.dumper.js
index 99fb0e8..39645c1 100644
--- a/lib/dom.dumper.js
+++ b/lib/dom.dumper.js
@@ -27,12 +27,10 @@
                }
        }
 
-       root = root.documentElement;
-
        // cloneNode doesn't clone data => walk DOM to clone it
        var clonedRoot = root.cloneNode( true );
        cloneData(root, clonedRoot);
-       console.warn(clonedRoot.innerHTML);
+       console.warn(clonedRoot.outerHTML);
 }
 
 if (typeof module === "object") {
diff --git a/lib/dom.handlePres.js b/lib/dom.handlePres.js
index 998b7a1..88b3d82 100644
--- a/lib/dom.handlePres.js
+++ b/lib/dom.handlePres.js
@@ -24,7 +24,8 @@
        }
 }
 
-function handlePres(document, env) {
+function handlePres(body, env) {
+       var document = body.ownerDocument;
        /* --------------------------------------------------------------
         * Block tags change the behaviour of indent-pres.  This behaviour
         * cannot be emulated till the DOM is built if we are to avoid
@@ -83,7 +84,7 @@
                }
        }
 
-       function findAndHandlePres(doc, elt, indentPresHandled) {
+       function findAndHandlePres(elt, indentPresHandled) {
                var children = elt.childNodes, n, blocklevel = false;
                for (var i = 0; i < children.length; i++) {
                        var processed = false;
@@ -128,12 +129,12 @@
                                }
                        }
 
-                       findAndHandlePres(doc, n, indentPresHandled || 
processed);
+                       findAndHandlePres(n, indentPresHandled || processed);
                }
        }
 
        // kick it off
-       findAndHandlePres(document, document.body, false);
+       findAndHandlePres(body, false);
 }
 
 if (typeof module === "object") {
diff --git a/lib/dom.markTreeBuilderFixups.js b/lib/dom.markTreeBuilderFixups.js
index 9832ab3..e9b1512 100644
--- a/lib/dom.markTreeBuilderFixups.js
+++ b/lib/dom.markTreeBuilderFixups.js
@@ -24,7 +24,7 @@
 }
 
 
-function markTreeBuilderFixups(document, env) {
+function markTreeBuilderFixups(body, env) {
        // FIXME: Move out nested functions to clarify scope etc
 
        function addPlaceholderMeta( node, dp, name, opts ) {
@@ -271,8 +271,8 @@
                }
        }
 
-       findAutoInsertedTags(document.body);
-       findDeletedStartTags(document.body);
+       findAutoInsertedTags(body);
+       findDeletedStartTags(body);
 }
 
 if (typeof module === "object") {
diff --git a/lib/dom.migrateTrailingNLs.js b/lib/dom.migrateTrailingNLs.js
index f49348d..6fab477 100644
--- a/lib/dom.migrateTrailingNLs.js
+++ b/lib/dom.migrateTrailingNLs.js
@@ -26,7 +26,7 @@
        // (3) It is the rightmost node in the DOM subtree rooted at a node
        //     that ends a line in wikitext
        function canMigrateNLOutOfNode(node) {
-               return node && (
+               return node && (node.nodeName !== "BODY") && (
                        nodeEndsLineInWT(node) ||
                        (DU.isElt(node) &&
                         DU.getDataParsoid(node).autoInsertedEnd &&
@@ -118,6 +118,12 @@
        }
 }
 
+function startAtBody(body) {
+       if ( body.childNodes.length > 0 ) {
+               migrateTrailingNLs( body.firstChild );
+       }
+}
+
 if (typeof module === "object") {
-       module.exports.migrateTrailingNLs = migrateTrailingNLs;
+       module.exports.migrateTrailingNLs = startAtBody;
 }
diff --git a/lib/dom.wrapTemplates.js b/lib/dom.wrapTemplates.js
index 506d811..a8a6ac7 100644
--- a/lib/dom.wrapTemplates.js
+++ b/lib/dom.wrapTemplates.js
@@ -817,20 +817,20 @@
  * spans and adding RDFa attributes to all subtree roots according to
  * http://www.mediawiki.org/wiki/Parsoid/RDFa_vocabulary#Template_content
  */
-function wrapTemplates( document, env, options ) {
+function wrapTemplates( body, env, options ) {
        var psd = env.conf.parsoid;
 
        if (psd.debug || (psd.dumpFlags && 
(psd.dumpFlags.indexOf("dom:pre-encap") !== -1))) {
                console.warn("------ DOM: pre-encapsulation -------");
-               dumpDOM( options, document );
+               dumpDOM( options, body );
                console.warn("----------------------------");
        }
 
-       wrapTemplatesInTree(document, env, document.body);
+       wrapTemplatesInTree(body.ownerDocument, env, body);
 
        if (psd.debug || (psd.dumpFlags && 
(psd.dumpFlags.indexOf("dom:post-encap") !== -1))) {
                console.warn("------ DOM: post-encapsulation -------");
-               dumpDOM( options, document );
+               dumpDOM( options, body );
                console.warn("----------------------------");
        }
 }
diff --git a/lib/ext.Cite.js b/lib/ext.Cite.js
index c9936cc..4243986 100644
--- a/lib/ext.Cite.js
+++ b/lib/ext.Cite.js
@@ -268,6 +268,7 @@
  * Sanitize the references tag and convert it into a meta-token
  */
 References.prototype.handleReferences = function ( manager, pipelineOpts, 
refsTok, cb ) {
+       var env = manager.env;
 
        // group is the only recognized option?
        var refsOpts = Util.KVtoHash(refsTok.getAttribute("options")),
@@ -284,7 +285,7 @@
        }
 
        // Assign an about id and intialize the nested refs html
-       var referencesId = manager.env.newAboutId();
+       var referencesId = env.newAboutId();
 
        // Emit a marker mw:DOMFragment for the references
        // token so that the dom post processor can generate
diff --git a/lib/ext.core.LinkHandler.js b/lib/ext.core.LinkHandler.js
index 837a59d..c6c46bf 100644
--- a/lib/ext.core.LinkHandler.js
+++ b/lib/ext.core.LinkHandler.js
@@ -1064,7 +1064,7 @@
                }
 
                //console.log('cache hit for ' + token.dataAttribs.src);
-               cb( {tokens: wrapperTokens} );
+               cb({ tokens: wrapperTokens });
                return;
        }
 
diff --git a/lib/mediawiki.DOMPostProcessor.js 
b/lib/mediawiki.DOMPostProcessor.js
index e31b230..0b5bb4c 100644
--- a/lib/mediawiki.DOMPostProcessor.js
+++ b/lib/mediawiki.DOMPostProcessor.js
@@ -7,8 +7,9 @@
        events = require('events'),
        url = require('url'),
        util = require('util'),
-       DU = require('./mediawiki.DOMUtils.js').DOMUtils,
        DOMTraverser = require('./domTraverser.js').DOMTraverser,
+       DU = require('./mediawiki.DOMUtils.js').DOMUtils,
+       dumpDOM = require('./dom.dumper.js').dumpDOM,
        CleanUp = require('./dom.cleanup.js'),
        cleanupAndSaveDataParsoid = CleanUp.cleanupAndSaveDataParsoid,
        computeDSR = require('./dom.computeDSR.js').computeDSR,
@@ -205,7 +206,7 @@
 
        if (psd.debug || (psd.dumpFlags && 
(psd.dumpFlags.indexOf("dom:post-builder") !== -1))) {
                console.warn("---- DOM: after tree builder ----");
-               console.warn(document.innerHTML);
+               dumpDOM( {}, document.body );
                console.warn("--------------------------------");
        }
 
@@ -221,7 +222,7 @@
 
        for (var i = 0; i < this.processors.length; i++) {
                try {
-                       this.processors[i](document, this.env, this.options);
+                       this.processors[i](document.body, this.env, 
this.options);
                } catch ( e ) {
                        env.log("fatal", e);
                        return;
diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js
index 7e7d742..a083c99 100644
--- a/lib/mediawiki.DOMUtils.js
+++ b/lib/mediawiki.DOMUtils.js
@@ -21,7 +21,8 @@
  * @singleton
  * General DOM utilities
  */
-var DOMUtils = {
+var DU, DOMUtils;
+DOMUtils = DU = {
 
        /**
         * Check whether this is a DOM element node.
@@ -1000,7 +1001,7 @@
         */
        createNodeWithAttributes: function ( document, type, attrs ) {
                var node = document.createElement( type );
-               this.addAttributes(node, attrs);
+               DU.addAttributes(node, attrs);
                return node;
        },
 
@@ -1221,7 +1222,6 @@
         * ```
         */
        extractExpansions: function (doc) {
-               var DU = this;
 
                var node = doc.body,
                        expansion,
@@ -1230,7 +1230,6 @@
                                extensions: {},
                                files: {}
                        };
-
 
                function doExtractExpansions (node) {
                        var nodes, expAccum;
@@ -1343,14 +1342,14 @@
         * mainly for transclusion and extension processing.
         */
        getWrapperTokens: function ( nodes ) {
-               var DU = this;
+
                function makeWrapperForNode ( node ) {
                        var workNode;
                        if (node.nodeType === node.ELEMENT_NODE && 
node.childNodes.length) {
                                // Create a copy of the node without children
                                // Do not use 'A' as a wrapper node because it 
could
                                // end up getting nested inside another 'A' and 
the DOM
-                               // structure can change where the wrapper 
tokens are not
+                               // structure can change where the wrapper 
tokens are no
                                // longer siblings.
                                // Ex: "[http://foo.com Bad nesting [[Here]]].
                                var wrapperName = (node.nodeName === 'A') ? 
'SPAN' : node.nodeName;
@@ -1386,7 +1385,7 @@
                //}
 
                // First, get two tokens representing the start element
-               var tokens = makeWrapperForNode ( nodes[0] );
+               var tokens = makeWrapperForNode( nodes[0] );
 
                var needBlockWrapper = false;
                if (!DU.isBlockNode(nodes[0]) && !DU.isBlockNode(nodes.last())) 
{
@@ -1416,7 +1415,6 @@
        },
 
        isDOMFragmentWrapper: function(node) {
-               var DU = this;
 
                function hasRightType(node) {
                        return 
(/(?:^|\s)mw:DOMFragment(?=$|\s)/).test(node.getAttribute("typeof"));
diff --git a/lib/mediawiki.HTML5TreeBuilder.node.js 
b/lib/mediawiki.HTML5TreeBuilder.node.js
index 73f3422..99b6efe 100644
--- a/lib/mediawiki.HTML5TreeBuilder.node.js
+++ b/lib/mediawiki.HTML5TreeBuilder.node.js
@@ -103,12 +103,7 @@
        if ( this.lastToken && this.lastToken.constructor !== EOFTk ) {
                this.env.log("error", "EOFTk was lost in page", 
this.env.page.name);
        }
-
-       //console.warn('Fauxhtml5 onEnd');
-       var document = this.parser.document;
-
-       this.emit( 'document', document );
-
+       this.emit('document', this.parser.document);
        this.resetState();
        this.emit('end');
 };
diff --git a/lib/mediawiki.WikitextSerializer.js 
b/lib/mediawiki.WikitextSerializer.js
index 172f34e..470763a 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -746,7 +746,7 @@
        // If parent node is a list or table tag in html-syntax, then serialize
        // new elements in html-syntax rather than wiki-syntax.
        if (dp.stx === 'html' ||
-               (DU.isNewElt(node) && node.parentNode &&
+               (DU.isNewElt(node) && node.parentNode && node.nodeName !== 
'BODY' &&
                DU.getDataParsoid( node.parentNode ).stx === 'html' &&
                ((DU.isList(node.parentNode) && DU.isListItem(node)) ||
                 (node.parentNode.nodeName in {TABLE:1, TBODY:1, TH:1, TR:1} &&
diff --git a/tests/parse.js b/tests/parse.js
index 3af459a..b5aafa2 100755
--- a/tests/parse.js
+++ b/tests/parse.js
@@ -136,20 +136,16 @@
                        env.conf.wiki.wgScriptPath = argv.wgScriptPath;
                }
 
-               var i,
-                               validExtensions;
-
+               var i, validExtensions;
                if ( validExtensions !== '' ) {
                        validExtensions = argv.extensions.split( ',' );
-
                        for ( i = 0; i < validExtensions.length; i++ ) {
                                env.conf.wiki.addExtensionTag( 
validExtensions[i] );
                        }
                }
 
                // Init parsers, serializers, etc.
-               var parserPipeline,
-                               serializer;
+               var parserPipeline, serializer;
 
                if ( !argv.html2wt ) {
                        parserPipeline = env.pipelineFactory.getPipeline( 
'text/x-mediawiki/full');
diff --git a/tests/parserTests.js b/tests/parserTests.js
index b398e08..1454f1f 100755
--- a/tests/parserTests.js
+++ b/tests/parserTests.js
@@ -429,6 +429,7 @@
                } else {
                        this.env.setPageSrcInfo( null );
                }
+
                serializer.serializeDOM( content, function ( res ) {
                        wt += res;
                }, function () {

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

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