move the property check out of the ruleset and fix an issue in the visitor

This commit is contained in:
Luke Page
2013-07-05 20:56:59 +01:00
parent 01fd5d679e
commit 42dfeb8d3b
6 changed files with 50 additions and 20 deletions

View File

@@ -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);
}
}

View File

@@ -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();

View File

@@ -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);