context: 	this.createComponents = function(frag, parentComp){		var comps = [];		var built = false;		// if we have items to parse/create at this level, do it!		try{			if((frag)&&(frag["tagName"])&&(frag!=frag["nodeRef"])){								// these are in fact, not ever for widgets per-se anymore, 				// but for other markup elements (aka components)				var djTags = dojo.widget.tags;								// we split so that you can declare multiple 				// non-destructive components from the same ctor node				var tna = String(frag["tagName"]).split(";");				for(var x=0; x<tna.length; x++){					var ltn = (tna[x].replace(/^\s+|\s+$/g, "")).toLowerCase();					// FIXME: unsure what this does					frag.tagName = ltn;					if(djTags[ltn]){						built = true;						var ret = djTags[ltn](frag, this, parentComp, frag["index"]);						comps.push(ret);					} else {						// we require a namespace prefix, default to dojo:						if (ltn.indexOf(":") == -1){							ltn = "dojo:"+ltn;						}						// FIXME: handling failure condition correctly?						//var ret = djTags[ltn](frag, this, parentComp, frag["index"]);						var ret = dojo.widget.buildWidgetFromParseTree(ltn, frag, this, parentComp, frag["index"]);						if (ret) {							built = true;							comps.push(ret);						}					}				}			}		}catch(e){			dojo.debug("dojo.widget.Parse: error:" + e);			// note, commenting out the next line is breaking several widgets for me			// throw e;			// IE is such a bitch sometimes		}		// if there's a sub-frag, build widgets from that too		if(!built){			comps = comps.concat(this.createSubComponents(frag, parentComp));		}		return comps;	}
meta: 4707	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/4707/50c3492c4c3c825dbd3401e134a19ed46799c456/Parse.js/clean/www/resources/dojo-ajax/src/widget/Parse.js