text: dojo._xdResourceLoaded({
  depends: [["provide", "dijit.Declaration"],
  ["require", "dijit._Widget"],
  ["require", "dijit._Templated"]],
  defineResource: function(dojo){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
  			);
  		}
  	}
  );
  
  }
  
  }});