You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/02/19 18:56:37 UTC

svn commit: r509273 [50/50] - in /ofbiz/trunk/framework/images/webapp/images: ./ dojo/ dojo/src/ dojo/src/animation/ dojo/src/cal/ dojo/src/charting/ dojo/src/charting/svg/ dojo/src/charting/vml/ dojo/src/collections/ dojo/src/crypto/ dojo/src/data/ do...

Added: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js?view=auto&rev=509273
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js (added)
+++ ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js Mon Feb 19 09:56:06 2007
@@ -0,0 +1,282 @@
+/*
+	Copyright (c) 2004-2006, The Dojo Foundation
+	All Rights Reserved.
+
+	Licensed under the Academic Free License version 2.1 or above OR the
+	modified BSD license. For more information on Dojo licensing, see:
+
+		http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.xml.Parse");
+dojo.require("dojo.dom");
+
+//TODO: determine dependencies
+// currently has dependency on dojo.xml.DomUtil nodeTypes constants...
+
+// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent
+
+dojo.xml.Parse = function(){
+	// summary:
+	//		generic class for taking a DOM node and parsing it into an object
+	//		based on the "dojo tag name" of that node.
+	// 
+	//		supported dojoTagName's:
+	//			<prefix:tag> => prefix:tag
+	//			<dojo:tag> => dojo:tag
+	//			<dojoTag> => dojo:tag
+	//			<tag dojoType="type"> => dojo:type
+	//			<tag dojoType="prefix:type"> => prefix:type
+	//			<tag dojo:type="type"> => dojo:type
+	//			<tag class="classa dojo-type classb"> => dojo:type	
+
+	var isIE = ((dojo.render.html.capable)&&(dojo.render.html.ie));
+
+	// get normalized (lowercase) tagName
+	// some browsers report tagNames in lowercase no matter what
+	function getTagName(node){
+		/*
+		return ((node)&&(node["tagName"]) ? node.tagName.toLowerCase() : '');
+		*/
+		try{
+			return node.tagName.toLowerCase();
+		}catch(e){
+			return "";
+		}
+	}
+
+	// locate dojo qualified tag name
+	function getDojoTagName(node){
+		var tagName = getTagName(node);
+		if (!tagName){
+				return '';
+		}
+		// any registered tag
+		if((dojo.widget)&&(dojo.widget.tags[tagName])){
+			return tagName;
+		}
+		// <prefix:tag> => prefix:tag
+		var p = tagName.indexOf(":");
+		if(p>=0){
+			return tagName;
+		}
+		// <dojo:tag> => dojo:tag
+		if(tagName.substr(0,5) == "dojo:"){
+			return tagName;
+		}
+		if(dojo.render.html.capable && dojo.render.html.ie && node.scopeName != 'HTML'){
+			return node.scopeName.toLowerCase() + ':' + tagName;
+		}
+		// <dojoTag> => dojo:tag
+		if(tagName.substr(0,4) == "dojo"){
+			// FIXME: this assumes tag names are always lower case
+			return "dojo:" + tagName.substring(4);
+		}
+		// <tag dojoType="prefix:type"> => prefix:type
+		// <tag dojoType="type"> => dojo:type
+		var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
+		if(djt){
+			if (djt.indexOf(":")<0){
+				djt = "dojo:"+djt;
+			}
+			return djt.toLowerCase();
+		}
+		// <tag dojo:type="type"> => dojo:type
+		djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type");
+		if(djt){
+			return "dojo:" + djt.toLowerCase();
+		}
+		// <tag dojo:type="type"> => dojo:type
+		try{
+			// FIXME: IE really really doesn't like this, so we squelch errors for it
+			djt = node.getAttribute("dojo:type");
+		}catch(e){ 
+			// FIXME: log?  
+		}
+		if(djt){ return "dojo:"+djt.toLowerCase(); }
+		// <tag class="classa dojo-type classb"> => dojo:type	
+		if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){ 
+			// FIXME: should we make this optionally enabled via djConfig?
+			var classes = node.className||node.getAttribute("class");
+			// FIXME: following line, without check for existence of classes.indexOf
+			// breaks firefox 1.5's svg widgets
+			if((classes )&&(classes.indexOf)&&(classes.indexOf("dojo-")!=-1)){
+				var aclasses = classes.split(" ");
+				for(var x=0, c=aclasses.length; x<c; x++){
+					if(aclasses[x].slice(0, 5) == "dojo-"){
+						return "dojo:"+aclasses[x].substr(5).toLowerCase(); 
+					}
+				}
+			}
+		}
+		// no dojo-qualified name
+		return '';
+	}
+
+
+	this.parseElement = function(	/*DomNode*/node,
+									/*Boolean*/hasParentNodeSet, 
+									/*Boolean*/optimizeForDojoML, 
+									/*Integer*/thisIdx	){
+		// summary:
+		//		recursively parse the passed node, returning a normalized data
+		//		structure that represents the "attributes of interest" of said
+		//		elements. If optimizeForDojoML is true, only nodes that contain
+		//		a "dojo tag name" will be inspected for attributes.
+		// node: the DomNode to be treated as the root of inspection
+		// hasParentNodeSet: no-op, please pass "null"
+		// optimizeForDojoML: should we ignore non-Dojo nodes? Defaults to false.
+		// thisIdx:
+		//		a way to specify a synthetic "index" property in the resulting
+		//		data structure. Otherwise the index property of the top-level
+		//		return element is always "0".
+
+		// TODOC: document return structure of a non-trivial element set
+
+		// run shortcuts to bail out of processing up front to save time and
+		// object alloc if possible.
+		var tagName = getTagName(node);
+		//There's a weird bug in IE where it counts end tags, e.g. </dojo:button> as nodes that should be parsed.  Ignore these
+		if(isIE && tagName.indexOf("/")==0){ return null; }
+
+		try{
+			var attr = node.getAttribute("parseWidgets");
+			if(attr && attr.toLowerCase() == "false"){
+				return {};
+			}
+		}catch(e){/*continue*/}
+
+		
+		// look for a dojoml qualified name
+		// process dojoml only when optimizeForDojoML is true
+		var process = true;
+		if(optimizeForDojoML){
+			var dojoTagName = getDojoTagName(node);
+			tagName = dojoTagName || tagName;
+			process = Boolean(dojoTagName);
+		}
+
+		var parsedNodeSet = {};
+		parsedNodeSet[tagName] = [];
+		var pos = tagName.indexOf(":");
+		if(pos>0){
+			var ns = tagName.substring(0,pos);
+			parsedNodeSet["ns"] = ns;
+			// honor user namespace filters
+			if((dojo.ns)&&(!dojo.ns.allow(ns))){process=false;}
+		}
+
+		if(process){
+			var attributeSet = this.parseAttributes(node);
+			for(var attr in attributeSet){
+				if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){
+					parsedNodeSet[tagName][attr] = [];
+				}
+				parsedNodeSet[tagName][attr].push(attributeSet[attr]);
+			}	
+			// FIXME: we might want to make this optional or provide cloning instead of
+			// referencing, but for now, we include a node reference to allow
+			// instantiated components to figure out their "roots"
+			parsedNodeSet[tagName].nodeRef = node;
+			parsedNodeSet.tagName = tagName;
+			parsedNodeSet.index = thisIdx||0;
+		}
+
+		var count = 0;
+		for(var i = 0; i < node.childNodes.length; i++){
+			var tcn = node.childNodes.item(i);
+			switch(tcn.nodeType){
+				case  dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
+					var ctn = getDojoTagName(tcn) || getTagName(tcn);
+					if(!parsedNodeSet[ctn]){
+						parsedNodeSet[ctn] = [];
+					}
+					parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
+					if(	(tcn.childNodes.length == 1)&&
+						(tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)){
+						parsedNodeSet[ctn][parsedNodeSet[ctn].length-1].value = tcn.childNodes.item(0).nodeValue;
+					}
+					count++;
+					break;
+				case  dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
+					if(node.childNodes.length == 1){
+						parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue });
+					}
+					break;
+				default: break;
+				/*
+				case  dojo.dom.ATTRIBUTE_NODE: // attribute node... not meaningful here
+					break;
+				case  dojo.dom.CDATA_SECTION_NODE: // cdata section... not sure if this would ever be meaningful... might be...
+					break;
+				case  dojo.dom.ENTITY_REFERENCE_NODE: // entity reference node... not meaningful here
+					break;
+				case  dojo.dom.ENTITY_NODE: // entity node... not sure if this would ever be meaningful
+					break;
+				case  dojo.dom.PROCESSING_INSTRUCTION_NODE: // processing instruction node... not meaningful here
+					break;
+				case  dojo.dom.COMMENT_NODE: // comment node... not not sure if this would ever be meaningful 
+					break;
+				case  dojo.dom.DOCUMENT_NODE: // document node... not sure if this would ever be meaningful
+					break;
+				case  dojo.dom.DOCUMENT_TYPE_NODE: // document type node... not meaningful here
+					break;
+				case  dojo.dom.DOCUMENT_FRAGMENT_NODE: // document fragment node... not meaningful here
+					break;
+				case  dojo.dom.NOTATION_NODE:// notation node... not meaningful here
+					break;
+				*/
+			}
+		}
+		//return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet;
+		//if(parsedNodeSet.tagName)dojo.debug("parseElement: RETURNING NODE WITH TAGNAME "+parsedNodeSet.tagName);
+		return parsedNodeSet;
+	};
+
+
+	/* parses a set of attributes on a node into an object tree */
+	this.parseAttributes = function(/*DomNode*/node){
+		// summary:
+		// 		creates an attribute object that maps attribute values for the
+		// 		passed node. Note that this is similar to creating a JSON
+		// 		representation of a DOM node.
+		// usage:
+		//		a node with the following serialization:
+		//			<div foo="bar" baz="thud">...</div>	
+		//		would yeild the following return structure when passed into this
+		//		function:
+		//			{
+		//				"foo": {
+		//					"value": "bar"
+		//				},
+		//				"baz": {
+		//					"value": "thud"
+		//				}
+		//			}
+		//
+		var parsedAttributeSet = {};
+		var atts = node.attributes;
+		// TODO: should we allow for duplicate attributes at this point...
+		// would any of the relevant dom implementations even allow this?
+		var attnode, i=0;
+		while((attnode=atts[i++])){
+			if(isIE){
+				if(!attnode){ continue; }
+				if((typeof attnode == "object")&&
+					(typeof attnode.nodeValue == 'undefined')||
+					(attnode.nodeValue == null)||
+					(attnode.nodeValue == '')){ 
+					continue; 
+				}
+			}
+
+			var nn = attnode.nodeName.split(":");
+			nn = (nn.length == 2) ? nn[1] : attnode.nodeName;
+						
+			parsedAttributeSet[nn] = { 
+				value: attnode.nodeValue 
+			};
+		}
+		return parsedAttributeSet;
+	};
+};

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/Parse.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js?view=auto&rev=509273
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js (added)
+++ ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js Mon Feb 19 09:56:06 2007
@@ -0,0 +1,249 @@
+/*
+	Copyright (c) 2004-2006, The Dojo Foundation
+	All Rights Reserved.
+
+	Licensed under the Academic Free License version 2.1 or above OR the
+	modified BSD license. For more information on Dojo licensing, see:
+
+		http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.xml.XslTransform");
+
+dojo.xml.XslTransform = function(/*String*/xsltUri){
+	//	summary:
+	//		dojo.xml.XslTransform is a convenience object that takes the URI
+	//		String of an XSL file as a constructor argument. After each
+	//		transformation all parameters will be cleared. Transformation is
+	//		supported by IE, Mozilla, and partially by Opera. Other browsers
+	//		(notably Safari) have not yet exposed their transformation
+	//		primtives well enough to be useful.
+	// xsltUri:
+	//		Url of the xslt document to transform nodes with. Transformation is
+	//		acheived with the transformTo* methods on instances of this class.
+
+	dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
+	var IS_IE = dojo.render.html.ie;
+	var ACTIVEX_DOMS = [
+		"Msxml2.DOMDocument.5.0", 
+		"Msxml2.DOMDocument.4.0", 
+		"Msxml2.DOMDocument.3.0", 
+		"MSXML2.DOMDocument", 
+		"MSXML.DOMDocument", 
+		"Microsoft.XMLDOM"
+	];
+	var ACTIVEX_FT_DOMS = [
+		"Msxml2.FreeThreadedDOMDocument.5.0", 
+		"MSXML2.FreeThreadedDOMDocument.4.0", 
+		"MSXML2.FreeThreadedDOMDocument.3.0"
+	];
+	var ACTIVEX_TEMPLATES = [
+		"Msxml2.XSLTemplate.5.0", 
+		"Msxml2.XSLTemplate.4.0", 
+		"MSXML2.XSLTemplate.3.0"
+	];
+  
+	function getActiveXImpl(activeXArray){
+		for(var i=0; i < activeXArray.length; i++){
+			try{
+				var testObj = new ActiveXObject(activeXArray[i]);
+				if(testObj){
+					return activeXArray[i];
+				}
+			}catch(e){}
+		}
+		dojo.raise("Could not find an ActiveX implementation in:\n\n " + activeXArray);
+	}
+    
+    if(xsltUri == null || xsltUri == undefined){
+        dojo.raise("You must pass the URI String for the XSL file to be used!");
+        return false;
+    }
+    
+	var xsltDocument = null;
+	var xsltProcessor = null;
+	if(IS_IE){
+		xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS));
+		xsltDocument.async = false;
+	}else{
+		xsltProcessor = new XSLTProcessor();
+		xsltDocument = document.implementation.createDocument("", "", null);
+		xsltDocument.addEventListener("load", onXslLoad, false);
+	}
+	xsltDocument.load(xsltUri);
+
+	if(IS_IE){
+		var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES));
+		xslt.stylesheet = xsltDocument;  
+		xsltProcessor = xslt.createProcessor();
+	}
+
+	function onXslLoad(){
+		xsltProcessor.importStylesheet(xsltDocument); 
+	}
+
+	function getResultDom(xmlDoc, params){
+		if(IS_IE){
+			addIeParams(params);
+			var result = getIeResultDom(xmlDoc);
+			removeIeParams(params);   
+			return result;
+		}else{
+			return getMozillaResultDom(xmlDoc, params);
+		}
+	}
+
+	function addIeParams(params){
+		if(!params){ return; }
+		for(var i=0; i<params.length; i++){
+			xsltProcessor.addParameter(params[i][0], params[i][1]);
+		}
+	}
+
+    function removeIeParams(params){
+		if(!params){ return; }
+		for(var i=0; i<params.length; i++){
+			xsltProcessor.addParameter(params[i][0], "");
+		}
+    }
+
+	function getIeResultDom(xmlDoc){
+		xsltProcessor.input = xmlDoc;
+		var outDoc = new ActiveXObject(getActiveXImpl(ACTIVEX_DOMS));
+		outDoc.async = false;  
+		outDoc.validateOnParse = false;
+		xsltProcessor.output = outDoc;
+		xsltProcessor.transform();
+		if(outDoc.parseError.errorCode != 0){
+			var err = outDoc.parseError;
+			dojo.raise("err.errorCode: " + err.errorCode + "\n\nerr.reason: " + err.reason + "\n\nerr.url: " + err.url + "\n\nerr.srcText: " + err.srcText);
+		}
+		return outDoc;
+	}
+
+	function getIeResultStr(xmlDoc, params){
+		xsltProcessor.input = xmlDoc;
+		xsltProcessor.transform();    
+		return xsltProcessor.output;
+	}
+
+	function addMozillaParams(params){
+		if(!params){ return; }
+		for(var i=0; i<params.length; i++){
+			xsltProcessor.setParameter(null, params[i][0], params[i][1]);
+		}
+	}
+
+	function getMozillaResultDom(xmlDoc, params){
+		addMozillaParams(params);
+		var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
+		xsltProcessor.clearParameters();
+		return resultDoc;
+	}
+
+	function getMozillaResultStr(xmlDoc, params, parentDoc){
+		addMozillaParams(params);
+		var resultDoc = xsltProcessor.transformToFragment(xmlDoc, parentDoc);
+		var serializer = new XMLSerializer();
+		xsltProcessor.clearParameters();
+		return serializer.serializeToString(resultDoc);
+	}
+
+	this.getResultString = function(	/*XMLDocument*/xmlDoc, 
+										/*2 Dimensional Array*/params, 
+										/*HTMLDocument*/parentDoc){
+		// summary:
+		//		transform the xmlDoc and return the result as a string.
+		// xmlDoc: an XML Document to transform
+		// params:
+		//		a set of configuration parameters to pass to the transformation
+		//		engine.
+		// parentDoc: The HTML docuemnt to transform the subdocument "under"
+		var content = null;
+		if(IS_IE){
+			addIeParams(params);
+			content = getIeResultStr(xmlDoc, params);
+			removeIeParams(params);  
+		}else{
+			content = getMozillaResultStr(xmlDoc, params, parentDoc);
+		} 
+		//dojo.debug(content);
+		return content;
+	};
+
+	this.transformToContentPane = function(	/*XMLDocument*/xmlDoc,
+											/*2 Dimensional Array*/params, 
+											/*ContentPane*/contentPane, 
+											/*HTMLDocument*/parentDoc){
+		// summary:
+		//		transform the xmlDoc and put the result into the passed
+		//		ContentPane instance
+		// xmlDoc: an XML Document to transform
+		// params:
+		//		a set of configuration parameters to pass to the transformation
+		//		engine.
+		// contentPane:
+		//		instance of dojo.widget.ContentPane to assign the transform
+		//		results to
+		// parentDoc: The HTML docuemnt to transform the subdocument "under"
+
+		// FIXME: do we need this function?
+		var content = this.getResultString(xmlDoc, params, parentDoc);
+		contentPane.setContent(content);
+	};
+
+	this.transformToRegion = function(	/*XMLDocument*/xmlDoc, 
+										/*2 Dimensional Array*/params, 
+										/*HTMLElement*/region, 
+										/*HTMLDocument*/parentDoc){
+		// summary:
+		//		transform the xmlDoc and put the result into the passed
+		//		DomNode using innerHTML
+		// xmlDoc: an XML Document to transform
+		// params:
+		//		a set of configuration parameters to pass to the transformation
+		//		engine.
+		// region: node to put transform results in
+		// parentDoc: The HTML docuemnt to transform the subdocument "under"
+		try{
+			var content = this.getResultString(xmlDoc, params, parentDoc);
+			region.innerHTML = content;
+		}catch (e){
+			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
+		}
+	};
+
+	this.transformToDocument = function(	/*XMLDocument*/ xmlDoc, 
+											/*2 Dimensional Array*/params){
+		// summary:
+		//		transform the xmlDoc and return a new XML document containing
+		//		the result
+		// xmlDoc: an XML Document to transform
+		// params:
+		//		a set of configuration parameters to pass to the transformation
+		//		engine.
+		return getResultDom(xmlDoc, params); // XMLDocument
+	}
+
+	this.transformToWindow = function(	/*XMLDocument*/ xmlDoc,
+										/*2 Dimensional Array*/params, 
+										/*HTMLDocument*/windowDoc, 
+										/*HTMLDocument*/parentDoc){
+		// summary:
+		//		transform the xmlDoc and put the contents in the passed
+		//		windowDoc, blowing away any previous contents.
+		// xmlDoc: an XML Document to transform
+		// params:
+		//		a set of configuration parameters to pass to the transformation
+		//		engine.
+		// windowDoc: the HTMLDocument to assign the contents to
+		// parentDoc: The HTML docuemnt to transform the subdocument "under"
+		try{
+			windowDoc.open();
+			windowDoc.write(this.getResultString(xmlDoc, params, parentDoc));
+			windowDoc.close();
+		}catch(e){
+			dojo.raise(e.message + "\n\n xsltUri: " + xsltUri)
+		}
+	};
+};

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/XslTransform.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js?view=auto&rev=509273
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js (added)
+++ ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js Mon Feb 19 09:56:06 2007
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2006, The Dojo Foundation
+	All Rights Reserved.
+
+	Licensed under the Academic Free License version 2.1 or above OR the
+	modified BSD license. For more information on Dojo licensing, see:
+
+		http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.require("dojo.xml.Parse");
+dojo.kwCompoundRequire({
+	common:		["dojo.dom"],
+    browser: 	["dojo.html.*"],
+    dashboard: 	["dojo.html.*"]
+});
+dojo.provide("dojo.xml.*");

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/framework/images/webapp/images/dojo/src/xml/__package__.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain