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