]> git.pond.sub.org Git - eow/blob - static/dojo-release-1.1.1/dojox/dtl/_Templated.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / dtl / _Templated.js
1 if(!dojo._hasResource["dojox.dtl._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2 dojo._hasResource["dojox.dtl._Templated"] = true;
3 dojo.provide("dojox.dtl._Templated");
4 dojo.require("dijit._Templated");
5 dojo.require("dojox.dtl._base");
6
7 dojo.declare("dojox.dtl._Templated", dijit._Templated, {
8         _dijitTemplateCompat: false,
9         buildRendering: function(){
10                 var node;
11
12                 if(this.domNode && !this._template){
13                         return;
14                 }
15
16                 if(!this._template){
17                         var t = this.getCachedTemplate(
18                                 this.templatePath,
19                                 this.templateString,
20                                 this._skipNodeCache
21                         );
22                         if(t instanceof dojox.dtl.Template) {
23                                 this._template = t;
24                         }else{
25                                 node = t;
26                         }
27                 }
28                 if(!node){
29                         var nodes = dijit._Templated._createNodesFromText(
30                                 this._template.render(new dojox.dtl._Context(this))
31                         );
32                         for(var i = 0; i < nodes.length; i++){
33                                 if(nodes[i].nodeType == 1){
34                                         node = nodes[i];
35                                         break;
36                                 }
37                         }
38                 }
39
40                 this._attachTemplateNodes(node);
41
42                 var source = this.srcNodeRef;
43                 if(source && source.parentNode){
44                         source.parentNode.replaceChild(node, source);
45                 }
46
47                 if(this.widgetsInTemplate){
48                         var childWidgets = dojo.parser.parse(node);
49                         this._attachTemplateNodes(childWidgets, function(n,p){
50                                 return n[p];
51                         });
52                 }
53
54                 if(this.domNode){
55                         dojo.place(node, this.domNode, "before");
56                         this.destroyDescendants();
57                         dojo._destroyElement(this.domNode);
58                 }
59                 this.domNode = node;
60
61                 this._fillContent(source);
62         },
63         _templateCache: {},
64         getCachedTemplate: function(templatePath, templateString, alwaysUseString){
65                 // summary:
66                 //              Layer for dijit._Templated.getCachedTemplate
67                 var tmplts = this._templateCache;
68                 var key = templateString || templatePath;
69                 if(tmplts[key]){
70                         return tmplts[key];
71                 }
72
73                 templateString = dojo.string.trim(templateString || dijit._Templated._sanitizeTemplateString(dojo._getText(templatePath)));
74
75                 if(     this._dijitTemplateCompat && 
76                         (alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g))
77                 ){
78                         templateString = this._stringRepl(templateString);
79                 }
80
81                 // If we always use a string, or find no variables, just store it as a node
82                 if(alwaysUseString || !templateString.match(/\{[{%]([^\}]+)[%}]\}/g)){
83                         return (tmplts[key] = dijit._Templated._createNodesFromText(templateString)[0]);
84                 }else{
85                         return (tmplts[key] = new dojox.dtl.Template(templateString));
86                 }
87         },
88         render: function(){
89                 this.buildRendering();
90         }
91 });
92
93 }