| /* |
| Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved. |
| Available via Academic Free License >= 2.1 OR the modified BSD license. |
| see: http://dojotoolkit.org/license for details |
| */ |
| |
| |
| if(!dojo._hasResource["dojox.dtl.tag.loop"]){ |
| dojo._hasResource["dojox.dtl.tag.loop"]=true; |
| dojo.provide("dojox.dtl.tag.loop"); |
| dojo.require("dojox.dtl._base"); |
| dojo.require("dojox.string.tokenize"); |
| (function(){ |
| var dd=dojox.dtl; |
| var _1=dd.tag.loop; |
| _1.CycleNode=dojo.extend(function(_2,_3,_4,_5){ |
| this.cyclevars=_2; |
| this.name=_3; |
| this.contents=_4; |
| this.shared=_5||{counter:-1,map:{}}; |
| },{render:function(_6,_7){ |
| if(_6.forloop&&!_6.forloop.counter0){ |
| this.shared.counter=-1; |
| } |
| ++this.shared.counter; |
| var _8=this.cyclevars[this.shared.counter%this.cyclevars.length]; |
| var _9=this.shared.map; |
| if(!_9[_8]){ |
| _9[_8]=new dd._Filter(_8); |
| } |
| _8=_9[_8].resolve(_6,_7); |
| if(this.name){ |
| _6[this.name]=_8; |
| } |
| this.contents.set(_8); |
| return this.contents.render(_6,_7); |
| },unrender:function(_a,_b){ |
| return this.contents.unrender(_a,_b); |
| },clone:function(_c){ |
| return new this.constructor(this.cyclevars,this.name,this.contents.clone(_c),this.shared); |
| }}); |
| _1.IfChangedNode=dojo.extend(function(_d,_e,_f){ |
| this.nodes=_d; |
| this._vars=_e; |
| this.shared=_f||{last:null,counter:0}; |
| this.vars=dojo.map(_e,function(_10){ |
| return new dojox.dtl._Filter(_10); |
| }); |
| },{render:function(_11,_12){ |
| if(_11.forloop){ |
| if(_11.forloop.counter<=this.shared.counter){ |
| this.shared.last=null; |
| } |
| this.shared.counter=_11.forloop.counter; |
| } |
| var _13; |
| if(this.vars.length){ |
| _13=dojo.toJson(dojo.map(this.vars,function(_14){ |
| return _14.resolve(_11); |
| })); |
| }else{ |
| _13=this.nodes.dummyRender(_11,_12); |
| } |
| if(_13!=this.shared.last){ |
| var _15=(this.shared.last===null); |
| this.shared.last=_13; |
| _11=_11.push(); |
| _11.ifchanged={firstloop:_15}; |
| _12=this.nodes.render(_11,_12); |
| _11=_11.pop(); |
| }else{ |
| _12=this.nodes.unrender(_11,_12); |
| } |
| return _12; |
| },unrender:function(_16,_17){ |
| return this.nodes.unrender(_16,_17); |
| },clone:function(_18){ |
| return new this.constructor(this.nodes.clone(_18),this._vars,this.shared); |
| }}); |
| _1.RegroupNode=dojo.extend(function(_19,key,_1a){ |
| this._expression=_19; |
| this.expression=new dd._Filter(_19); |
| this.key=key; |
| this.alias=_1a; |
| },{_push:function(_1b,_1c,_1d){ |
| if(_1d.length){ |
| _1b.push({grouper:_1c,list:_1d}); |
| } |
| },render:function(_1e,_1f){ |
| _1e[this.alias]=[]; |
| var _20=this.expression.resolve(_1e); |
| if(_20){ |
| var _21=null; |
| var _22=[]; |
| for(var i=0;i<_20.length;i++){ |
| var id=_20[i][this.key]; |
| if(_21!==id){ |
| this._push(_1e[this.alias],_21,_22); |
| _21=id; |
| _22=[_20[i]]; |
| }else{ |
| _22.push(_20[i]); |
| } |
| } |
| this._push(_1e[this.alias],_21,_22); |
| } |
| return _1f; |
| },unrender:function(_23,_24){ |
| return _24; |
| },clone:function(_25,_26){ |
| return this; |
| }}); |
| dojo.mixin(_1,{cycle:function(_27,_28){ |
| var _29=_28.split_contents(); |
| if(_29.length<2){ |
| throw new Error("'cycle' tag requires at least two arguments"); |
| } |
| if(_29[1].indexOf(",")!=-1){ |
| var _2a=_29[1].split(","); |
| _29=[_29[0]]; |
| for(var i=0;i<_2a.length;i++){ |
| _29.push("\""+_2a[i]+"\""); |
| } |
| } |
| if(_29.length==2){ |
| var _2b=_29[_29.length-1]; |
| if(!_27._namedCycleNodes){ |
| throw new Error("No named cycles in template: '"+_2b+"' is not defined"); |
| } |
| if(!_27._namedCycleNodes[_2b]){ |
| throw new Error("Named cycle '"+_2b+"' does not exist"); |
| } |
| return _27._namedCycleNodes[_2b]; |
| } |
| if(_29.length>4&&_29[_29.length-2]=="as"){ |
| var _2b=_29[_29.length-1]; |
| var _2c=new _1.CycleNode(_29.slice(1,_29.length-2),_2b,_27.create_text_node()); |
| if(!_27._namedCycleNodes){ |
| _27._namedCycleNodes={}; |
| } |
| _27._namedCycleNodes[_2b]=_2c; |
| }else{ |
| _2c=new _1.CycleNode(_29.slice(1),null,_27.create_text_node()); |
| } |
| return _2c; |
| },ifchanged:function(_2d,_2e){ |
| var _2f=_2e.contents.split(); |
| var _30=_2d.parse(["endifchanged"]); |
| _2d.delete_first_token(); |
| return new _1.IfChangedNode(_30,_2f.slice(1)); |
| },regroup:function(_31,_32){ |
| var _33=dojox.string.tokenize(_32.contents,/(\s+)/g,function(_34){ |
| return _34; |
| }); |
| if(_33.length<11||_33[_33.length-3]!="as"||_33[_33.length-7]!="by"){ |
| throw new Error("Expected the format: regroup list by key as newList"); |
| } |
| var _35=_33.slice(2,-8).join(""); |
| var key=_33[_33.length-5]; |
| var _36=_33[_33.length-1]; |
| return new _1.RegroupNode(_35,key,_36); |
| }}); |
| })(); |
| } |