mirror of
https://github.com/less/less.js.git
synced 2026-05-01 03:00:22 -04:00
slight restructure and tests to show we allow multiple extends
This commit is contained in:
@@ -71,6 +71,7 @@
|
||||
|
||||
tree.processExtendsVisitor = function() {
|
||||
this._visitor = new tree.visitor(this);
|
||||
this._searches
|
||||
};
|
||||
|
||||
tree.processExtendsVisitor.prototype = {
|
||||
@@ -94,32 +95,40 @@
|
||||
return;
|
||||
}
|
||||
var i, j, k, selector, element, allExtends = this.allExtendsStack[this.allExtendsStack.length-1], selectorsToAdd = [];
|
||||
if (allExtends.length) {
|
||||
|
||||
for(k = 0; k < allExtends.length; k++) {
|
||||
for(i = 0; i < rulesetNode.selectors.length; i++) {
|
||||
selector = rulesetNode.selectors[i];
|
||||
for(j = 0; j < selector.elements.length; j++) {
|
||||
element = selector.elements[j];
|
||||
for(k = 0; k < allExtends.length; k++) {
|
||||
if (allExtends[k].selector.elements[0].value === element.value) {
|
||||
allExtends[k].selfSelectors.forEach(function(selfSelector) {
|
||||
selfSelector.elements[0] = new tree.Element(
|
||||
element.combinator,
|
||||
selfSelector.elements[0].value,
|
||||
selfSelector.elements[0].index
|
||||
);
|
||||
selectorsToAdd.push(new tree.Selector(
|
||||
selector.elements
|
||||
.slice(0, j)
|
||||
.concat(selfSelector.elements)
|
||||
.concat(selector.elements.slice(j + 1))
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
var match = this.findMatch(allExtends[k], selector);
|
||||
if (match) {
|
||||
allExtends[k].selfSelectors.forEach(function(selfSelector) {
|
||||
var firstElement = new tree.Element(
|
||||
match.initialCombinator,
|
||||
selfSelector.elements[0].value,
|
||||
selfSelector.elements[0].index
|
||||
);
|
||||
selectorsToAdd.push(new tree.Selector(
|
||||
selector.elements
|
||||
.slice(0, match.index)
|
||||
.concat([firstElement])
|
||||
.concat(selfSelector.elements.slice(1))
|
||||
.concat(selector.elements.slice(match.index + 1))
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
rulesetNode.selectors = rulesetNode.selectors.concat(selectorsToAdd);
|
||||
}
|
||||
rulesetNode.selectors = rulesetNode.selectors.concat(selectorsToAdd);
|
||||
},
|
||||
findMatch: function (extend, selector) {
|
||||
var j = 0, element;
|
||||
for(j = 0; j < selector.elements.length; j++) {
|
||||
element = selector.elements[j];
|
||||
if (extend.selector.elements[0].value === element.value) {
|
||||
return {index: j, initialCombinator: element.combinator};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
visitRulesetOut: function (rulesetNode) {
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user