Author: mgrigorov
Date: Fri Apr 29 13:31:36 2011
New Revision: 1097812

URL: http://svn.apache.org/viewvc?rev=1097812&view=rev
Log:
WICKET-3023 Ajax does not work with XHTML

Use DOM API based function to set HTMLElement's innerHTML so it works for XHTML 
(application/xml+html mime type)


Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js?rev=1097812&r1=1097811&r2=1097812&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js
 Fri Apr 29 13:31:36 2011
@@ -61,7 +61,7 @@ var WicketAjaxDebug = {
                if (typeof(label) != "undefined")
                        msg = "<b>" + label + "</b>" + msg;
                          
-        c.innerHTML = msg;
+        WicketAjaxDebug.doInnerHTML(c, msg);
         c.setAttribute("style","font-size: 82%; margin: 0px; padding:0px");    
    
         d.appendChild(c);
         
@@ -221,7 +221,40 @@ var WicketAjaxDebug = {
                } else { 
                        return false; 
                } 
-       }
+       },
+       
+       /**
+        * A XHTML Strict safe function to set HTMLElement's innerHTML.
+        * WICKET-3023
+        */
+       doInnerHTML: function(elem, html) {
+ 
+        try {
+            var children = elem.childNodes;
+ 
+            for (var i = 0; i < children.length; i++) {
+                elem.removeChild(children[i]);
+            }
+ 
+            var nodes = new DOMParser().parseFromString(html, 'text/xml');
+            var range = document.createRange();
+            range.selectNodeContents(elem);
+            range.deleteContents();
+ 
+            for (var i = 0; i < nodes.childNodes.length; i++) {
+                elem.appendChild(nodes.childNodes[i]);
+            }
+            return true;
+        } catch (e) {
+            try {
+                elem.innerHTML = html;
+                return true;
+            }
+            catch(ee) {
+                return false;
+            }
+        }
+    }
 };
 
 WicketAjaxDebug.addEvent(window, "load", WicketAjaxDebug.init);
\ No newline at end of file


Reply via email to