Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.dtl.tag.logic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.dtl.tag.logic"] = true;dojo.provide("dojox.dtl.tag.logic");dojo.require("dojox.dtl._base");dojox.dtl.tag.logic.IfNode = function(bools, trues, falses, type){this.bools = bools;this.trues = trues;this.falses = falses;this.type = type;}dojo.extend(dojox.dtl.tag.logic.IfNode, {render: function(context, buffer){if(this.type == "or"){for(var i = 0, bool; bool = this.bools[i]; i++){var ifnot = bool[0];var filter = bool[1];var value = filter.resolve(context);if((value && !ifnot) || (ifnot && !value)){if(this.falses){buffer = this.falses.unrender(context, buffer);}return this.trues.render(context, buffer, this);}buffer = this.trues.unrender(context, buffer);if(this.falses) return this.falses.render(context, buffer, this);}}else{for(var i = 0, bool; bool = this.bools[i]; i++){var ifnot = bool[0];var filter = bool[1];var value = filter.resolve(context);if(!((value && !ifnot) || (ifnot && !value))){if(this.trues){buffer = this.trues.unrender(context, buffer);}return this.falses.render(context, buffer, this);}buffer = this.falses.unrender(context, buffer);if(this.falses) return this.trues.render(context, buffer, this);}}return buffer;},unrender: function(context, buffer){if(this.trues) buffer = this.trues.unrender(context, buffer);if(this.falses) buffer = this.falses.unrender(context, buffer);return buffer;},clone: function(buffer){var trues = this.trues;var falses = this.falses;if(trues){trues = trues.clone(buffer);}if(falses){falses = falses.clone(buffer);}return new this.constructor(this.bools, trues, falses, this.type);},toString: function(){ return "dojox.dtl.tag.logic.IfNode"; }});dojox.dtl.tag.logic.ForNode = function(assign, loop, reversed, nodelist){this.assign = assign;this.loop = loop;this.reversed = reversed;this.nodelist = nodelist;this.pool = [];}dojo.extend(dojox.dtl.tag.logic.ForNode, {render: function(context, buffer){var parentloop = {};if(context.forloop){parentloop = context.forloop;}var items = dojox.dtl.resolveVariable(this.loop, context);context.push();for(var i = items.length; i < this.pool.length; i++){this.pool[i].unrender(context, buffer);}if(this.reversed){items = items.reversed();}var j = 0;for(var i in items){var item = items[i];context.forloop = {key: i,counter0: j,counter: j + 1,revcounter0: items.length - j - 1,revcounter: items.length - j,first: j == 0,parentloop: parentloop};context[this.assign] = item;if(j + 1 > this.pool.length){this.pool.push(this.nodelist.clone(buffer));}buffer = this.pool[j].render(context, buffer, this);++j;}context.pop();return buffer;},unrender: function(context, buffer){for(var i = 0, pool; pool = this.pool[i]; i++){buffer = pool.unrender(context, buffer);}return buffer;},clone: function(buffer){return new this.constructor(this.assign, this.loop, this.reversed, this.nodelist.clone(buffer));},toString: function(){ return "dojox.dtl.tag.logic.ForNode"; }});dojox.dtl.tag.logic.if_ = function(parser, text){var parts = text.split(/\s+/g);var type;var bools = [];parts.shift();text = parts.join(" ");parts = text.split(" and ");if(parts.length == 1){type = "or";parts = text.split(" or ");}else{type = "and";for(var i = 0; i < parts.length; i++){if(parts[i] == "or"){throw new Error("'if' tags can't mix 'and' and 'or'");}}}for(var i = 0, part; part = parts[i]; i++){var not = false;if(part.indexOf("not ") == 0){part = part.substring(4);not = true;}bools.push([not, new dojox.dtl.Filter(part)]);}var trues = parser.parse(["else", "endif"]);var falses = false;var token = parser.next();if(token.text == "else"){var falses = parser.parse(["endif"]);parser.next();}return new dojox.dtl.tag.logic.IfNode(bools, trues, falses, type);}dojox.dtl.tag.logic.for_ = function(parser, text){var parts = text.split(/\s+/g);var reversed = parts.length == 5;var nodelist = parser.parse(["endfor"]);parser.next();return new dojox.dtl.tag.logic.ForNode(parts[1], parts[3], reversed, nodelist);}}