rem: e.innerHTML = node.firstChild.nodeValue; 
add:     if ((new QxClient).isMshtml()) { e.innerHTML = eval(node.firstChild.nodeValue); } else { e.innerHTML = node.firstChild.nodeValue; };  
context: proto._buildWidgetFromNode = function(parent, node) {	var className = this._extractClassName(node);	if (!className) {		if (parent instanceof QxAtom) {			var text = this._serializeToString(node);			parent.setText((parent.getText()||"") + text );			return;		};		throw this._newBuildError("unrecognised node", {nodeName:node.nodeName});	};	if (className == "QxWidgets") {		// generic container node to allow xml to contain multiple toplevel nodes		this._buildNodes(parent, node.childNodes);		return;	};	if (className == "QxScript") {		var e = document.createElement("script");		var attribs = this._mapXmlAttribToObject(node);		if (attribs.type) {			e.type = attribs.type;		}		else {			e.type='text/javascript';		};		e.innerHTML = node.firstChild.nodeValue;		document.body.appendChild(e);		return;	};	if (className == "QxEventListener") {		var attribs = this._mapXmlAttribToObject(node);		var text;		if (node.firstChild) {			text = node.firstChild.nodeValue;		};		this._buildEventListener(parent, attribs, text);		return;	};	var constructor = window[className];	if (!constructor) {		throw this._newBuildError("constructor not found", {className:className});	};	// construct the widget instance - using the default constructor	var widget = new constructor();//	this.debug('created ' + widget+'#'+widget._hash);	var attribs = this._mapXmlAttribToObject(node, widget);	delete attribs['qxtype'];	if (attribs.id) {		// register a global refrence for this widget		window[attribs.id] = widget;		delete attribs.id;	};	// convert any on??  attribs into event listeners	for (var a in attribs) {		if (a.toLowerCase().indexOf('on') == 0 && a.length > 2) {			// there may be issues here for XHTML based attributes - due to their case			var type = a.substring(2);			type = type.charAt(0) + type.substring(1);			this._buildEventListener(widget, {type:type,args:'event'}, attribs[a]);			delete attribs[a];		};	};	// handle special case of the parent being a QxLayout - need to get the layoutHint	var layoutHint;	if (typeof QxLayout != "undefined" && parent instanceof QxLayout) {			// TODO : are layout hints mandatory - can this be determined through metadata ?//		if (!attribs.layouthint) {//			throw this._newBuildError('layoutHint is required when the parent component is a QxLayout');//		};		if (attribs.layouthint) {			try {				// TODO: validate the format of the attribute				// TODO: is there a better way to do this ?				eval('layoutHint = {' + attribs.layouthint + '}');			}			catch (e) {				throw this._newBuildError('invalid property value', {name:'layoutHint',value:attrib.layoutHint}, e);			};			// remove the layoutHint attribute, since its has been processed			delete attribs.layouthint;		};	};	// process the rest of the attribs	for (var n in attribs) {		this._debugContext.push("@" + n);		this._setWidgetProperty(widget, n, attribs[n]);		this._debugContext.pop();	};	if (typeof QxMenu != "undefined" && widget instanceof QxMenu) {		// add the widget to the document		window.application.getClientWindow().getDocument().add(widget);		// bind the widget to the menu		parent.setMenu(widget);	}	else if (layoutHint && typeof QxLayout != "undefined" && parent instanceof QxLayout) {			parent.add(widget, layoutHint);	}	else {		parent.add(widget);	};	// recurse to all of the nodes children, using the newly created widget as the parent	this._buildNodes(widget, node.childNodes);};
meta: 1005	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/1005/83fa8a67f5e964578b7f81c13f15a9ef4eb44cff/QxBuilder.js/clean/qooxdoo/source/script/core/QxBuilder.js