Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / jsbuilder / src / Parser / Statement / If.js
1 Parser.Statement.If = Ext.extend(Parser.Statement, {
2     satisfied: false,
3
4     evaluate: function() {
5         var ret = true, n;
6
7         for (n in this.properties) {
8             if (!Parser.evaluate(n, this.properties[n])) {
9                 ret = false;
10                 break;
11             }
12         }
13
14         return (this.isInverted ? !ret : ret);
15     },
16
17     parse: function(stream) {
18         if (this.evaluate()) {
19             this.satisfied = true;
20         }
21
22         Parser.Statement.If.superclass.parse.apply(this, arguments);
23
24         if (!this.satisfied) {
25             return '';
26         }
27
28         return this.buffer;
29     },
30
31     onSubStatement: function(statement, stream) {
32         var parsed = statement.parse(stream),
33             satisfied = false;
34
35         if (statement.type === 'elseif') {
36             if (!this.satisfied) {
37                 if (statement.evaluate()) {
38                     this.satisfied = true;
39                     satisfied = true;
40                 }
41             }
42         } else if (statement.type === 'else') {
43             if (!this.satisfied) {
44                 this.satisfied = true;
45                 satisfied = true;
46             }
47         } else {
48             this.pushBuffer(parsed);
49             return;
50         }
51
52         if (satisfied) {
53             this.resetBuffer();
54             this.pushBuffer(parsed);
55         }
56     }
57 });