--- /dev/null
+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);
+ }
+ }
+});