UNPKG

mdpdf_jm

Version:

Markdown to PDF command line converter

73 lines (59 loc) 1.71 kB
const path = require('path'); const fs = require('fs'); const url = require('url'); const fileUrl = require('file-url'); const cheerio = require('cheerio'); function getStyleBlock(stylesheets) { // Read in all stylesheets and format them into HTML to // be placed in the header. We do this because the normal // <link...> doesn't work for the headers and footers. let styleHtml = ''; for (const i in stylesheets) { if (Object.prototype.hasOwnProperty.call(stylesheets, i)) { const style = fs.readFileSync(stylesheets[i], 'utf8'); styleHtml += '<style>' + style + '</style>'; } } return styleHtml; } function getStyles(stylesheets) { let styleHtml = ''; for (const i in stylesheets) { if (Object.prototype.hasOwnProperty.call(stylesheets, i)) { const style = fs.readFileSync(stylesheets[i], 'utf8'); styleHtml += style; } } return styleHtml; } function hasAcceptableProtocol(src) { const acceptableProtocols = ['http:', 'https:'].join('|'); const theUrl = url.parse(src); if (!theUrl.protocol) { return false; } return new RegExp(acceptableProtocols).test(src); } function processSrc(src, options) { if (hasAcceptableProtocol(src)) { // The protocol is great and okay! return src; } // We need to convert it const resolvedSrc = path.resolve(options.assetDir, src); return fileUrl(resolvedSrc); } function qualifyImgSources(html, options) { const $ = cheerio.load(html); $('img').each((i, img) => { img.attribs.src = processSrc(img.attribs.src, options); }); return $.html(); } module.exports = { getStyleBlock, getStyles, hasAcceptableProtocol, qualifyImgSources, processSrc, };