From c730829d1d609f250b522775fa1745537f6b77a4 Mon Sep 17 00:00:00 2001 From: Luke Page Date: Sun, 16 Feb 2014 17:50:51 +0000 Subject: [PATCH] Fix one issue with media queries and detached rulesets, one to go --- lib/less/tree/media.js | 2 ++ lib/less/tree/rule.js | 3 +-- test/css/detached-rulesets.css | 17 +++++++++++++ test/less/detached-rulesets.less | 41 ++++++++++++++++++++++++++++++-- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/lib/less/tree/media.js b/lib/less/tree/media.js index c3b85107..4531cf4c 100644 --- a/lib/less/tree/media.js +++ b/lib/less/tree/media.js @@ -147,6 +147,8 @@ tree.Media.prototype = { } }, bubbleSelectors: function (selectors) { + if (!selectors) + return; this.rules = [new(tree.Ruleset)(selectors.slice(0), [this.rules[0]])]; } }; diff --git a/lib/less/tree/rule.js b/lib/less/tree/rule.js index ac90049c..5567b076 100644 --- a/lib/less/tree/rule.js +++ b/lib/less/tree/rule.js @@ -2,7 +2,7 @@ tree.Rule = function (name, value, important, merge, index, currentFileInfo, inline) { this.name = name; - this.value = (value instanceof tree.Value) ? value : new(tree.Value)([value]); + this.value = (value instanceof tree.Value || value instanceof tree.Ruleset) ? value : new(tree.Value)([value]); this.important = important ? ' ' + important.trim() : ''; this.merge = merge; this.index = index; @@ -46,7 +46,6 @@ tree.Rule.prototype = { evaldValue = this.value.eval(env); if (!this.variable && evaldValue.type === "Ruleset") { - console.log(this.index); throw { message: "Rulesets cannot be evaluated on a property.", index: this.index, filename: this.currentFileInfo.filename }; } diff --git a/test/css/detached-rulesets.css b/test/css/detached-rulesets.css index d723a0c4..b9642d4e 100644 --- a/test/css/detached-rulesets.css +++ b/test/css/detached-rulesets.css @@ -45,3 +45,20 @@ html.lt-ie9 header { .without-mixins { b: 1; } +@media (orientation: portrait) { + /* .wrap-media-mixin({ + @media tv { + .triple-wrapped-mq { + triple: true; + } + } + });*/ +} +@media (orientation: portrait) and tv { + .my-selector { + background-color: black; + } +} +.a { + test: test; +} diff --git a/test/less/detached-rulesets.less b/test/less/detached-rulesets.less index 787cc19b..5af2a745 100644 --- a/test/less/detached-rulesets.less +++ b/test/less/detached-rulesets.less @@ -10,8 +10,8 @@ .wrap-selector { @c: visible; @ruleset(); - visible-one: @b; - visible-two: @c; + visible-one: @b; + visible-two: @c; } }; @@ -63,3 +63,40 @@ header { .without-mixins { @ruleset-2(); } +@my-ruleset: { + .my-selector { + @media tv { + background-color: black; + } + } + }; +@media (orientation:portrait) { + @my-ruleset(); + // doesn't work yet +/* .wrap-media-mixin({ + @media tv { + .triple-wrapped-mq { + triple: true; + } + } + });*/ +} +.wrap-media-mixin(@ruleset) { + @media widescreen { + @media print { + @ruleset(); + } + @ruleset(); + } + @ruleset(); +} +// unlocking mixins +@my-mixins: { + .mixin() { + test: test; + } +}; +@my-mixins(); +.a { + .mixin(); +} \ No newline at end of file