]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dijit/Declaration.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dijit / Declaration.js
diff --git a/static/dojo-release-1.1.1/dijit/Declaration.js b/static/dojo-release-1.1.1/dijit/Declaration.js
new file mode 100644 (file)
index 0000000..2b18cfe
--- /dev/null
@@ -0,0 +1,76 @@
+if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Declaration"] = true;
+dojo.provide("dijit.Declaration");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+
+dojo.declare(
+       "dijit.Declaration",
+       dijit._Widget,
+       {
+               // summary:
+               //              The Declaration widget allows a user to declare new widget
+               //              classes directly from a snippet of markup.
+
+               _noScript: true,
+               widgetClass: "",
+               replaceVars: true,
+               defaults: null,
+               mixins: [],
+               buildRendering: function(){
+                       var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef);
+                       var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan();
+                       var scripts = dojo.query("> script[type^='dojo/']", src).orphan();
+                       var srcType = src.nodeName;
+
+                       var propList = this.defaults||{};
+
+                       // map array of strings like [ "dijit.form.Button" ] to array of mixin objects
+                       // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
+                       // a bogus third argument to getObject(), confusing it)
+                       this.mixins = this.mixins.length ?
+                               dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
+                               [ dijit._Widget, dijit._Templated ];
+
+                       if(preambles.length){
+                               // we only support one preamble. So be it.
+                               propList.preamble = dojo.parser._functionFromScript(preambles[0]);
+                       }
+
+                       var parsedScripts = dojo.map(scripts, function(s){
+                               var evt = s.getAttribute("event")||"postscript";
+                               return {
+                                       event: evt,
+                                       func: dojo.parser._functionFromScript(s)
+                               };
+                       });
+
+                       // do the connects for each <script type="dojo/connect" event="foo"> block and make
+                       // all <script type="dojo/method"> tags execute right after construction
+                       this.mixins.push(function(){
+                               dojo.forEach(parsedScripts, function(s){
+                                       dojo.connect(this, s.event, this, s.func);
+                               }, this);
+                       });
+
+                       propList.widgetsInTemplate = true;
+                       propList._skipNodeCache = true;
+                       propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
+                       // console.debug(propList.templateString);
+
+                       // strip things so we don't create stuff under us in the initial setup phase
+                       dojo.query("[dojoType]", src).forEach(function(node){
+                               node.removeAttribute("dojoType");
+                       });
+
+                       // create the new widget class
+                       dojo.declare(
+                               this.widgetClass,
+                               this.mixins,
+                               propList
+                       );
+               }
+       }
+);
+
+}