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 <[email protected]> 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"); } /**
