mirror of
				https://github.com/KevinMidboe/inline-html.git
				synced 2025-10-29 17:40:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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 inline = {};
 | |
| /**
 | |
|  * Embed referenced local assets within and HTML file.
 | |
|  *
 | |
|  * @param {String} html
 | |
|  * @param {Object} options
 | |
|  *
 | |
|  * @return {Promise}
 | |
|  */
 | |
| inline.html = co.wrap(function * (html, options) {
 | |
| 	options = Ru.defaults({
 | |
| 		filename: null,
 | |
| 		less: {},
 | |
| 		verbose: false
 | |
| 	}, options || {});
 | |
| 
 | |
| 	const filename = options.filename;
 | |
| 	var files = [filename];
 | |
| 	try {
 | |
| 		var $ = cheerio.load(html, {decodeEntities: false});
 | |
| 
 | |
| 		var result;
 | |
| 		result = yield inlineLess($, filename, options);
 | |
| 		$ = result.$;
 | |
| 		files = R.concat(files, result.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;
 | |
| 	}
 | |
| });
 | |
| 
 | |
| inline.file = co.wrap(function * (filename, options) {
 | |
| 	const html = yield fs.readFile(filename, 'utf8');
 | |
| 	options = R.merge(options || {}, {filename});
 | |
| 	return yield inline.html(html, options);
 | |
| });
 | |
| 
 | |
| module.exports = inline;
 |