mirror of
https://github.com/less/less.js.git
synced 2026-01-22 21:58:14 -05:00
move rule duplication removal into the toCSS visitor
This commit is contained in:
@@ -111,6 +111,8 @@
|
||||
}
|
||||
visitArgs.visitDeeper = false;
|
||||
|
||||
this._removeDuplicateRules(rulesetNode.rules);
|
||||
|
||||
// now decide whether we keep the ruleset
|
||||
if (rulesetNode.rules.length > 0 && rulesetNode.paths.length > 0) {
|
||||
rulesets.splice(0, 0, rulesetNode);
|
||||
@@ -126,6 +128,31 @@
|
||||
return rulesets[0];
|
||||
}
|
||||
return rulesets;
|
||||
},
|
||||
|
||||
_removeDuplicateRules: function(rules) {
|
||||
// remove duplicates
|
||||
var ruleCache = {},
|
||||
ruleList, rule, i;
|
||||
for(i = rules.length - 1; i >= 0 ; i--) {
|
||||
rule = rules[i];
|
||||
if (rule instanceof tree.Rule) {
|
||||
if (!ruleCache[rule.name]) {
|
||||
ruleCache[rule.name] = rule;
|
||||
} else {
|
||||
ruleList = ruleCache[rule.name];
|
||||
if (ruleList instanceof tree.Rule) {
|
||||
ruleList = ruleCache[rule.name] = [ruleCache[rule.name].toCSS(this._env)];
|
||||
}
|
||||
var ruleCSS = rule.toCSS(this._env);
|
||||
if (ruleList.indexOf(ruleCSS) !== -1) {
|
||||
rules.splice(i, 1);
|
||||
} else {
|
||||
ruleList.push(ruleCSS);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -185,7 +185,6 @@ tree.Ruleset.prototype = {
|
||||
toCSS: function (env) {
|
||||
var i, css = [], // The CSS output
|
||||
rules = [], // node.Rule instances
|
||||
_rules = [], //
|
||||
rulesets = [], // node.Ruleset instances
|
||||
ruleNodes = [],
|
||||
rulesetNodes = [],
|
||||
@@ -245,16 +244,6 @@ tree.Ruleset.prototype = {
|
||||
}).join(env.compress ? ',' : (',\n' + tabSetStr));
|
||||
|
||||
if (selector) {
|
||||
//TODO need to do this in the toCSS visitor
|
||||
//only bother doing if compression is on?
|
||||
// Remove duplicates
|
||||
for (var i = rules.length - 1; i >= 0; i--) {
|
||||
if (rules[i].slice(0, 2) === "/*" || _rules.indexOf(rules[i]) === -1) {
|
||||
_rules.unshift(rules[i]);
|
||||
}
|
||||
}
|
||||
rules = _rules;
|
||||
|
||||
if (debugInfo) {
|
||||
css.push(debugInfo);
|
||||
css.push(tabSetStr);
|
||||
|
||||
Reference in New Issue
Block a user