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){


Reply via email to