cgreact-loader
Version:
CGReact与Webpack配套的loader
62 lines (61 loc) • 1.45 kB
JavaScript
// loader生成Jss
let sjss = "XXXjss_styleXXX";
// 构造返回结果
let result = {
tag: "XXXfile_nameXXX",
jss: sjss['@global'],
key: {},
path: "XXXpublic_pathXXX", // 这个路径会由cgreact-laoder替换为public_path
dom: document.createElement("link")
};
// 构造jss的class键(CSSModule)
for (let key in result.jss)
{
key.trim().split(" ").map(k =>
{
if (k.startsWith(".") && k.indexOf(":") == -1)
{
// 只需要构造类选择器,复合类选择器无需构造类名
result.key[k] = k.substring(1);
}
});
}
//添加affect,invalid,bind函数
result.affect = (context) =>
{
// 构造表情细节
result.dom.setAttribute("data-css", "");
result.dom.setAttribute("data-meta", result.tag);
result.dom.setAttribute("rel", "stylesheet");
result.dom.setAttribute("href", result.path);
// 添加到body节点
if (document.getElementById("user"))
{
document.getElementById("user").appendChild(result.dom);
} else
{
window.setTimeout(() =>
{
document.getElementById("user").appendChild(result.dom);
}, 100);
}
if (context)
{
result.bind(context);
}
return result;
};
result.invalid = () =>
{
result.dom.remove();
return result;
};
result.bind = (context) =>
{
if (context && context.CssAndJSList && typeof context.CssAndJSList.push == "function")
{
context.CssAndJSList.push(result);
}
return result;
};
export default result;