Skip to content

Commit

Permalink
Issue less#122: Updated directive class to support parsing variables …
Browse files Browse the repository at this point in the history
…in media queries. Added unit test.
  • Loading branch information
razialx committed Dec 2, 2011
1 parent 2af0f62 commit 06fb100
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 4 deletions.
9 changes: 8 additions & 1 deletion lib/less/parser.js
Expand Up @@ -972,7 +972,14 @@ less.Parser = function Parser(env) {

if (value = $(this['import'])) {
return value;
} else if (name = $(/^@media|@page/) || $(/^@(?:-webkit-|-moz-)?keyframes/)) {
} else if (name = $(/^@media/)) {
var nodes = [], n;
while(n = $(this.entity) || $(/^[\(|\)|:]/)) {
nodes.push( (typeof n == 'string'? new tree.Keyword(n):n));
}
rules = $(this.block);
return new(tree.Directive)(name, rules, nodes);
} else if (name = $(/^@page/) || $(/^@(?:-webkit-|-moz-)?keyframes/)) {
types = ($(/^[^{]+/) || '').trim();
if (rules = $(this.block)) {
return new(tree.Directive)(name + " " + types, rules);
Expand Down
20 changes: 17 additions & 3 deletions lib/less/tree/directive.js
@@ -1,25 +1,39 @@
(function (tree) {

tree.Directive = function (name, value) {
tree.Directive = function (name, value, nodes) {
this.name = name;
if (Array.isArray(value)) {
this.ruleset = new(tree.Ruleset)([], value);
} else {
this.value = value;
}
this.nodes = (typeof(nodes) != 'undefined' ? nodes : null);
};
tree.Directive.prototype = {
toCSS: function (ctx, env) {
var node_css = '';
if(this.nodes) {
for(var n in this.nodes) {
node_css += ' ' + this.nodes[n].toCSS(ctx, env) ;
}
/* Remove extra spaces in query synax so unit tests pass */
node_css = node_css.replace(/\(\s+([^\s]+)\s+:\s+([^\s]+)\s\)/g,'($1:$2)');
}
if (this.ruleset) {
this.ruleset.root = true;
return this.name + (env.compress ? '{' : ' {\n ') +
return this.name + node_css +(env.compress ? '{' : ' {\n ') +
this.ruleset.toCSS(ctx, env).trim().replace(/\n/g, '\n ') +
(env.compress ? '}': '\n}\n');
} else {
return this.name + ' ' + this.value.toCSS() + ';\n';
return this.name + node_css + ' ' + this.value.toCSS() + ';\n';
}
},
eval: function (env) {
if(this.nodes) {
for(var i = 0; i < this.nodes.length; i++) {
this.nodes[i] = this.nodes[i].eval(env);
}
}
env.frames.unshift(this);
this.ruleset = this.ruleset && this.ruleset.eval(env);
env.frames.shift();
Expand Down
5 changes: 5 additions & 0 deletions test/css/media.css
Expand Up @@ -19,3 +19,8 @@
float: none;
}
}
@media screen and (min-width:42) {
div {
color: #222;
}
}
3 changes: 3 additions & 0 deletions test/less/media.less
Expand Up @@ -23,3 +23,6 @@
@media all and (orientation:portrait) {
aside { float: none; }
}
@media screen and (min-width: @var) {
div { color: #222; }
}

0 comments on commit 06fb100

Please sign in to comment.