~george-edison55/less/trunk

« back to all changes in this revision

Viewing changes to lib/less/tree/expression.js

  • Committer: Nathan Osman
  • Date: 2013-04-16 22:43:51 UTC
  • Revision ID: admin@quickmediasolutions.com-20130416224351-5juqujuu4itkwpat
Initial commit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(function (tree) {
 
2
 
 
3
tree.Expression = function (value) { this.value = value; };
 
4
tree.Expression.prototype = {
 
5
    type: "Expression",
 
6
    accept: function (visitor) {
 
7
        this.value = visitor.visit(this.value);
 
8
    },
 
9
    eval: function (env) {
 
10
        var returnValue,
 
11
            inParenthesis = this.parens && !this.parensInOp,
 
12
            doubleParen = false;
 
13
        if (inParenthesis) {
 
14
            env.inParenthesis();
 
15
        }
 
16
        if (this.value.length > 1) {
 
17
            returnValue = new(tree.Expression)(this.value.map(function (e) {
 
18
                return e.eval(env);
 
19
            }));
 
20
        } else if (this.value.length === 1) {
 
21
            if (this.value[0].parens && !this.value[0].parensInOp) {
 
22
                doubleParen = true;
 
23
            }
 
24
            returnValue = this.value[0].eval(env);
 
25
        } else {
 
26
            returnValue = this;
 
27
        }
 
28
        if (inParenthesis) {
 
29
            env.outOfParenthesis();
 
30
        }
 
31
        if (this.parens && this.parensInOp && !(env.isMathsOn()) && !doubleParen) {
 
32
            returnValue = new(tree.Paren)(returnValue);
 
33
        }
 
34
        return returnValue;
 
35
    },
 
36
    toCSS: function (env) {
 
37
        return this.value.map(function (e) {
 
38
            return e.toCSS ? e.toCSS(env) : '';
 
39
        }).join(' ');
 
40
    },
 
41
    throwAwayComments: function () {
 
42
        this.value = this.value.filter(function(v) {
 
43
            return !(v instanceof tree.Comment);
 
44
        });
 
45
    }
 
46
};
 
47
 
 
48
})(require('../tree'));