Arlolra has uploaded a new change for review.

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

Change subject: Return a JSON response with separate html and data-parsoid
......................................................................

Return a JSON response with separate html and data-parsoid

Bug: 52936
Change-Id: I97a88cf3e0790ad0d2fa663ca80a1c0c92c129c3
---
M api/ParsoidService.js
1 file changed, 37 insertions(+), 11 deletions(-)


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

diff --git a/api/ParsoidService.js b/api/ParsoidService.js
index 0e8b2d0..76cb354 100644
--- a/api/ParsoidService.js
+++ b/api/ParsoidService.js
@@ -13,7 +13,6 @@
 var express = require('express'),
        domino = require('domino'),
        hbs = require('handlebars'),
-       // memwatch = require('memwatch'),
        childProc = require('child_process'),
        cluster = require('cluster'),
        fs = require('fs'),
@@ -70,7 +69,7 @@
         * @param {Response} res The response object from our routing function.
         * @property {Function} Serializer
         */
-       function endResponse (res, env) {
+       function endResponse(res, env) {
                if (env.responseSent) {
                        return;
                } else {
@@ -88,7 +87,7 @@
         * @param {Response} res The response object from our routing function.
         * @property {Function} Serializer
         */
-       function sendResponse (res, env) {
+       function sendResponse(res, env) {
                if (env.responseSent) {
                        return;
                } else {
@@ -107,6 +106,15 @@
                } else {
                        env.responseSent = true;
                        res.render.apply(res, 
Array.prototype.slice.call(arguments, 2));
+               }
+       }
+
+       function jsonResponse(res, env) {
+               if (env.responseSent) {
+                       return;
+               } else {
+                       env.responseSent = true;
+                       res.json.apply(res, 
Array.prototype.slice.call(arguments, 2));
                }
        }
 
@@ -539,6 +547,10 @@
                var prefix = res.local('iwp');
                var target = env.resolveTitle( env.normalizeTitle( 
env.page.name ), '' );
 
+               if ( req.query.format === "json" ) {
+                       env.conf.parsoid.storeDataParsoid = true;
+               }
+
                // Set the timeout to 600 seconds..
                req.connection.setTimeout( 600 * 1000 );
 
@@ -615,10 +627,16 @@
 
                                        // Set the source
                                        env.setPageSrcInfo( src_and_metadata );
-                                       var url = [ "", prefix,
-                                                               
encodeURIComponent( target ) +
-                                                               "?oldid=" + 
env.page.meta.revision.revid
-                                                       ].join( "/" );
+
+                                       var qs = "?oldid=" + 
env.page.meta.revision.revid;
+                                       if ( req.query.format ) {
+                                               qs += "&format=" + 
req.query.format;
+                                       }
+
+                                       var url = [
+                                               "", prefix,
+                                               encodeURIComponent( target ) + 
qs
+                                       ].join( "/" );
 
                                        // Redirect to oldid
                                        relativeRedirect({"path" : url, "res" : 
res, "env" : env});
@@ -631,11 +649,19 @@
                tpr.once( 'src', tmpCb );
 
                function sendRes( doc ) {
-                       var out = DU.serializeNode( doc );
                        try {
                                setHeader(res, env, 'X-Parsoid-Performance', 
env.getPerformanceHeader());
-                               setHeader(res, env, 'Content-Type', 'text/html; 
charset=UTF-8' );
-                               endResponse(res, env,  out );
+                               if ( req.query.format === 'json' ) {
+                                       var dp = 
doc.ownerDocument.getElementById('mw-data-parsoid');
+                                       dp.parentNode.removeChild(dp);
+                                       jsonResponse(res, env, {
+                                               "data-parsoid": 
JSON.parse(dp.text),
+                                               html: DU.serializeNode( doc )
+                                       });
+                               } else {
+                                       setHeader(res, env, 'Content-Type', 
'text/html; charset=UTF-8');
+                                       endResponse(res, env,  
DU.serializeNode( doc ));
+                               }
                                env.log("info", "completed parsing in", 
env.performance.duration, "ms");
                        } catch (e) {
                                env.log("fatal/request", e);
@@ -706,7 +732,7 @@
        gitVersion( function () {
                app.listen( port, host );
                console.log( ' - ' + instanceName + ' ready on ' +
-                            (host||'') + ':' + port );
+                       (host||'') + ':' + port );
        });
 
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I97a88cf3e0790ad0d2fa663ca80a1c0c92c129c3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>

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

Reply via email to