fis3-spriter-csssprite
Version:
基于fis-spriter-csssprites,增加输出相对路径的支持
73 lines (65 loc) • 2.29 kB
JavaScript
/**
* @author fis
* @site fis.baidu.com
* @type {*}
*/
;
var cssParser = require('./libs/cssParser.js');
var imgGen;
try {
imgGen = require('./libs/image.js');
} catch (e) {
fis.log.warning('csssprites does not support your node ' + process.version +
', report it to https://github.com/xiangshouding/fis-spriter-csssprites/issues');
}
module.exports = function(ret, conf, settings, opt) {
if (!imgGen) {
return;
}
//文件属性中useSprite == true的css做图片合并
//html文件<style></style>标签内做图片合并
fis.util.map(ret.src, function(subpath, file) {
if (file.isCssLike && file.useSprite) {
processCss(file, ret, settings, opt);
}
if (file.isHtmlLike && (file.useSprite || settings.htmlUseSprite)) {
processInline(file, ret, settings, opt);
}
});
//打包后的css文件做图片合并
fis.util.map(ret.pkg, function (subpath, file) {
if (file.rExt == '.css') {
processCss(file, ret, settings, opt);
}
});
};
function processCss(file, ret, settings, opt) {
var content = _process(file.getContent(), file, null, ret, settings, opt);
file.setContent(content);
}
function processInline(file, ret, settings, opt) {
//匹配 <style></style> 以及用户自定义标签 setting
var style_reg = /(<style(?:(?=\s)[\s\S]*?["'\s\w\/\-]>|>))([\s\S]*?)(<\/style\s*>|$)/ig;
var reg = settings.styleReg ? settings.styleReg : style_reg;
var content = file.getContent();
var i = 0;
content = content.replace(reg, function(m, start_tag, content, end_tag){
return start_tag + _process(content, file, i++, ret, settings, opt) + end_tag;
});
file.setContent(content);
}
function _process(content, file, index, ret, settings, opt){
var images = {};
fis.util.map(ret.src, function (subpath, file) {
if (file.isImage()) {
images[file.getUrl(opt.hash, opt.domain)] = file;
}
});
var res = cssParser(content, images, file);
var content = res.content;
if (res.map && res.map.length > 0) {
var css = imgGen(file, index, res.map, images, ret, settings, opt);
content = content + css;
}
return content;
}