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