diff --git a/Makefile b/Makefile index 219882d0..33554fb4 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,7 @@ less: ${SRC}/env.js\ ${SRC}/visitor.js\ ${SRC}/import-visitor.js\ + ${SRC}/join-selector-visitor.js\ ${SRC}/browser.js\ build/amd.js >> ${DIST} @@echo "})(window);" >> ${DIST} @@ -64,6 +65,7 @@ rhino: ${SRC}/env.js\ ${SRC}/visitor.js\ ${SRC}/import-visitor.js\ + ${SRC}/join-selector-visitor.js\ ${SRC}/functions.js\ ${SRC}/colors.js\ ${SRC}/tree/*.js\ diff --git a/lib/less/index.js b/lib/less/index.js index 2f9e154c..e483df8a 100644 --- a/lib/less/index.js +++ b/lib/less/index.js @@ -217,5 +217,6 @@ require('./functions'); require('./colors'); require('./visitor.js'); require('./import-visitor.js'); +require('./join-selector-visitor.js'); for (var k in less) { exports[k] = less[k]; } diff --git a/lib/less/join-selector-visitor.js b/lib/less/join-selector-visitor.js new file mode 100644 index 00000000..cf0c6685 --- /dev/null +++ b/lib/less/join-selector-visitor.js @@ -0,0 +1,34 @@ +(function (tree) { + tree.joinSelectorVisitor = function() { + this.context = []; + this._visitor = new tree.visitor(this); + }; + + tree.joinSelectorVisitor.prototype = { + run: function (root) { + return this._visitor.visit(root); + }, + visitRule: function (ruleNode, visitArgs) { + visitArgs.visitDeeper = false; + return ruleNode; + }, + visitMixinDefinition: function (mixinDefinitionNode, visitArgs) { + visitArgs.visitDeeper = false; + return mixinDefinitionNode; + }, + + visitRuleset: function (rulesetNode, visitArgs) { + + return rulesetNode; + }, + visitMedia: function (rulesetNode, visitArgs) { + + return rulesetNode; + }, + visitDirective: function (rulesetNode, visitArgs) { + + return rulesetNode; + } + }; + +})(require('./tree')); \ No newline at end of file diff --git a/lib/less/parser.js b/lib/less/parser.js index f88e5c3d..13f3cbb1 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -404,8 +404,12 @@ less.Parser = function Parser(env) { } try { - var css = evaluate.call(this, evalEnv) - .toCSS([], { + var evaldRoot = evaluate.call(this, evalEnv); + + new(tree.joinSelectorVisitor)() + .run(evaldRoot); + + var css = evaldRoot.toCSS([], { compress: options.compress || false, dumpLineNumbers: env.dumpLineNumbers, strictUnits: options.strictUnits === false ? false : true});