cacert-testmgr/external/ZendFramework-1.9.5/externals/dojo/dojox/dtl/_Templated.js
Markus Warg 8398c9048d initially import ZendFramework-1.9.5 into repository
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
2010-03-31 10:12:32 +02:00

92 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();
}
});