From 335d153d046b9544420fbdbb8ce507f2d3b4ae83 Mon Sep 17 00:00:00 2001 From: cloudhead Date: Sun, 23 May 2010 12:50:20 -0400 Subject: [PATCH] treat Directive like a Ruleset --- lib/less/tree/directive.js | 33 ++++++++++++++++++++------------- test/less/media.less | 2 +- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/lib/less/tree/directive.js b/lib/less/tree/directive.js index ce483c4c..5909db94 100644 --- a/lib/less/tree/directive.js +++ b/lib/less/tree/directive.js @@ -3,21 +3,28 @@ if (typeof(require) !== 'undefined') { var tree = require('less/tree') } tree.Directive = function Directive(name, value) { this.name = name; if (Array.isArray(value)) { - this.rules = new(tree.Ruleset)([], value); + this.ruleset = new(tree.Ruleset)([], value); } else { this.value = value; } }; -tree.Directive.prototype.toCSS = function (ctx, env) { - if (this.rules) { - this.rules.root = true; - return this.name + ' {\n ' + - this.rules.toCSS(ctx, env).trim().replace(/\n/g, '\n ') + '\n}\n'; - } else { - return this.name + ' ' + this.value.toCSS() + ';\n'; - } +tree.Directive.prototype = { + toCSS: function (ctx, env) { + if (this.ruleset) { + this.ruleset.root = true; + return this.name + ' {\n ' + + this.ruleset.toCSS(ctx, env).trim().replace(/\n/g, '\n ') + '\n}\n'; + } else { + return this.name + ' ' + this.value.toCSS() + ';\n'; + } + }, + eval: function (env) { + env.frames.unshift(this); + this.ruleset && this.ruleset.evalRules(env); + env.frames.shift(); + return this; + }, + variable: function (name) { return tree.Ruleset.prototype.variable.call(this.ruleset, name) }, + find: function () { return tree.Ruleset.prototype.find.apply(this.ruleset, arguments) }, + rulesets: function () { return tree.Ruleset.prototype.rulesets.apply(this.ruleset) } }; -tree.Directive.prototype.eval = function (env) { - this.rules && this.rules.evalRules(env); - return this; -} diff --git a/test/less/media.less b/test/less/media.less index 5d529be7..ccfcbbdc 100644 --- a/test/less/media.less +++ b/test/less/media.less @@ -15,7 +15,7 @@ } } -@base: 8; @media screen { + @base: 8; body { max-width: @base * 60; } }