diff --git a/lib/less/to-css-visitor.js b/lib/less/to-css-visitor.js index 868cb0f4..03994a90 100644 --- a/lib/less/to-css-visitor.js +++ b/lib/less/to-css-visitor.js @@ -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); + } + } + } + } } }; diff --git a/lib/less/tree/ruleset.js b/lib/less/tree/ruleset.js index 92f5540c..f97b6034 100644 --- a/lib/less/tree/ruleset.js +++ b/lib/less/tree/ruleset.js @@ -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);