move mergerules into toCSS visitor

This commit is contained in:
Luke Page
2013-07-16 22:48:29 +01:00
parent 45bc539b57
commit d6f386727c
2 changed files with 37 additions and 38 deletions

View File

@@ -111,6 +111,7 @@
}
visitArgs.visitDeeper = false;
this._mergeRules(rulesetNode.rules);
this._removeDuplicateRules(rulesetNode.rules);
// now decide whether we keep the ruleset
@@ -153,6 +154,42 @@
}
}
}
},
_mergeRules: function (rules) {
var groups = {},
parts,
rule,
key;
for (var i = 0; i < rules.length; i++) {
rule = rules[i];
if ((rule instanceof tree.Rule) && rule.merge) {
key = [rule.name,
rule.important ? "!" : ""].join(",");
if (!groups[key]) {
parts = groups[key] = [];
} else {
rules.splice(i--, 1);
}
parts.push(rule);
}
}
Object.keys(groups).map(function (k) {
parts = groups[k];
if (parts.length > 1) {
rule = parts[0];
rule.value = new (tree.Value)(parts.map(function (p) {
return p.value;
}));
}
});
}
};

View File

@@ -192,8 +192,6 @@ tree.Ruleset.prototype = {
rule,
firstRuleset = true;
this.mergeRules(); //todo move to toCSS Visitor
env.tabLevel = (env.tabLevel || 0);
if (!this.root) {
@@ -447,42 +445,6 @@ tree.Ruleset.prototype = {
sel.push(new(tree.Selector)(elements));
}
}
},
mergeRules: function () {
var groups = {},
parts,
rule,
key;
for (var i = 0; i < this.rules.length; i++) {
rule = this.rules[i];
if ((rule instanceof tree.Rule) && rule.merge) {
key = [rule.name,
rule.important ? "!" : ""].join(",");
if (!groups[key]) {
parts = groups[key] = [];
} else {
this.rules.splice(i--, 1);
}
parts.push(rule);
}
}
Object.keys(groups).map(function (k) {
parts = groups[k];
if (parts.length > 1) {
rule = parts[0];
rule.value = new (tree.Value)(parts.map(function (p) {
return p.value;
}));
}
});
}
};
})(require('../tree'));