12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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);
- }
- });
- }
|