blob: 3368f9ef0beccae79662daa3860dddefbca57b3d [file] [log] [blame]
/*
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.loader"]){
dojo._hasResource["dojox.dtl.tag.loader"]=true;
dojo.provide("dojox.dtl.tag.loader");
dojo.require("dojox.dtl._base");
(function(){
var dd=dojox.dtl;
var _2=dd.tag.loader;
_2.BlockNode=dojo.extend(function(_3,_4){
this.name=_3;
this.nodelist=_4;
},{"super":function(){
if(this.parent){
var _5=this.parent.nodelist.dummyRender(this.context,null,true);
if(typeof _5=="string"){
_5=new String(_5);
}
_5.safe=true;
return _5;
}
return "";
},render:function(_6,_7){
var _8=this.name;
var _9=this.nodelist;
var _a;
if(_7.blocks){
var _b=_7.blocks[_8];
if(_b){
_a=_b.parent;
_9=_b.nodelist;
_b.used=true;
}
}
this.rendered=_9;
_6=_6.push();
this.context=_6;
this.parent=null;
if(_9!=this.nodelist){
this.parent=this;
}
_6.block=this;
if(_7.getParent){
var _c=_7.getParent();
var _d=dojo.connect(_7,"onSetParent",function(_e,up,_10){
if(up&&_10){
_7.setParent(_c);
}
});
}
_7=_9.render(_6,_7,this);
_d&&dojo.disconnect(_d);
_6=_6.pop();
return _7;
},unrender:function(_11,_12){
return this.rendered.unrender(_11,_12);
},clone:function(_13){
return new this.constructor(this.name,this.nodelist.clone(_13));
},toString:function(){
return "dojox.dtl.tag.loader.BlockNode";
}});
_2.ExtendsNode=dojo.extend(function(_14,_15,_16,_17,key){
this.getTemplate=_14;
this.nodelist=_15;
this.shared=_16;
this.parent=_17;
this.key=key;
},{parents:{},getParent:function(_19){
var _1a=this.parent;
if(!_1a){
var _1b;
_1a=this.parent=_19.get(this.key,false);
if(!_1a){
throw new Error("extends tag used a variable that did not resolve");
}
if(typeof _1a=="object"){
var url=_1a.url||_1a.templatePath;
if(_1a.shared){
this.shared=true;
}
if(url){
_1a=this.parent=url.toString();
}else{
if(_1a.templateString){
_1b=_1a.templateString;
_1a=this.parent=" ";
}else{
_1a=this.parent=this.parent.toString();
}
}
}
if(_1a&&_1a.indexOf("shared:")===0){
this.shared=true;
_1a=this.parent=_1a.substring(7,_1a.length);
}
}
if(!_1a){
throw new Error("Invalid template name in 'extends' tag.");
}
if(_1a.render){
return _1a;
}
if(this.parents[_1a]){
return this.parents[_1a];
}
this.parent=this.getTemplate(_1b||dojox.dtl.text.getTemplateString(_1a));
if(this.shared){
this.parents[_1a]=this.parent;
}
return this.parent;
},render:function(_1d,_1e){
var _1f=this.getParent(_1d);
_1f.blocks=_1f.blocks||{};
_1e.blocks=_1e.blocks||{};
for(var i=0,_21;_21=this.nodelist.contents[i];i++){
if(_21 instanceof dojox.dtl.tag.loader.BlockNode){
var old=_1f.blocks[_21.name];
if(old&&old.nodelist!=_21.nodelist){
_1e=old.nodelist.unrender(_1d,_1e);
}
_1f.blocks[_21.name]=_1e.blocks[_21.name]={shared:this.shared,nodelist:_21.nodelist,used:false};
}
}
this.rendered=_1f;
return _1f.nodelist.render(_1d,_1e,this);
},unrender:function(_23,_24){
return this.rendered.unrender(_23,_24,this);
},toString:function(){
return "dojox.dtl.block.ExtendsNode";
}});
_2.IncludeNode=dojo.extend(function(_25,_26,_27,_28,_29){
this._path=_25;
this.constant=_26;
this.path=(_26)?_25:new dd._Filter(_25);
this.getTemplate=_27;
this.text=_28;
this.parsed=(arguments.length==5)?_29:true;
},{_cache:[{},{}],render:function(_2a,_2b){
var _2c=((this.constant)?this.path:this.path.resolve(_2a)).toString();
var _2d=Number(this.parsed);
var _2e=false;
if(_2c!=this.last){
_2e=true;
if(this.last){
_2b=this.unrender(_2a,_2b);
}
this.last=_2c;
}
var _2f=this._cache[_2d];
if(_2d){
if(!_2f[_2c]){
_2f[_2c]=dd.text._resolveTemplateArg(_2c,true);
}
if(_2e){
var _30=this.getTemplate(_2f[_2c]);
this.rendered=_30.nodelist;
}
return this.rendered.render(_2a,_2b,this);
}else{
if(this.text instanceof dd._TextNode){
if(_2e){
this.rendered=this.text;
this.rendered.set(dd.text._resolveTemplateArg(_2c,true));
}
return this.rendered.render(_2a,_2b);
}else{
if(!_2f[_2c]){
var _31=[];
var div=document.createElement("div");
div.innerHTML=dd.text._resolveTemplateArg(_2c,true);
var _33=div.childNodes;
while(_33.length){
var _34=div.removeChild(_33[0]);
_31.push(_34);
}
_2f[_2c]=_31;
}
if(_2e){
this.nodelist=[];
var _35=true;
for(var i=0,_37;_37=_2f[_2c][i];i++){
this.nodelist.push(_37.cloneNode(true));
}
}
for(var i=0,_38;_38=this.nodelist[i];i++){
_2b=_2b.concat(_38);
}
}
}
return _2b;
},unrender:function(_39,_3a){
if(this.rendered){
_3a=this.rendered.unrender(_39,_3a);
}
if(this.nodelist){
for(var i=0,_3c;_3c=this.nodelist[i];i++){
_3a=_3a.remove(_3c);
}
}
return _3a;
},clone:function(_3d){
return new this.constructor(this._path,this.constant,this.getTemplate,this.text.clone(_3d),this.parsed);
}});
dojo.mixin(_2,{block:function(_3e,_3f){
var _40=_3f.contents.split();
var _41=_40[1];
_3e._blocks=_3e._blocks||{};
_3e._blocks[_41]=_3e._blocks[_41]||[];
_3e._blocks[_41].push(_41);
var _42=_3e.parse(["endblock","endblock "+_41]).rtrim();
_3e.next_token();
return new dojox.dtl.tag.loader.BlockNode(_41,_42);
},extends_:function(_43,_44){
var _45=_44.contents.split();
var _46=false;
var _47=null;
var key=null;
if(_45[1].charAt(0)=="\""||_45[1].charAt(0)=="'"){
_47=_45[1].substring(1,_45[1].length-1);
}else{
key=_45[1];
}
if(_47&&_47.indexOf("shared:")==0){
_46=true;
_47=_47.substring(7,_47.length);
}
var _49=_43.parse();
return new dojox.dtl.tag.loader.ExtendsNode(_43.getTemplate,_49,_46,_47,key);
},include:function(_4a,_4b){
var _4c=_4b.contents.split();
if(_4c.length!=2){
throw new Error(_4c[0]+" tag takes one argument: the name of the template to be included");
}
var _4d=_4c[1];
var _4e=false;
if((_4d.charAt(0)=="\""||_4d.slice(-1)=="'")&&_4d.charAt(0)==_4d.slice(-1)){
_4d=_4d.slice(1,-1);
_4e=true;
}
return new _2.IncludeNode(_4d,_4e,_4a.getTemplate,_4a.create_text_node());
},ssi:function(_4f,_50){
var _51=_50.contents.split();
var _52=false;
if(_51.length==3){
_52=(_51.pop()=="parsed");
if(!_52){
throw new Error("Second (optional) argument to ssi tag must be 'parsed'");
}
}
var _53=_2.include(_4f,new dd.Token(_50.token_type,_51.join(" ")));
_53.parsed=_52;
return _53;
}});
})();
}