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

Reply via email to