|
12345678910111213141516171819202122232425 |
- module.exports = function resolveNestedSelector(selector, node) {
- var parent = node.parent;
- var parentIsNestAtRule = parent.type === 'atrule' && parent.name === 'nest';
-
- if (parent.type === 'root') return [selector];
- if (parent.type !== 'rule' && !parentIsNestAtRule) return resolveNestedSelector(selector, parent);
-
- var parentSelectors = (parentIsNestAtRule)
- ? parent.params.split(',').map(function(s) { return s.trim(); })
- : parent.selectors;
-
- var resolvedSelectors = parentSelectors.reduce(function(result, parentSelector) {
- if (selector.indexOf('&') !== -1) {
- var newlyResolvedSelectors = resolveNestedSelector(parentSelector, parent).map(function(resolvedParentSelector) {
- return selector.replace(/&/g, resolvedParentSelector);
- });
- return result.concat(newlyResolvedSelectors);
- }
-
- var combinedSelector = [ parentSelector, selector ].join(' ');
- return result.concat(resolveNestedSelector(combinedSelector, parent));
- }, []);
-
- return resolvedSelectors;
- }
|