Author: jbeard Date: Mon Aug 16 16:01:08 2010 New Revision: 986001 URL: http://svn.apache.org/viewvc?rev=986001&view=rev Log: Fixed bug where parameters were not being used in in-browser XSL transformation in IE. Neededto use new, different ActiveX-based APIs. This may not be the most performant, portable, or robust code. It passes manual unit testing, but seems to be broken when using automated, in-browser unit tests with selenium in IE8.
Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xsl/ie.js Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xsl/ie.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xsl/ie.js?rev=986001&r1=986000&r2=986001&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xsl/ie.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xsl/ie.js Mon Aug 16 16:01:08 2010 @@ -9,18 +9,47 @@ function(xmlUtil){ [transformList] : transformList; + + //prepare processors + //FIXME: this works in IE on WinXP 3, but due to all of the ActiveX code here, i'm not sure how portable, reliable, or performant it is + //the previous solution was to use the docToTransform.transformNode method, which worked well, but I was unable to find a way to + //use this method, and also pass in transform parameters. hence the ActiveX. + var processors = []; + for(var i=0, l = transformList.length; i<l; i++){ + var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); + var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0"); + xsldoc.async=false; + xsldoc.loadXML(transformList[i].xml); + + xslt.stylesheet = xsldoc; + var xslproc = xslt.createProcessor(); + + for(paramName in params){ + var paramValue = params[paramName]; + if ((typeof paramValue == "string") || (typeof paramValue == "boolean")) + xslproc.addParameter(paramName,paramValue); + } + + processors.push(xslproc); + } + //transform to IR var docToTransform = sourceDocument; - for(var i=0; i < transformList.length-1; i++){ - var t = transformList[i]; + for(var i=0,l=processors.length; i < l-1; i++){ + var p = processors[i]; + + p.input = docToTransform; + p.transform(); - var txt = docToTransform.transformNode(t); + var txt = p.output docToTransform = xmlUtil.parseFromString(txt); } - var lastFilter = transformList[transformList.length-1]; + var lastFilter = processors[processors.length-1]; - var txt = docToTransform.transformNode(lastFilter ); + lastFilter.input = docToTransform; + lastFilter.transform(); + var txt = lastFilter.output var toReturn; switch(output){