From 7dd31ff654b3e26724213435c18a4e0a0dff1dbb Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Thu, 5 Jan 2012 21:31:39 +0100 Subject: [PATCH] improve import support with media features --- lib/less/tree/directive.js | 1 + lib/less/tree/import.js | 7 +++---- lib/less/tree/ruleset.js | 3 ++- test/css/import.css | 5 +++++ test/less/import.less | 1 + test/less/import/import-test-e.less | 2 ++ 6 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 test/less/import/import-test-e.less diff --git a/lib/less/tree/directive.js b/lib/less/tree/directive.js index b06cf7d1..3654acc2 100644 --- a/lib/less/tree/directive.js +++ b/lib/less/tree/directive.js @@ -6,6 +6,7 @@ tree.Directive = function (name, value, features) { if (Array.isArray(value)) { this.ruleset = new(tree.Ruleset)([], value); + this.ruleset.allowImports = true; } else { this.value = value; } diff --git a/lib/less/tree/import.js b/lib/less/tree/import.js index 5e65aa7a..aa203b95 100644 --- a/lib/less/tree/import.js +++ b/lib/less/tree/import.js @@ -57,13 +57,12 @@ tree.Import.prototype = { } }, eval: function (env) { - var ruleset; + var ruleset, features = this.features && this.features.eval(env); if (this.css) { - this.features = this.features && this.features.eval(env); return this; } else { - ruleset = new(tree.Ruleset)(null, this.root.rules.slice(0)); + ruleset = new(tree.Ruleset)([], this.root.rules.slice(0)); for (var i = 0; i < ruleset.rules.length; i++) { if (ruleset.rules[i] instanceof tree.Import) { @@ -73,7 +72,7 @@ tree.Import.prototype = { [i, 1].concat(ruleset.rules[i].eval(env))); } } - return ruleset.rules; + return this.features ? new(tree.Directive)('@media', ruleset.rules, this.features.value) : ruleset.rules; } } }; diff --git a/lib/less/tree/ruleset.js b/lib/less/tree/ruleset.js index 0747cfa5..17bb7846 100644 --- a/lib/less/tree/ruleset.js +++ b/lib/less/tree/ruleset.js @@ -11,12 +11,13 @@ tree.Ruleset.prototype = { var ruleset = new(tree.Ruleset)(selectors, this.rules.slice(0)); ruleset.root = this.root; + ruleset.allowImports = this.allowImports; // push the current ruleset to the frames stack env.frames.unshift(ruleset); // Evaluate imports - if (ruleset.root) { + if (ruleset.root || ruleset.allowImports) { for (var i = 0; i < ruleset.rules.length; i++) { if (ruleset.rules[i] instanceof tree.Import) { Array.prototype.splice diff --git a/test/css/import.css b/test/css/import.css index 15c94f04..89dc162c 100644 --- a/test/css/import.css +++ b/test/css/import.css @@ -16,3 +16,8 @@ width: 10px; height: 30%; } +@media screen and (max-width: 600px) { + body { + width: 100%; + } +} diff --git a/test/less/import.less b/test/less/import.less index 02a7fda5..13ed5c5a 100644 --- a/test/less/import.less +++ b/test/less/import.less @@ -8,3 +8,4 @@ width: 10px; height: @a + 10%; } +@import "import/import-test-e" screen and (max-width: 600px); diff --git a/test/less/import/import-test-e.less b/test/less/import/import-test-e.less new file mode 100644 index 00000000..98b84b0a --- /dev/null +++ b/test/less/import/import-test-e.less @@ -0,0 +1,2 @@ + +body { width: 100% }