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