Repository: wicket Updated Branches: refs/heads/master 8417af664 -> e73718fd4
WICKET-5905 new topic /ajax/call/init Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e73718fd Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e73718fd Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e73718fd Branch: refs/heads/master Commit: e73718fd4ac52b5b9c8c652a87d5f76a8987a468 Parents: 8417af6 Author: Sven Meier <[email protected]> Authored: Wed May 13 14:15:42 2015 +0200 Committer: Sven Meier <[email protected]> Committed: Wed May 13 14:55:35 2015 +0200 ---------------------------------------------------------------------- .../ajax/AbstractDefaultAjaxBehavior.java | 8 +++++- .../ajax/attributes/AjaxAttributeName.java | 7 +++++ .../ajax/attributes/AjaxCallListener.java | 28 ++++++++++++++++++++ .../ajax/attributes/IAjaxCallListener.java | 14 ++++++++++ .../wicket/ajax/res/js/wicket-ajax-jquery.js | 3 +++ .../wicket/ajax/res/js/wicket-event-jquery.js | 1 + .../ajax/attributes/AjaxAttributeNameTest.java | 2 +- wicket-core/src/test/js/ajax.js | 1 + 8 files changed, 62 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java index b41a247..d49807c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java @@ -70,6 +70,7 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior private static final String AFTER_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; private static final String BEFORE_SEND_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, settings){%s}"; private static final String BEFORE_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; + private static final String INIT_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; /** * Subclasses should call super.onBind() @@ -244,7 +245,12 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior { if (ajaxCallListener != null) { - CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component); + CharSequence initHandler = ajaxCallListener.getInitHandler(component); + appendListenerHandler(initHandler, attributesJson, + AjaxAttributeName.INIT_HANDLER.jsonName(), + INIT_HANDLER_FUNCTION_TEMPLATE); + + CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component); appendListenerHandler(beforeHandler, attributesJson, AjaxAttributeName.BEFORE_HANDLER.jsonName(), BEFORE_HANDLER_FUNCTION_TEMPLATE); http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxAttributeName.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxAttributeName.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxAttributeName.java index 0429ec3..59ff7f8 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxAttributeName.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxAttributeName.java @@ -174,6 +174,13 @@ public enum AjaxAttributeName { BEFORE_HANDLER("bh"), /** + * init handler (ih) + * + * @see AjaxCallListener#getInitHandler(org.apache.wicket.Component) + */ + INIT_HANDLER("ih"), + + /** * the indicator id, if any found (i) * * @see AbstractDefaultAjaxBehavior#findIndicatorId() http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxCallListener.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxCallListener.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxCallListener.java index b0e6be2..043ede1 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxCallListener.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxCallListener.java @@ -28,6 +28,7 @@ import org.apache.wicket.util.string.Strings; */ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeaderContributor { + private StringBuilder init; private StringBuilder success; private StringBuilder failure; private StringBuilder before; @@ -37,6 +38,27 @@ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeade private StringBuilder precondition; /** + * Sets the JavaScript code that will be returned by {@link #getInitHandler(Component)}. + * If this code was already set, the new one will be appended to the existing one. + * + * @param init + * the JavaScript code for the corresponding handler + * @return This + */ + public AjaxCallListener onInit(final CharSequence init) + { + if (Strings.isEmpty(init) == false) + { + if (this.init == null) + { + this.init = new StringBuilder(); + } + this.init.append(init); + } + return this; + } + + /** * Sets the JavaScript code that will be returned by {@link #getBeforeHandler(Component)}. * If this code was already set, the new one will be appended to the existing one. * @@ -196,6 +218,12 @@ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeade } @Override + public CharSequence getInitHandler(Component component) + { + return init; + } + + @Override public CharSequence getBeforeHandler(Component component) { return before; http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java index 224f475..05a4760 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java @@ -37,6 +37,20 @@ import org.apache.wicket.Component; public interface IAjaxCallListener { /** + * The JavaScript that will be executed on initialization of the Ajax call, immediately after the causing event. + * The script will be executed in a function that receives the following + * parameters: + * <ol> + * <li>attrs - the AjaxRequestAttributes as JSON</li> + * </ol> + * + * @param component + * the Component with the Ajax behavior + * @return the JavaScript that will be executed on initialization of the Ajax call. + */ + CharSequence getInitHandler(Component component); + + /** * The JavaScript that will be executed before the Ajax call, as early as possible. Even before * the preconditions. The script will be executed in a function that receives the following * parameters: http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js index 56262ab..0261de3 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js @@ -1946,6 +1946,9 @@ attributes.event.extraData = data; } + call._executeHandlers(attributes.ih, attributes); + Wicket.Event.publish(Wicket.Event.Topic.AJAX_CALL_INIT, attributes); + var throttlingSettings = attributes.tr; if (throttlingSettings) { var postponeTimerOnUpdate = throttlingSettings.p || false; http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js index 9ab25bb..93711a7 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js @@ -293,6 +293,7 @@ Topic: { DOM_NODE_REMOVING : '/dom/node/removing', DOM_NODE_ADDED : '/dom/node/added', + AJAX_CALL_INIT : '/ajax/call/init', AJAX_CALL_BEFORE : '/ajax/call/before', AJAX_CALL_PRECONDITION : '/ajax/call/precondition', AJAX_CALL_BEFORE_SEND : '/ajax/call/beforeSend', http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java index c689423..922e9a8 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java @@ -57,7 +57,7 @@ public class AjaxAttributeNameTest extends Assert } assertEquals("all known json parameter names", - "tr|p|d|id|dt|wr|rt|pd|sp|ch|e|async|dep|ep|pre|coh|fh|sh|ah|bsh|bh|i|sc|mp|f|c|m|u|sel|", + "tr|p|d|id|dt|wr|rt|pd|sp|ch|e|async|dep|ep|pre|coh|fh|sh|ah|bsh|bh|ih|i|sc|mp|f|c|m|u|sel|", sb.toString()); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e73718fd/wicket-core/src/test/js/ajax.js ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/js/ajax.js b/wicket-core/src/test/js/ajax.js index 49e6e87..b2a38fc 100644 --- a/wicket-core/src/test/js/ajax.js +++ b/wicket-core/src/test/js/ajax.js @@ -450,6 +450,7 @@ jQuery(document).ready(function() { ok(attributes.sc === undefined, 'submitting component'); ok(attributes.i === undefined, 'indicator'); ok(attributes.pre === undefined, 'preconditions'); + ok(attributes.ih === undefined, 'init handlers'); ok(attributes.bh === undefined, 'before handlers'); ok(attributes.ah === undefined, 'after handler'); ok(attributes.sh === undefined, 'success handlers');
