Skip to content
This repository has been archived by the owner on Sep 7, 2020. It is now read-only.

Commit

Permalink
Merge pull request #45 from pkra/41
Browse files Browse the repository at this point in the history
fix: passing jsdom options to jsdom
  • Loading branch information
pkra authored May 5, 2017
2 parents 260cd7d + 26ac1f1 commit 3a6aa50
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 9 deletions.
2 changes: 1 addition & 1 deletion bin/mjpage
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ const mjglobal = {
singleDollars: argv.dollars,
fragment: argv.fragment,
jsdom: {
FetchExternalResources: [],
FetchExternalResources: false,
ProcessExternalResources: false,
virtualConsole: false
},
Expand Down
24 changes: 17 additions & 7 deletions lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
},
//
Expand Down Expand Up @@ -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) {
Expand All @@ -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;

Expand Down Expand Up @@ -260,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);
})
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down
37 changes: 37 additions & 0 deletions test/config-jsdom.js
Original file line number Diff line number Diff line change
@@ -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 = `
<p>Hello World</p>
<script src="data:text/javascript;charset=utf-8,window.onload = function(){ var f = document.createElement('footer'); document.body.appendChild(f);}"></script>`;
mjpage(input, {}, {},
function (output) {
t.notOk(output.includes('<footer></footer>'), 'jsdom configuration defaults');
});
mjpage(input, {
jsdom: {
FetchExternalResources: ['script'],
ProcessExternalResources: ['script'],
virtualConsole: true

}
}, {},
function (output) {
t.ok(output.includes('<footer></footer>'), 'jsdom with script execution');
});
exec(`echo "const mjpage = require('./lib/main.js').mjpage;
mjpage('<script>console.log(\\'error\\')</script>', {}, {}, 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('<script>console.log(\\'error\\')</script>', { 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');
});
});

0 comments on commit 3a6aa50

Please sign in to comment.