mirror of
https://github.com/KevinMidboe/inline-html.git
synced 2025-10-29 17:40:29 +00:00
Refactor. Update dependencies. Update tests. Make img plugin async.
This commit is contained in:
59
lib/index.js
59
lib/index.js
@@ -1,12 +1,13 @@
|
||||
var co = require('co');
|
||||
var fs = require('mz/fs');
|
||||
var inlineStyle = require('./inline-style');
|
||||
var inlineImg = require('./inline-img');
|
||||
var inlineLess = require('./inline-less');
|
||||
var R = require('ramda');
|
||||
var Ru = require('@panosoft/ramda-utils');
|
||||
const cheerio = require('cheerio');
|
||||
const co = require('co');
|
||||
const fs = require('mz/fs');
|
||||
const inlineCssUrl = require('./css-url');
|
||||
const inlineImg = require('./img');
|
||||
const inlineLess = require('./link-less');
|
||||
const R = require('ramda');
|
||||
const Ru = require('@panosoft/ramda-utils');
|
||||
|
||||
var inlineHtml = {};
|
||||
var inline = {};
|
||||
/**
|
||||
* Embed referenced local assets within and HTML file.
|
||||
*
|
||||
@@ -15,44 +16,46 @@ var inlineHtml = {};
|
||||
*
|
||||
* @return {Promise}
|
||||
*/
|
||||
inlineHtml.html = co.wrap(function * (html, options) {
|
||||
inline.html = co.wrap(function * (html, options) {
|
||||
options = Ru.defaults({
|
||||
filename: null,
|
||||
less: {},
|
||||
verbose: false
|
||||
}, options || {});
|
||||
var filename = options.filename;
|
||||
|
||||
// Embed assets
|
||||
const filename = options.filename;
|
||||
var files = [filename];
|
||||
try {
|
||||
var lessResult = yield inlineLess(html, filename, options.less);
|
||||
html = lessResult.html;
|
||||
files = R.concat(files, lessResult.files);
|
||||
var $ = cheerio.load(html, {decodeEntities: false});
|
||||
|
||||
var styleResult = inlineStyle(html, filename);
|
||||
html = styleResult.html;
|
||||
files = R.concat(files, styleResult.files);
|
||||
var result;
|
||||
result = yield inlineLess($, filename, options);
|
||||
$ = result.$;
|
||||
files = R.concat(files, result.files);
|
||||
|
||||
var imgResult = inlineImg(html, filename);
|
||||
html = imgResult.html;
|
||||
files = R.concat(files, imgResult.files);
|
||||
result = inlineCssUrl($, filename);
|
||||
$ = result.$;
|
||||
files = R.concat(files, result.files);
|
||||
|
||||
result = yield inlineImg($, filename);
|
||||
$ = result.$;
|
||||
files = R.concat(files, result.files);
|
||||
|
||||
html = $.xml();
|
||||
files = R.uniq(files);
|
||||
return (options.verbose ? { html, files } : html);
|
||||
}
|
||||
catch (error) {
|
||||
if (!error.filename) error.filename = filename;
|
||||
error.files = R.uniq(R.concat(files, error.files || []));
|
||||
throw error;
|
||||
}
|
||||
|
||||
files = R.uniq(files);
|
||||
var result = { html, files };
|
||||
return (options.verbose ? result : result.html);
|
||||
});
|
||||
|
||||
inlineHtml.file = co.wrap(function * (filename, options) {
|
||||
var html = yield fs.readFile(filename, 'utf8');
|
||||
inline.file = co.wrap(function * (filename, options) {
|
||||
const html = yield fs.readFile(filename, 'utf8');
|
||||
options = R.merge(options || {}, {filename});
|
||||
return yield inlineHtml.html(html, options);
|
||||
return yield inline.html(html, options);
|
||||
});
|
||||
|
||||
module.exports = inlineHtml;
|
||||
module.exports = inline;
|
||||
|
||||
Reference in New Issue
Block a user