Subramanya Sastry has uploaded a new change for review.
https://gerrit.wikimedia.org/r/68818
Change subject: (Bug 49566) Buffer serialized WT and write to response at the
end
......................................................................
(Bug 49566) Buffer serialized WT and write to response at the end
* Cleaned up dead state and some comments in selective serializer.
* Removed buffering in selective serializer and added output
buffering in ParserService so this buffering is used when either
serializer is used.
Change-Id: I944558d265b6329a87499ef9a38b4c5b9e34ca8f
---
M js/api/ParserService.js
M js/lib/mediawiki.SelectiveSerializer.js
2 files changed, 19 insertions(+), 35 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/18/68818/1
diff --git a/js/api/ParserService.js b/js/api/ParserService.js
index a385663..8a9ead7 100644
--- a/js/api/ParserService.js
+++ b/js/api/ParserService.js
@@ -63,13 +63,13 @@
* The global parsoid configuration object.
* @property {ParsoidConfig}
*/
-var parsoidConfig = new ParsoidConfig( localSettings, null ),
+var parsoidConfig = new ParsoidConfig( localSettings, null );
/**
* The serializer to use for the web requests.
* @property {Function} Serializer
*/
- Serializer = parsoidConfig.useSelser ? SelectiveSerializer :
WikitextSerializer;
+var Serializer = parsoidConfig.useSelser ? SelectiveSerializer :
WikitextSerializer;
/**
* Get the interwiki regexp.
@@ -630,44 +630,38 @@
// Regular article serialization using POST
app.post( new RegExp( '/(' + getInterwikiRE() + ')/(.*)' ), function ( req,
res ) {
- var cb = function ( env ) {
+ getParserServiceEnv( res, req.params[0], req.params[1], function ( env
) {
var doc, oldid = req.body.oldid || null;
env.page.id = oldid;
+ env.errCB = function ( e ) {
+ console.error( e.stack );
+ res.send( e.stack, 500 );
+ };
+
res.setHeader('Content-Type', 'text/x-mediawiki;
charset=UTF-8');
try {
doc = Util.parseHTML(req.body.content);
} catch ( e ) {
console.log( 'There was an error in the HTML5 parser!
Sending it back to the editor.' );
- console.error( e.stack );
- res.send( e.stack, 500 );
+ env.errCB(e);
return;
}
- env.errCB = function ( e ) {
- console.error( e.stack );
- res.send( e.stack, 500 );
- };
-
try {
- // FIXME: Fetch oldid source and pass it in.
+ var out = [];
new Serializer( { env: env, oldid: env.page.id }
).serializeDOM(
- // The below can be uncommented to turn on selective
serialization on the main API service.
- // This is not currently advisable. It's not working
perfectly.
- //new SelectiveSerializer( { env: env, oldid: oldid }
).serializeDOM(
doc.body,
function ( chunk ) {
- res.write( chunk );
+ out.push(chunk);
}, function () {
- // XXX TODO FIXME BBQ There should be
an error callback in SelSer.
- res.end( '' );
+ res.write( out.join('') );
+ res.end('');
} );
} catch ( e ) {
env.errCB( e );
}
- };
-
- getParserServiceEnv( res, req.params[0], req.params[1], cb );
+ });
} );
/**
diff --git a/js/lib/mediawiki.SelectiveSerializer.js
b/js/lib/mediawiki.SelectiveSerializer.js
index 3cede3e..fbe55dd 100644
--- a/js/lib/mediawiki.SelectiveSerializer.js
+++ b/js/lib/mediawiki.SelectiveSerializer.js
@@ -34,11 +34,6 @@
this.wts = options.wts || new WikitextSerializer( options );
- // The output wikitext collector
- this.wtChunks = [];
-
- this.serializeID = null;
-
// Debug options
this.trace = this.env.conf.parsoid.debug || (
this.env.conf.parsoid.traceFlags &&
@@ -75,8 +70,6 @@
*/
SSP.doSerializeDOM = function ( err, doc, cb, finalcb ) {
var self = this;
- // gwicke: This does not seem to be needed any more?
- //Util.stripFirstParagraph( doc );
if ( err || (!this.env.page.dom && !this.env.page.domdiff) ||
!this.env.page.src) {
// If there's no old source, fall back to non-selective
serialization.
@@ -94,7 +87,7 @@
// new DiffToSelserConverter(this.env, doc).convert();
if ( this.trace || ( this.env.conf.parsoid.dumpFlags &&
-
this.env.conf.parsoid.dumpFlags.indexOf( 'dom:post-dom-diff' ) !== -1) )
+ this.env.conf.parsoid.dumpFlags.indexOf(
'dom:post-dom-diff' ) !== -1) )
{
console.log( '----- DOM after running DOMDiff
-----' );
console.log( doc.outerHTML );
@@ -104,14 +97,11 @@
this.wts.serializeDOM(
doc,
function(res) {
- self.debug_pp("SS-res: ",
JSON.stringify(res));
- self.wtChunks.push(res);
+
self.debug_pp(JSON.stringify(res));
+ cb(res);
},
- function () {
- //console.log( 'chunks',
self.wtChunks );
- cb( self.wtChunks.join( '' ) );
- finalcb();
- }, true);
+ finalcb,
+ true);
} else {
// Nothing was modified, just re-use the original source
cb( this.env.page.src );
--
To view, visit https://gerrit.wikimedia.org/r/68818
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I944558d265b6329a87499ef9a38b4c5b9e34ca8f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits