New file |
0,0 → 1,89 |
if(!dojo._hasResource["dojox.dtl.tag.loop"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.dtl.tag.loop"] = true; |
dojo.provide("dojox.dtl.tag.loop"); |
|
dojo.require("dojox.dtl._base"); |
|
dojox.dtl.tag.loop.CycleNode = function(cyclevars, name, VarNode){ |
this._cyclevars = cyclevars; |
this._counter = -1 |
this._name = name; |
this._map = {}; |
this._VarNode = VarNode; |
} |
dojo.extend(dojox.dtl.tag.loop.CycleNode, { |
render: function(context, buffer){ |
if(context.forloop && !context.forloop.counter0){ |
this._counter = -1; |
} |
|
++this._counter; |
var value = this._cyclevars[this._counter % this._cyclevars.length]; |
if(this._name){ |
context[this._name] = value; |
} |
if(!this._map[value]){ |
this._map[value] = {}; |
} |
var node = this._map[value][this._counter] = new this._VarNode(value); |
|
return node.render(context, buffer, this); |
}, |
unrender: function(context, buffer){ |
return buffer; |
}, |
clone: function(){ |
return new this.constructor(this._cyclevars, this._name); |
}, |
_onEnd: function(){ |
this._counter = -1; |
}, |
toString: function(){ return "dojox.dtl.tag.loop.CycleNode"; } |
}); |
|
dojox.dtl.tag.loop.cycle = function(parser, text){ |
// summary: Cycle among the given strings each time this tag is encountered |
var args = text.split(" "); |
|
if(args.length < 2){ |
throw new Error("'cycle' tag requires at least two arguments"); |
} |
|
if(args[1].indexOf(",") != -1){ |
var vars = args[1].split(","); |
args = [args[0]]; |
for(var i = 0; i < vars.length; i++){ |
args.push('"' + vars[i] + '"'); |
} |
} |
|
if(args.length == 2){ |
var name = args[args.length - 1]; |
|
if(!parser._namedCycleNodes){ |
throw new Error("No named cycles in template: '" + name + "' is not defined"); |
} |
if(!parser._namedCycleNodes[name]){ |
throw new Error("Named cycle '" + name + "' does not exist"); |
} |
|
return parser._namedCycleNodes[name]; |
} |
|
if(args.length > 4 && args[args.length - 2] == "as"){ |
var name = args[args.length - 1]; |
|
var node = new dojox.dtl.tag.loop.CycleNode(args.slice(1, args.length - 2), name, parser.getVarNode()); |
|
if(!parser._namedCycleNodes){ |
parser._namedCycleNodes = {}; |
} |
parser._namedCycleNodes[name] = node; |
}else{ |
node = new dojox.dtl.tag.loop.CycleNode(args.slice(1), null, parser.getVarNode()); |
} |
|
return node; |
} |
|
} |