📄 logic.js
字号:
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);}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -