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 2020/10/15 20:48:44 UTC

[wicket] 01/03: Revert "WICKET-6840 prepare components before writing prepend JavaScripts"

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

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

commit 140fdd7fceff49f18b5e85b696002b6cbca6e7f3
Author: Sven Meier <sv...@apache.org>
AuthorDate: Thu Oct 15 12:53:53 2020 +0200

    Revert "WICKET-6840 prepare components before writing prepend JavaScripts"
    
    This reverts commit b748e9caae4ceebb742ddbdce903e9f90fd6cc63.
---
 .../java/org/apache/wicket/behavior/Behavior.java  |  3 --
 .../org/apache/wicket/page/PartialPageUpdate.java  | 40 ++++++++--------------
 .../ajax/markup/html/AjaxIndicatorAppender.java    | 15 +++-----
 .../ajax/markup/html/AjaxEditableLabelPage.java    |  2 --
 .../ajax/markup/html/AjaxEditableTest.java         |  5 ---
 5 files changed, 19 insertions(+), 46 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
index b579f40..8c02f93 100644
--- a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
@@ -71,9 +71,6 @@ public abstract class Behavior
 
 	/**
 	 * Called when a component is about to render.
-	 * <p>
-	 * Note: This method is <em>not</em> called before rendering of the component tree
-	 * as the similar named method {@link Component#onBeforeRender()}.
 	 * 
 	 * @param component
 	 *            the component that has this behavior coupled
diff --git a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
index fdc5966..ef81182 100644
--- a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
+++ b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
@@ -158,15 +158,12 @@ public abstract class PartialPageUpdate
 
 			onBeforeRespond(response);
 
-			// prepare first so that components can contribute prepend JS
-			// from their onbeforerender methods. 
-			List<Component> toBeWritten = prepareComponents();
-			
-			// prepend javascripts
+			// queue up prepend javascripts. unlike other steps these are executed out of order so that
+			// components can contribute them from inside their onbeforerender methods.
 			writeEvaluations(response, prependJavaScripts);
 
 			// process added components
-			writeComponents(toBeWritten, response, encoding);
+			writeComponents(response, encoding);
 
 			onAfterRespond(response);
 
@@ -245,10 +242,20 @@ public abstract class PartialPageUpdate
 		}
 	}
 
-	private List<Component> prepareComponents()
+
+	/**
+	 * Processes components added to the target. This involves attaching components, rendering
+	 * markup into a client side xml envelope, and detaching them
+	 *
+	 * @param response
+	 *      the response to write to
+	 * @param encoding
+	 *      the encoding for the response
+	 */
+	private void writeComponents(Response response, String encoding)
 	{
 		componentsFrozen = true;
-		
+
 		List<Component> toBeWritten = new ArrayList<>(markupIdToComponent.size());
 		
 		// delay preparation of feedbacks after all other components
@@ -263,23 +270,6 @@ public abstract class PartialPageUpdate
 			// .. now prepare all postponed feedbacks
 			delay.beforeRender();
 		}
-		
-		return toBeWritten;
-	}
-
-	/**
-	 * Processes components added to the target. This involves attaching components, rendering
-	 * markup into a client side xml envelope, and detaching them
-	 *
-	 * @param response
-	 *      the response to write to
-	 * @param encoding
-	 *      the encoding for the response
-	 */
-	private void writeComponents(List<Component> toBeWritten, Response response, String encoding)
-	{
-		componentsFrozen = true;
-
 
 		// write components
 		for (Component component : toBeWritten)
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java
index 27b6493..770ca19 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java
@@ -22,7 +22,6 @@ import org.apache.wicket.ajax.IAjaxIndicatorAware;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.page.PartialPageUpdate;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.cycle.RequestCycle;
@@ -76,18 +75,11 @@ public class AjaxIndicatorAppender extends Behavior
 		this.indicator = indicator;
 	}
 
-	/**
-	 * Remove a possibly remaining indicator on partial updates of the page,
-	 * since a new indicator will be rendered anyways.
-	 * <p> 
-	 * Note: JavaScripts can not be prepended from {@link #beforeRender(Component)}, since
-	 * at that time the prepend JavaScripts are already rendered.  
-	 * 
-	 * @see PartialPageUpdate
-	 */
 	@Override
-	public void onConfigure(Component component)
+	public void renderHead(final Component component, final IHeaderResponse response)
 	{
+		super.renderHead(component, response);
+
 		component.getRequestCycle().find(IPartialPageRequestHandler.class).ifPresent(target -> {
 			final String javascript = "var e = Wicket.$('" + getMarkupId() +
 				"'); if (e != null && typeof(e.parentNode) != 'undefined') e.parentNode.removeChild(e);";
@@ -96,6 +88,7 @@ public class AjaxIndicatorAppender extends Behavior
 		});
 	}
 
+
 	@Override
 	public void afterRender(final Component component)
 	{
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabelPage.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabelPage.java
index 6913727..d4b9227 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabelPage.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabelPage.java
@@ -35,9 +35,7 @@ public class AjaxEditableLabelPage extends WebPage
 	{
 		final AjaxEditableLabel<String> ajaxLabel = new AjaxEditableLabel<String>("ajaxLabel",
 			new Model<>("ajaxTest"));
-		ajaxLabel.add(new AjaxIndicatorAppender());
 		add(ajaxLabel);
-		
 		add(new AjaxLink<Void>("toggle")
 		{
 			private static final long serialVersionUID = 1L;
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
index a54a8c7..316201f 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.extensions.ajax.markup.html;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -81,10 +80,6 @@ public class AjaxEditableTest extends WicketTestCase
 		tester.executeBehavior(editorBehavior);
 		tester.assertInvisible("ajaxLabel:editor");
 		tester.assertVisible("ajaxLabel:label");
-		
-		// WICKET-6840 prepended JavaScript comes before component replacement
-		String response = tester.getLastResponseAsString();
-		assertTrue(response.indexOf("<header-contribution") < response.indexOf("<component"), "prepend before component");
 	}
 
 	/**