Files
inline-html/lib/inline-css-url.js

62 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

2015-07-23 08:28:22 -07:00
var datauri = require('datauri');
var isLocalPath = require('is-local-path');
var isTemplateExpression = require('./is-template-expression');
2015-07-23 08:28:22 -07:00
var path = require('path');
2015-07-27 13:15:45 -07:00
var postcss = require('postcss');
var postcssUrl = require('postcss-url');
2015-09-21 10:16:38 -07:00
var R = require('ramda');
var url = require('url');
2015-07-23 08:28:22 -07:00
/**
* Returns url path without query string and hash if present.
*
* @param path
*
* @returns path
*/
var clean = function (path) {
path = url.parse(path);
2015-09-21 10:16:38 -07:00
path = R.pick(['protocol', 'host', 'pathname'], path);
path = url.format(path);
path = decodeURI(path);
return path;
};
/**
* Convert local url data type paths to datauris.
*
* @param css
* @param filename
* @returns {{css: (css|any), files: Array}}
*/
var inlineUrl = function (css, filename) {
var files = [];
var basePath = path.dirname(filename);
2015-07-27 13:15:45 -07:00
var result = postcss()
.use(postcssUrl({
url: function (urlPath) {
if (isLocalPath(urlPath) && !isTemplateExpression(urlPath)) {
try {
urlPath = clean(urlPath);
urlPath = path.resolve(basePath, urlPath);
files = R.append(urlPath, files);
urlPath = datauri(urlPath);
}
catch (error) {
error.filename = filename;
error.files = R.uniq(files);
throw error;
}
2015-07-27 13:15:45 -07:00
}
return urlPath;
2015-07-23 08:28:22 -07:00
}
}))
2015-07-27 13:15:45 -07:00
.process(css);
files = R.uniq(files);
return {
2015-07-27 13:15:45 -07:00
css: result.css,
files
};
2015-07-23 08:28:22 -07:00
};
module.exports = inlineUrl;