mirror of
https://github.com/less/less.js.git
synced 2026-04-09 03:00:20 -04:00
move the property check out of the ruleset and fix an issue in the visitor
This commit is contained in:
@@ -17,6 +17,10 @@
|
||||
return ruleNode;
|
||||
},
|
||||
|
||||
visitMixinDefinition: function (mixinNode, visitArgs) {
|
||||
return [];
|
||||
},
|
||||
|
||||
visitComment: function (commentNode, visitArgs) {
|
||||
if (commentNode.isSilent(this._env)) {
|
||||
return [];
|
||||
@@ -42,21 +46,56 @@
|
||||
return directiveNode;
|
||||
},
|
||||
|
||||
checkPropertiesInRoot: function(rules) {
|
||||
var ruleNode;
|
||||
for(var i = 0; i < rules.length; i++) {
|
||||
ruleNode = rules[i];
|
||||
if (ruleNode instanceof tree.Rule && !ruleNode.variable) {
|
||||
throw { message: "properties must be inside selector blocks, they cannot be in the root.",
|
||||
index: ruleNode.index, filename: ruleNode.currentFileInfo ? ruleNode.currentFileInfo.filename : null};
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
visitRuleset: function (rulesetNode, visitArgs) {
|
||||
var rule, rulesets = [];
|
||||
if (rulesetNode.firstRoot) {
|
||||
this.checkPropertiesInRoot(rulesetNode.rules);
|
||||
}
|
||||
if (! rulesetNode.root) {
|
||||
|
||||
rulesetNode.paths = rulesetNode.paths
|
||||
.filter(function(p) {
|
||||
var i;
|
||||
for(i = 0; i < p.length; i++) {
|
||||
if (p[i].getIsReferenced() && p[i].getIsOutput()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// Compile rules and rulesets
|
||||
for (var i = 0; i < rulesetNode.rules.length; i++) {
|
||||
rule = rulesetNode.rules[i];
|
||||
|
||||
if (rule.rules) {
|
||||
// visit because we are moving them out from being a child
|
||||
rulesets.push(this._visitor.visit(rule));
|
||||
rulesetNode.rules.splice(i, 1);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (rulesets.length > 0 && rulesetNode.rules.length > 0) {
|
||||
// accept the visitor to remove rules and refactor itself
|
||||
// then we can decide now whether we want it or not
|
||||
if (rulesetNode.rules.length > 0 && rulesetNode.paths.length > 0) {
|
||||
rulesetNode.accept(this._visitor);
|
||||
}
|
||||
visitArgs.visitDeeper = false;
|
||||
|
||||
// now decide whether we keep the ruleset
|
||||
if (rulesets.length > 0 && rulesetNode.rules.length > 0 && rulesetNode.paths.length > 0) {
|
||||
rulesets.splice(0, 0, rulesetNode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,10 +204,6 @@ tree.Ruleset.prototype = {
|
||||
}
|
||||
} else {
|
||||
if (rule.toCSS) {
|
||||
if (this.firstRoot && rule instanceof tree.Rule) {
|
||||
throw { message: "properties must be inside selector blocks, they cannot be in the root.",
|
||||
index: rule.index, filename: rule.currentFileInfo ? rule.currentFileInfo.filename : null};
|
||||
}
|
||||
rules.push(rule.toCSS(env));
|
||||
} else if (rule.value) {
|
||||
rules.push(rule.value.toString());
|
||||
@@ -234,15 +230,6 @@ tree.Ruleset.prototype = {
|
||||
if (rules.length > 0) {
|
||||
debugInfo = tree.debugInfo(env, this);
|
||||
selector = this.paths
|
||||
.filter(function(p) {
|
||||
var i;
|
||||
for(i = 0; i < p.length; i++) {
|
||||
if (p[i].getIsReferenced() && p[i].getIsOutput()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.map(function (p) {
|
||||
return p.map(function (s) {
|
||||
return s.toCSS(env);
|
||||
@@ -270,6 +257,9 @@ tree.Ruleset.prototype = {
|
||||
return css.join('') + (env.compress ? '\n' : '');
|
||||
},
|
||||
|
||||
toCSSRoot: function (env) {
|
||||
},
|
||||
|
||||
markReferenced: function () {
|
||||
for (var s = 0; s < this.selectors.length; s++) {
|
||||
this.selectors[s].markReferenced();
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
var evald = this.visit(nodes[i]);
|
||||
if (evald instanceof Array) {
|
||||
evald = this.flatten(evald);
|
||||
evald.forEach(this.doAccept, this);
|
||||
//evald.forEach(this.doAccept, this);
|
||||
newNodes = newNodes.concat(evald);
|
||||
} else {
|
||||
newNodes.push(evald);
|
||||
|
||||
Reference in New Issue
Block a user