diff options
Diffstat (limited to 'js/dojo/dojox/dtl/_Templated.js')
| -rw-r--r-- | js/dojo/dojox/dtl/_Templated.js | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/js/dojo/dojox/dtl/_Templated.js b/js/dojo/dojox/dtl/_Templated.js new file mode 100644 index 0000000..b2f4387 --- /dev/null +++ b/js/dojo/dojox/dtl/_Templated.js @@ -0,0 +1,148 @@ +//>>built +define("dojox/dtl/_Templated", [ + "dojo/_base/declare", + "./_base", + "dijit/_TemplatedMixin", + "dojo/dom-construct", + "dojo/cache", + "dojo/_base/array", + "dojo/string", + "dojo/parser", + "dijit/_base/manager" +], function(declare,dd,TemplatedMixin, domConstruct,Cache,Array,dString,Parser,dijitMgr){ + /*===== + Cache = dojo.cache; + dString = dojo.string; + Parser = dojo.parser; + TemplatedMixin = dijit._TemplatedMixin; + dd = dojox.dtl; + =====*/ + return declare("dojox.dtl._Templated", TemplatedMixin, { + // summary: The base-class for DTL-templated widgets. + + _dijitTemplateCompat: false, + buildRendering: function(){ + // summary: The method overrides dijit._TemplatedMixin.startup. + var node; + + if(this.domNode && !this._template){ + return; + } + + if(!this._template){ + var t = this.getCachedTemplate( + this.templatePath, + this.templateString, + this._skipNodeCache + ); + if(t instanceof dd.Template) { + this._template = t; + }else{ + node = t; + } + } + if(!node){ + var context = new dd._Context(this); + if(!this._created){ + delete context._getter; + } + var nodes = domConstruct.toDom( + this._template.render(context) + ); + // 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, function(n,p){ + return n.getAttribute(p); + }); + if(this.widgetsInTemplate){ + //Make sure dojoType is used for parsing widgets in template. + //The Parser.query could be changed from multiversion support. + var parser = Parser, qry, attr; + if(parser._query != "[dojoType]"){ + qry = parser._query; + attr = parser._attrName; + parser._query = "[dojoType]"; + parser._attrName = "dojoType"; + } + + //Store widgets that we need to start at a later point in time + var cw = (this._startupWidgets = Parser.parse(node, { + noStart: !this._earlyTemplatedStartup, + inherited: {dir: this.dir, lang: this.lang} + })); + + //Restore the query. + if(qry){ + parser._query = qry; + parser._attrName = attr; + } + + this._supportingWidgets = dijitMgr.findWidgets(node); + + this._attachTemplateNodes(cw, function(n,p){ + return n[p]; + }); + } + + if(this.domNode){ + domConstruct.place(node, this.domNode, "before"); + this.destroyDescendants(); + domConstruct.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 = dString.trim(templateString || Cache(templatePath, {sanitize: true})); + + 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] = domConstruct.toDom(templateString); + }else{ + return tmplts[key] = new dd.Template(templateString); + } + }, + render: function(){ + // summary: Renders the widget. + this.buildRendering(); + }, + startup: function(){ + // summary: The method overrides dijit._TemplatedMixin.startup. + Array.forEach(this._startupWidgets, function(w){ + if(w && !w._started && w.startup){ + w.startup(); + } + }); + this.inherited(arguments); + } + }); +});
\ No newline at end of file |
