From 5156d65a2885ae83f784ba3688c3682c21fce851 Mon Sep 17 00:00:00 2001 From: Peter Krautzberger Date: Fri, 5 May 2017 19:00:41 +0200 Subject: [PATCH 1/3] fix: passing jsdom options to jsdom fixes #41 --- bin/mjpage | 2 +- lib/main.js | 23 ++++++++++++++++------- test/config-jsdom.js | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 test/config-jsdom.js diff --git a/bin/mjpage b/bin/mjpage index 69dbc80..550e180 100644 --- a/bin/mjpage +++ b/bin/mjpage @@ -95,7 +95,7 @@ const mjglobal = { singleDollars: argv.dollars, fragment: argv.fragment, jsdom: { - FetchExternalResources: [], + FetchExternalResources: false, ProcessExternalResources: false, virtualConsole: false }, diff --git a/lib/main.js b/lib/main.js index 5afe568..7ed0936 100644 --- a/lib/main.js +++ b/lib/main.js @@ -22,9 +22,9 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { singleDollars: false, // allow single-dollar delimiter for inline TeX fragment: false, jsdom: { - FetchExternalResources: [], + // NOTE these are not straight jsdom configuration options (cf. below) + FetchExternalResources: false, ProcessExternalResources: false, - // NOTE virtualConsole: not the jsdom way but for configurability (cf. below) virtualConsole: true }, // @@ -59,7 +59,7 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { } - //merge configurations + //merge configurations into defaults const mergeConfig = function(conf, confDefaults) { for (index in conf) { @@ -70,13 +70,22 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { mergeConfig(configOptions, config); mergeConfig(typesetOptions, typesetConfig); - // Set jsdom console (cf. defaults for config.jsdom) - if (config.jsdom.virtualConsole) { - config.jsdom.virtualConsole = jsdom.createVirtualConsole().sendTo(console); + // Create jsdom options (cf. defaults for config.jsdom) + const jsdomConfig = { + features: { + FetchExternalResources: config.jsdom.FetchExternalResources, + ProcessExternalResources: config.jsdom.ProcessExternalResources + }, + virtualConsole: config.jsdom.virtualConsole + } + // translate 'true' option + // TODO deprecate in favor of explicit default + if (config.jsdom.virtualConsole === true) { + jsdomConfig.virtualConsole = jsdom.createVirtualConsole().sendTo(console); } // set up DOM basics - const doc = jsdom.jsdom(htmlstring, config.jsdom); + const doc = jsdom.jsdom(htmlstring, jsdomConfig); const window = doc.defaultView; const document = window.document; diff --git a/test/config-jsdom.js b/test/config-jsdom.js new file mode 100644 index 0000000..d55852c --- /dev/null +++ b/test/config-jsdom.js @@ -0,0 +1,37 @@ +const tape = require('tape'); +const mjpage = require('../lib/main.js').mjpage; +const exec = require('child_process').exec + +tape('Configuration options for jsdom', function (t) { + t.plan(4); + const input = ` +

Hello World

+ `; + mjpage(input, {}, {}, + function (output) { + t.notOk(output.includes(''), 'jsdom configuration defaults'); + }); + mjpage(input, { + jsdom: { + FetchExternalResources: ['script'], + ProcessExternalResources: ['script'], + virtualConsole: true + + } + }, {}, + function (output) { + t.ok(output.includes(''), 'jsdom with script execution'); + }); + exec(`echo "const mjpage = require('./lib/main.js').mjpage; +mjpage('', {}, {}, function () {});" | node`, + function (error, stdout, stderr) { + if (stderr) throw stderr; + t.equal(stdout, '', 'jsdom: virtual console default off'); + }); + exec(`echo "const mjpage = require('./lib/main.js').mjpage; +mjpage('', { jsdom: { FetchExternalResources: ['script'], ProcessExternalResources: ['script'], virtualConsole: true } }, {}, function () {});" | node`, + function (error, stdout, stderr) { + if (stderr) throw stderr; + t.equal(stdout, 'error\n', 'jsdom: virtual console on'); + }); +}); \ No newline at end of file From fb9c6b174f89e39d27b0cd94baae31960fbe057a Mon Sep 17 00:00:00 2001 From: Peter Krautzberger Date: Fri, 5 May 2017 21:07:18 +0200 Subject: [PATCH 2/3] [main] restart MathJax during clean-up --- lib/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/main.js b/lib/main.js index 7ed0936..960abf5 100644 --- a/lib/main.js +++ b/lib/main.js @@ -269,6 +269,7 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { if (config.fragment) output = document.body.innerHTML; else output = serializeDocument(document); window.close(); + mathjax.start(); callback(output); }) } From 26ac1f1f4ba4048e2970e36aaadc09e045719d6a Mon Sep 17 00:00:00 2001 From: Peter Krautzberger Date: Fri, 5 May 2017 21:07:38 +0200 Subject: [PATCH 3/3] [package.json] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8566115..5553aa9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mathjax-node-page", - "version": "1.2.7", + "version": "1.2.8", "description": "Converter for HTML fragments with mathematics using mathjax-node", "main": "./lib/main.js", "scripts": {