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": {