You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
|
2 years ago
|
/* eslint-disable */
|
||
|
|
const postcss = require('postcss');
|
||
|
|
const syntax = require('postcss-less');
|
||
|
|
|
||
|
|
const LocalIdentNameplugin = postcss.plugin('LocalIdentNameplugin', ({ localIdentName }) => {
|
||
|
|
return lessAST => {
|
||
|
|
// loop add localIdentName
|
||
|
|
const loop = nodes => {
|
||
|
|
nodes.forEach(item => {
|
||
|
|
// Not converted :global
|
||
|
|
if (item.nodes && item.selector !== ':global') {
|
||
|
|
loop(item.nodes);
|
||
|
|
}
|
||
|
|
// 将global的 节点加到 parents
|
||
|
|
if (item.selector === ':global') {
|
||
|
|
const parentNodes = item.parent.nodes;
|
||
|
|
const childrenNodes = item.nodes;
|
||
|
|
const index = parentNodes.findIndex(node => {
|
||
|
|
return node.selector === ':global';
|
||
|
|
});
|
||
|
|
childrenNodes.unshift(index, 1);
|
||
|
|
Array.prototype.splice.apply(parentNodes, item.nodes);
|
||
|
|
item.parent.nodes = parentNodes;
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
// 删除 :global(className) 保留 className
|
||
|
|
if (item.selector) {
|
||
|
|
if (item.selector.includes(':global(')) {
|
||
|
|
// converted :global(.className)
|
||
|
|
const className = item.selector.match(/:global\((\S*)\)/)[1];
|
||
|
|
item.selector = className;
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (item.selector.includes('(')) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const className = item.selector.replace(/\./g, `.${localIdentName}`);
|
||
|
|
item.selector = className;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
};
|
||
|
|
loop(lessAST.nodes);
|
||
|
|
};
|
||
|
|
});
|
||
|
|
|
||
|
|
const AddlocalIdentName = (lessPath, lessText, localIdentName) => {
|
||
|
|
return postcss([LocalIdentNameplugin({ localIdentName })]).process(lessText, { syntax });
|
||
|
|
};
|
||
|
|
|
||
|
|
module.exports = AddlocalIdentName;
|