93 lines
2.3 KiB
JavaScript
93 lines
2.3 KiB
JavaScript
|
dojo.provide("dojox.dtl._Templated");
|
||
|
dojo.require("dijit._Templated");
|
||
|
dojo.require("dojox.dtl._base");
|
||
|
|
||
|
dojo.declare("dojox.dtl._Templated", dijit._Templated, {
|
||
|
_dijitTemplateCompat: false,
|
||
|
buildRendering: function(){
|
||
|
var node;
|
||
|
|
||
|
if(this.domNode && !this._template){
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if(!this._template){
|
||
|
var t = this.getCachedTemplate(
|
||
|
this.templatePath,
|
||
|
this.templateString,
|
||
|
this._skipNodeCache
|
||
|
);
|
||
|
if(t instanceof dojox.dtl.Template) {
|
||
|
this._template = t;
|
||
|
}else{
|
||
|
node = t;
|
||
|
}
|
||
|
}
|
||
|
if(!node){
|
||
|
var nodes = dojo._toDom(
|
||
|
this._template.render(new dojox.dtl._Context(this))
|
||
|
);
|
||
|
// TODO: is it really necessary to look for the first node?
|
||
|
if(nodes.nodeType !== 1 && nodes.nodeType !== 3){
|
||
|
// nodes.nodeType === 11
|
||
|
// the node is a document fragment
|
||
|
for(var i = 0, l = nodes.childNodes.length; i < l; ++i){
|
||
|
node = nodes.childNodes[i];
|
||
|
if(node.nodeType == 1){
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
// the node is an element or a text
|
||
|
node = nodes;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this._attachTemplateNodes(node);
|
||
|
|
||
|
if(this.widgetsInTemplate){
|
||
|
var childWidgets = dojo.parser.parse(node);
|
||
|
this._attachTemplateNodes(childWidgets, function(n,p){
|
||
|
return n[p];
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if(this.domNode){
|
||
|
dojo.place(node, this.domNode, "before");
|
||
|
this.destroyDescendants();
|
||
|
dojo.destroy(this.domNode);
|
||
|
}
|
||
|
this.domNode = node;
|
||
|
|
||
|
this._fillContent(this.srcNodeRef);
|
||
|
},
|
||
|
_templateCache: {},
|
||
|
getCachedTemplate: function(templatePath, templateString, alwaysUseString){
|
||
|
// summary:
|
||
|
// Layer for dijit._Templated.getCachedTemplate
|
||
|
var tmplts = this._templateCache;
|
||
|
var key = templateString || templatePath;
|
||
|
if(tmplts[key]){
|
||
|
return tmplts[key];
|
||
|
}
|
||
|
|
||
|
templateString = dojo.string.trim(templateString || dijit._Templated._sanitizeTemplateString(dojo._getText(templatePath)));
|
||
|
|
||
|
if( this._dijitTemplateCompat &&
|
||
|
(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g))
|
||
|
){
|
||
|
templateString = this._stringRepl(templateString);
|
||
|
}
|
||
|
|
||
|
// If we always use a string, or find no variables, just store it as a node
|
||
|
if(alwaysUseString || !templateString.match(/\{[{%]([^\}]+)[%}]\}/g)){
|
||
|
return tmplts[key] = dojo._toDom(templateString);
|
||
|
}else{
|
||
|
return tmplts[key] = new dojox.dtl.Template(templateString);
|
||
|
}
|
||
|
},
|
||
|
render: function(){
|
||
|
this.buildRendering();
|
||
|
}
|
||
|
});
|