move rule/ruleset re-ordering away from toCSS

This commit is contained in:
Luke Page
2013-07-15 23:05:27 +01:00
parent 037cdb5916
commit 2a0df97291
2 changed files with 31 additions and 22 deletions

View File

@@ -183,14 +183,16 @@ tree.Ruleset.prototype = {
// `context` holds an array of arrays.
//
toCSS: function (env) {
var css = [], // The CSS output
var i, css = [], // The CSS output
rules = [], // node.Rule instances
_rules = [], //
rulesets = [], // node.Ruleset instances
ruleNodes = [],
rulesetNodes = [],
selector, // The fully rendered selector
debugInfo, // Line number debugging
rule,
ruleCSS;
importNodes = [];
this.mergeRules();
@@ -200,24 +202,34 @@ tree.Ruleset.prototype = {
env.tabLevel++;
}
// Compile rules and rulesets
for (var i = 0; i < this.rules.length; i++) {
rule = this.rules[i];
var tabRuleStr = env.compress ? '' : Array(env.tabLevel + 1).join(" "),
tabSetStr = env.compress ? '' : Array(env.tabLevel).join(" ");
if (rule.rules || (rule instanceof tree.Media) || rule instanceof tree.Directive) {
rulesets.push(rule.toCSS(env));
} else if (rule instanceof tree.Comment) {
if (this.root) {
rulesets.push(rule.toCSS(env));
} else {
rules.push(rule.toCSS(env));
}
for (i = 0; i < this.rules.length; i++) {
rule = this.rules[i];
if (rule instanceof tree.Import) {
importNodes.push(rule);
} else if (this.root || rule.rules || (rule instanceof tree.Media) || rule instanceof tree.Directive) {
rulesetNodes.push(rule);
} else {
if (rule.toCSS) {
rules.push(rule.toCSS(env));
} else if (rule.value) {
rules.push(rule.value.toString());
}
ruleNodes.push(rule);
}
}
rulesetNodes = importNodes.concat(rulesetNodes);
for (i = 0; i < rulesetNodes.length; i++) {
rulesets.push(rulesetNodes[i].toCSS(env));
}
// Compile rules and rulesets
for (i = 0; i < ruleNodes.length; i++) {
rule = ruleNodes[i];
if (rule.toCSS) {
rules.push(rule.toCSS(env));
} else if (rule.value) {
rules.push(rule.value.toString());
}
}
@@ -232,9 +244,6 @@ tree.Ruleset.prototype = {
}
}
var tabRuleStr = env.compress ? '' : Array(env.tabLevel + 1).join(" "),
tabSetStr = env.compress ? '' : Array(env.tabLevel).join(" ");
rulesets = rulesets.join('\n' + (this.root ? tabRuleStr : tabSetStr));
// If this is the root node, we don't render