electron-html-to
Version:
Convert html to html/image using electron
69 lines (54 loc) • 2.01 kB
JavaScript
// disabling import rule because `electron` is a built-in module
// eslint-disable-next-line import/no-unresolved
;
var renderer = require('electron').ipcMain,
assign = require('object-assign');
module.exports = function (settings, browserWindow, evaluate, log, converter, respond) {
var pageJSisDone = !Boolean(settings.waitForJS);
renderer.once(browserWindow.id + ':waitForJS', function () {
log('waitForJS signal received..');
pageJSisDone = true;
});
browserWindow.webContents.on('did-finish-load', function () {
log('browser window loaded..');
if (settings.browserWindow.webPreferences.javascript === false) {
log('javascript is disabled for the page..');
next();
} else {
evaluate(function () {
var sElectronHeader = '#electronHeader',
sElectronFooter = '#electronFooter';
return {
electronHeader: document.querySelector(sElectronHeader) ? document.querySelector(sElectronHeader).innerHTML : null,
electronFooter: document.querySelector(sElectronFooter) ? document.querySelector(sElectronFooter).innerHTML : null
};
}, function (err, extraContent) {
if (err) {
return respond(err);
}
next(extraContent);
});
}
function next(extraContent) {
/* eslint no-unused-vars: [0] */
// TODO: ask support for header/footer pdf and numberOfPages in electron
log('waiting for browser window resolution..');
setTimeout(function () {
resolvePage();
}, settings.delay || 0);
}
function resolvePage() {
if (settings.waitForJS && !pageJSisDone) {
setTimeout(function () {
resolvePage();
}, 100);
return;
}
log('calling converter function..');
converter(log, assign({}, settings), browserWindow, function (converterErr, data) {
log('converter function ended..');
respond(converterErr, data);
});
}
});
};