You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/04/29 15:31:36 UTC

svn commit: r1097812 - /wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax-debug.js

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