You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2022/02/02 21:34:13 UTC

[wicket] branch wicket-9.x updated: WICKET-6953 defer non-ajax only

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-9.x by this push:
     new 7761896  WICKET-6953 defer non-ajax only
7761896 is described below

commit 77618961508f7a799c3cb7b40d4a89eed054b0c0
Author: Sven Meier <sv...@apache.org>
AuthorDate: Wed Feb 2 22:01:55 2022 +0100

    WICKET-6953 defer non-ajax only
---
 .../head/filter/JavaScriptDeferHeaderResponse.java | 33 ++++++++++------------
 .../wicket/markup/head/filter/DeferredPage.html    |  1 +
 .../wicket/markup/head/filter/DeferredPage.java    |  9 +++++-
 .../markup/head/filter/DeferredPageExpected.html   |  9 +++---
 .../head/filter/DeferredPage_AjaxExpected.html     | 18 ++++++++++++
 .../head/filter/FilteringHeaderResponseTest.java   |  6 +++-
 6 files changed, 52 insertions(+), 24 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/JavaScriptDeferHeaderResponse.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/JavaScriptDeferHeaderResponse.java
index c00519f..e0cdacc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/JavaScriptDeferHeaderResponse.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/JavaScriptDeferHeaderResponse.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.head.filter;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.util.string.JavaScriptUtils;
 import org.apache.wicket.markup.head.AbstractJavaScriptReferenceHeaderItem;
 import org.apache.wicket.markup.head.HeaderItem;
