css-flatten
Version:
Flattens a nested (S)CSS string, '&' placeholders are supported too.
32 lines (31 loc) • 1.05 kB
JavaScript
/* MAIN */
const Resolve = {
ampersand: (resolved, selector, parents) => {
for (let pi = 0, pl = parents.length; pi < pl; pi++) {
const temp = selector.replace('&', parents[pi]);
if (temp.indexOf('&') >= 0) { // Ampersand selector
Resolve.ampersand(resolved, temp, parents);
}
else { // Regular selector
resolved.push(temp);
}
}
},
selectors: (selectors, parents) => {
const resolved = [];
for (let i = 0, l = selectors.length; i < l; i++) {
const selector = selectors[i];
if (selector.indexOf('&') >= 0) { // Ampersand selector
Resolve.ampersand(resolved, selector, parents);
}
else { // Regular selector
for (let pi = 0, pl = parents.length; pi < pl; pi++) {
resolved.push(`${parents[pi]} ${selector}`);
}
}
}
return resolved;
}
};
/* EXPORT */
export default Resolve;