Author: knopp
Date: Fri Apr 13 02:28:52 2007
New Revision: 528401

URL: http://svn.apache.org/viewvc?view=rev&rev=528401
Log:
Fix for IE when replacing one element inside table by multiple elements

Modified:
    
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Modified: 
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js?view=diff&rev=528401&r1=528400&r2=528401
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
 Fri Apr 13 02:28:52 2007
@@ -156,11 +156,7 @@
                                break;                          
                        }
                }
-               
-               // indicates whether we should manually invoke javascripts in 
the replaced content
-               // (not necessary for opera when replacing elements inside 
table)
-               var forceJavascriptExecution = true;
-          
+                          
                var tn = element.tagName;
 
                // elements inside tables have to be treated special
@@ -171,20 +167,36 @@
                        // this is a hack to get around the fact that internet 
explorer doesn't allow the
                        // outerHtml attribute on table elements                
                
                        var tempDiv = document.createElement("div");
-                       tempDiv.innerHTML = '<table style="display: none">' + 
text + '</table>';                        
-                       
element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), 
element);
-                                               
-                       // this way opera already executes javascripts, so we 
don't want to execute javascripts later
-                       if (Wicket.Browser.isOpera())
-                               forceJavascriptExecution = false;               
                
+                       tempDiv.innerHTML = '<table style="display: none">' + 
text + '</table>';        
+                       
+                       // we may have inserted multiple elements, so we need 
to take care of all of them
+                       var tempParent = 
tempDiv.getElementsByTagName(tn).item(0).parentNode;
+
+
+
+                       while(tempParent.childNodes.length > 0) {
+                               var tempElement = tempParent.childNodes[0];
+                               element.parentNode.insertBefore(tempElement, 
element);
+                       }
+
+                       
//element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), 
element);
+                       element.parentNode.removeChild(element);                
                                
                }
        
-           if (forceJavascriptExecution) {
-                       for (var j = i; j < parent.childNodes.length && 
parent.childNodes[j] != next; ++j) {                    
-                               // execute the javascript contained by the 
newly created elements
-                               
Wicket.Head.addJavascripts(parent.childNodes[j]);       
-                       }
+           // execute inserted javascripts
+           
+       var elements = new Array();
+    
+               for (var j = i; j < parent.childNodes.length && 
parent.childNodes[j] != next; ++j) {                    
+                       // add the inserted elements to array
+                       elements.push(parent.childNodes[j]);
                }
+                       
+               // we need to execute the javascript in reverse order to be 
consistent with firefox 
+               for (i = elements.length - 1; i >= 0; --i) {
+                       Wicket.Head.addJavascripts(elements[i]); 
+               }                                               
+               
 
     } else {
        // create range and fragment


Reply via email to