@@ -26,8 +27,8 @@ import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.markup.html.DecoratingHeaderResponse;
-import org.apache.wicket.page.PartialPageUpdate;
 import org.apache.wicket.request.Response;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.util.string.Strings;
 
 /**
@@ -60,18 +61,20 @@ public class JavaScriptDeferHeaderResponse extends DecoratingHeaderResponse
 	@Override
 	public void render(HeaderItem item)
 	{
-		while (item instanceof IWrappedHeaderItem) {
-			item = ((IWrappedHeaderItem)item).getWrapped();
-		}
+		if (RequestCycle.get().find(AjaxRequestTarget.class).isEmpty()) {
+			while (item instanceof IWrappedHeaderItem) {
+				item = ((IWrappedHeaderItem)item).getWrapped();
+			}
 
-		if (item instanceof AbstractJavaScriptReferenceHeaderItem) {
-			((AbstractJavaScriptReferenceHeaderItem)item).setDefer(true);
-		} else if (item instanceof JavaScriptContentHeaderItem) {
-			item = new NativeOnDomContentLoadedHeaderItem(((JavaScriptContentHeaderItem)item).getJavaScript());
-		} else if (item instanceof OnDomReadyHeaderItem) {
-			item = new NativeOnDomContentLoadedHeaderItem(((OnDomReadyHeaderItem)item).getJavaScript());
-		} else if (item instanceof OnLoadHeaderItem) {
-			item = new NativeOnLoadHeaderItem(((OnLoadHeaderItem)item).getJavaScript());
+			if (item instanceof AbstractJavaScriptReferenceHeaderItem) {
+				((AbstractJavaScriptReferenceHeaderItem)item).setDefer(true);
+			} else if (item instanceof JavaScriptContentHeaderItem) {
+				item = new NativeOnDomContentLoadedHeaderItem(((JavaScriptContentHeaderItem)item).getJavaScript());
+			} else if (item instanceof OnDomReadyHeaderItem) {
+				item = new NativeOnDomContentLoadedHeaderItem(((OnDomReadyHeaderItem)item).getJavaScript());
+			} else if (item instanceof OnLoadHeaderItem) {
+				item = new NativeOnLoadHeaderItem(((OnLoadHeaderItem)item).getJavaScript());
+			}
 		}
 		
 		super.render(item);
@@ -79,9 +82,6 @@ public class JavaScriptDeferHeaderResponse extends DecoratingHeaderResponse
 
 	/**
 	 * A specialization that uses native "DOMContentLoaded" events without dependency to external JavaScript.
-	 * <p>
-	 * For Ajax requests we utilize the fact, that {@link PartialPageUpdate} renders {@link #getJavaScript()} only,
-	 * thus executing the JavaScript directly without any event registration.
 	 */
 	private static class NativeOnDomContentLoadedHeaderItem extends OnDomReadyHeaderItem
 	{
@@ -113,9 +113,6 @@ public class JavaScriptDeferHeaderResponse extends DecoratingHeaderResponse
 	
 	/**
 	 * A specialization that uses native "load" events without dependency to external JavaScript 
-	 * <p>
-	 * For Ajax requests we utilize the fact, that {@link PartialPageUpdate} renders {@link #getJavaScript()} only,
-	 * thus executing the JavaScript directly without any event registration.
 	 */
 	private static class NativeOnLoadHeaderItem extends OnLoadHeaderItem
 	{
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.html b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.html
index ee4a485..17099a5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.html
@@ -1,4 +1,5 @@
 <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
     <body>
+    	<div wicket:id="c"></div>
     </body>
 </html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.java
index b5e3850..ac8c4fe 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head.filter;
 
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
 
 /**
@@ -27,6 +28,8 @@ public class DeferredPage extends WebPage
 {
 	private static final long serialVersionUID = 1L;
 
+	public AjaxEventBehavior behavior;
+	
 	/**
 	 * Construct.
 	 * 
@@ -34,12 +37,16 @@ public class DeferredPage extends WebPage
 	 */
 	public DeferredPage()
 	{
-		add(new AjaxEventBehavior("click") {
+		WebMarkupContainer c = new WebMarkupContainer("c");
+		add(c);
+
+		c.add(behavior = new AjaxEventBehavior("click") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			protected void onEvent(AjaxRequestTarget target)
 			{
+				target.add(c);
 			}
 		});
 	}
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPageExpected.html b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPageExpected.html
index e4305c5..f39ee24 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPageExpected.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPageExpected.html
@@ -1,6 +1,6 @@
 <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
-    <head><script type="text/javascript" defer="defer" src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-3.6.0.js"></script>
-<script type="text/javascript" defer="defer" src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script>
+    <head><script type="text/javascript" defer="defer" src="./resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-3.6.0.js"></script>
+<script type="text/javascript" defer="defer" src="./resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script>
 <script type="text/javascript">
 /*<![CDATA[*/
 document.addEventListener('DOMContentLoaded', function() { Wicket.Log.enabled=true;; });
@@ -8,17 +8,18 @@ document.addEventListener('DOMContentLoaded', function() { Wicket.Log.enabled=tr
 </script>
 <script type="text/javascript">
 /*<![CDATA[*/
-document.addEventListener('DOMContentLoaded', function() { Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.markup.head.filter.DeferredPage?0";; });
+document.addEventListener('DOMContentLoaded', function() { Wicket.Ajax.baseUrl="wicket/page?0";; });
 /*]]>*/
 </script>
 <script type="text/javascript">
 /*<![CDATA[*/
 document.addEventListener('DOMContentLoaded', function() { 
-Wicket.Ajax.ajax({"u":"./org.apache.wicket.markup.head.filter.DeferredPage?0-1.0-","e":"click"});;
+Wicket.Ajax.ajax({"u":"./page?0-1.0-c","c":"c1","e":"click"});;
 Wicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);
 ; });
 /*]]>*/
 </script>
 </head><body>
+    	<div wicket:id="c" id="c1"></div>
     </body>
 </html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage_AjaxExpected.html b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage_AjaxExpected.html
new file mode 100644
index 0000000..db06f8d
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/DeferredPage_AjaxExpected.html
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><ajax-response><component id="c1" ><![CDATA[<div wicket:id="c" id="c1"></div>]]></component><header-contribution><![CDATA[<head xmlns:wicket="http://wicket.apache.org"><script type="text/javascript" src="./resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-3.6.0.js"></script>
+<script type="text/javascript" src="./resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script>
+<script type="text/javascript" id="wicket-ajax-debug-enable">
+/*<![CDATA[*/
+Wicket.Log.enabled=true;
+/*]]]]><![CDATA[>*/
+</script>
+<script type="text/javascript" id="wicket-ajax-base-url">
+/*<![CDATA[*/
+Wicket.Ajax.baseUrl="wicket/page?0-1.0-c";
+/*]]]]><![CDATA[>*/
+</script>
+</head>]]></header-contribution><evaluate><![CDATA[<head xmlns:wicket="http://wicket.apache.org"><script type="text/javascript">
+/*<![CDATA[*/
+(function(){Wicket.Ajax.ajax({"u":"./page?0-1.0-c","c":"c1","e":"click"});})();
+/*]]]]><![CDATA[>*/
+</script>
+</head>]]></evaluate></ajax-response>
\ No newline at end of file
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/FilteringHeaderResponseTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/FilteringHeaderResponseTest.java
index 610abbc..dcbdbb7 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/FilteringHeaderResponseTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/head/filter/FilteringHeaderResponseTest.java
@@ -113,7 +113,11 @@ class FilteringHeaderResponseTest extends WicketTestCase
 	{
 		tester.getApplication().getHeaderResponseDecorators()
 			.add(response -> new JavaScriptDeferHeaderResponse(response));
-		executeTest(DeferredPage.class, "DeferredPageExpected.html");
+		
+		DeferredPage page = new DeferredPage();
+		executeTest(page, "DeferredPageExpected.html");
+		
+		executeBehavior(page.behavior, "DeferredPage_AjaxExpected.html");
 	}
 
 	/**