Upgrade to ExtJS 4.0.1 - Released 05/18/2011
[extjs.git] / jsbuilder / src / Parser / Statement / If.js
diff --git a/jsbuilder/src/Parser/Statement/If.js b/jsbuilder/src/Parser/Statement/If.js
new file mode 100644 (file)
index 0000000..544b52b
--- /dev/null
@@ -0,0 +1,57 @@
+Parser.Statement.If = Ext.extend(Parser.Statement, {
+    satisfied: false,
+
+    evaluate: function() {
+        var ret = true, n;
+
+        for (n in this.properties) {
+            if (!Parser.evaluate(n, this.properties[n])) {
+                ret = false;
+                break;
+            }
+        }
+
+        return (this.isInverted ? !ret : ret);
+    },
+
+    parse: function(stream) {
+        if (this.evaluate()) {
+            this.satisfied = true;
+        }
+
+        Parser.Statement.If.superclass.parse.apply(this, arguments);
+
+        if (!this.satisfied) {
+            return '';
+        }
+
+        return this.buffer;
+    },
+
+    onSubStatement: function(statement, stream) {
+        var parsed = statement.parse(stream),
+            satisfied = false;
+
+        if (statement.type === 'elseif') {
+            if (!this.satisfied) {
+                if (statement.evaluate()) {
+                    this.satisfied = true;
+                    satisfied = true;
+                }
+            }
+        } else if (statement.type === 'else') {
+            if (!this.satisfied) {
+                this.satisfied = true;
+                satisfied = true;
+            }
+        } else {
+            this.pushBuffer(parsed);
+            return;
+        }
+
+        if (satisfied) {
+            this.resetBuffer();
+            this.pushBuffer(parsed);
+        }
+    }
+});