8000 slight restructure and tests to show we allow multiple extends · nullstring/less.js@1970be7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1970be7

Browse files
committed
slight restructure and tests to show we allow multiple extends
1 parent 464e777 commit 1970be7

File tree

4 files changed

+39
-27
lines changed

4 files changed

+39
-27
lines changed

lib/less/extend-visitor.js

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171

7272
tree.processExtendsVisitor = function() {
7373
this._visitor = new tree.visitor(this);
74+
this._searches
7475
};
7576

7677
tree.processExtendsVisitor.prototype = {
@@ -94,32 +95,40 @@
9495
return;
9596
}
9697
var i, j, k, selector, element, allExtends = this.allExtendsStack[this.allExtendsStack.length-1], selectorsToAdd = [];
97-
if (allExtends.length) {
98+
99+
for(k = 0; k < allExtends.length; k++) {
98100
for(i = 0; i < rulesetNode.selectors.length; i++) {
99101
selector = rulesetNode.selectors[i];
100-
for(j = 0; j < selector.elements.length; j++) {
101-
element = selector.elements[j];
102-
for(k = 0; k < allExtends.length; k++) {
103-
if (allExtends[k].selector.elements[0].value === element.value) {
104-
allExtends[k].selfSelectors.forEach(function(selfSelector) {
105-
selfSelector.elements[0] = new tree.Element(
106-
element.combinator,
107-
selfSelector.elements[0].value,
108-
selfSelector.elements[0].index
109-
);
110-
selectorsToAdd.push(new tree.Selector(
111-
selector.elements
112-
.slice(0, j)
113-
.concat(selfSelector.elements)
114-
.concat(selector.elements.slice(j + 1))
115-
));
116-
});
117-
}
118-
}
102+
var match = this.findMatch(allExtends[k], selector);
103+
if (match) {
104+
allExtends[k].selfSelectors.forEach(function(selfSelector) {
105+
var firstElement = new tree.Element(
106+
match.initialCombinator,
107+
selfSelector.elements[0].value,
108+
selfSelector.elements[0].index
109+
);
110+
selectorsToAdd.push(new tree.Selector(
111+
selector.elements
112+
.slice(0, match.index)
113+
.concat([firstElement])
114+
.concat(selfSelector.elements.slice(1))
115+
.concat(selector.elements.slice(match.index + 1))
116+
));
117+
});
119118
}
120119
}
121-
rulesetNode.selectors = rulesetNode.selectors.concat(selectorsToAdd);
122120
}
121+
rulesetNode.selectors = rulesetNode.selectors.concat(selectorsToAdd);
122+
},
123+
findMatch: function (extend, selector) {
124+
var j = 0, element;
125+
for(j = 0; j < selector.elements.length; j++) {
126+
element = selector.elements[j];
127+
if (extend.selector.elements[0].value === element.value) {
128+
return {index: j, initialCombinator: element.combinator};
129+
}
130+
}
131+
return null;
123132
},
124133
visitRulesetOut: function (rulesetNode) {
125134
},

test/css/extend-selector.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
.foo .bar,
1919
.foo .baz,
2020
.ext1 .ext2 .bar,
21-
.ext3 .bar,
22-
.ext4 .bar,
2321
.ext1 .ext2 .baz,
22+
.ext3 .bar,
2423
.ext3 .baz,
24+
.ext4 .bar,
2525
.ext4 .baz {
2626
display: none;
2727
}

test/css/extend.css

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
.foo .bar,
1919
.foo .baz,
2020
.ext1 .ext2 .bar,
21-
.ext3 .bar,
22-
.ext4 .bar,
2321
.ext1 .ext2 .baz,
22+
.ext3 .bar,
2423
.ext3 .baz,
25-
.ext4 .baz {
24+
.foo .ext3,
25+
.ext4 .bar,
26+
.ext4 .baz,
27+
.foo .ext4 {
2628
display: none;
2729
}
2830
div.ext5,

test/less/extend.less

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424

2525
.ext3,
2626
.ext4 {
27-
&:extend(.foo all);
27+
&:extend(.foo all);
28+
&:extend(.bar all);
2829
}
2930

3031
div.ext5,

0 commit comments

Comments
 (0)
0