summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/dtl/_DomTemplated.js
blob: 0c952f95d7c5130eb793e73d97c75b1440280581 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//>>built
define("dojox/dtl/_DomTemplated", [
	"dojo/dom-construct",
	".",
	"./contrib/dijit",
	"./render/dom",
	"dojo/cache",
	"dijit/_TemplatedMixin"
	], function(domConstruct,dtl,ddcd,ddrd,cache,TemplatedMixin){
	/*=====
		dtl = dojox.dtl;
		cache = dojo.cache;
		TemplatedMixin = dijit._TemplatedMixin
	=====*/
	dtl._DomTemplated = function(){};
	dtl._DomTemplated.prototype = {
		_dijitTemplateCompat: false,
		buildRendering: function(){
			//	summary:
			//		Construct the UI for this widget, setting this.domNode.

			//render needs a domNode to work with
			this.domNode = this.srcNodeRef;

			if(!this._render){
				var old = ddcd.widgetsInTemplate;
				ddcd.widgetsInTemplate = this.widgetsInTemplate;
				this.template = this.template || this._getCachedTemplate(this.templatePath, this.templateString);
				this._render = new ddrd.Render(this.domNode, this.template);
				ddcd.widgetsInTemplate = old;
			}

			var context = this._getContext();
			if(!this._created){
				delete context._getter;
			}
			this.render(context);

			this.domNode = this.template.getRootNode();
			if(this.srcNodeRef && this.srcNodeRef.parentNode){
				domConstruct.destroy(this.srcNodeRef);
				delete this.srcNodeRef;
			}
		},
		setTemplate: function(/*String|dojo._Url*/ template, /*dojox.dtl.Context?*/ context){
			// summary:
			//		Quickly switch between templated by location
			// template: The new template.
			// context:
			//		The runtime context.
			if(dojox.dtl.text._isTemplate(template)){
				this.template = this._getCachedTemplate(null, template);
			}else{
				this.template = this._getCachedTemplate(template);
			}
			this.render(context);
		},
		render: function(/*dojox.dtl.Context?*/ context, /*dojox.dtl.DomTemplate?*/ tpl){
			// summary:
			//		Renders this template.
			// context:
			//		The runtime context.
			// tpl:
			//		The template to render. Optional.
			if(tpl){
				this.template = tpl;
			}
			this._render.render(this._getContext(context), this.template);
		},
		_getContext: function(context){
			if(!(context instanceof dojox.dtl.Context)){
				context = false;
			}
			context = context || new dojox.dtl.Context(this);
			context.setThis(this);
			return context;
		},
		_getCachedTemplate: function(templatePath, templateString){
			if(!this._templates){
				this._templates = {};
			}
			if(!templateString){
				templateString = cache(templatePath, {sanitize: true});
			}
			var key = templateString;
			var tmplts = this._templates;
			if(tmplts[key]){
				return tmplts[key];
			}
			return (tmplts[key] = new dojox.dtl.DomTemplate(
				TemplatedMixin.getCachedTemplate(
					templateString,
					true
				)
			));
		}
	};
	return dojox.dtl._DomTemplated;
});