Hi Sven, On Wed, Jul 8, 2015 at 12:58 PM, <[email protected]> wrote:
> Repository: wicket > Updated Branches: > refs/heads/wicket-6.x 6fa8616f4 -> 051bb4d08 > > > WICKET-5945 /ajax/call/done > > Conflicts: > > wicket-core/src/test/java/org/apache/wicket/ajax/attributes/AjaxAttributeNameTest.java > > > Project: http://git-wip-us.apache.org/repos/asf/wicket/repo > Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/051bb4d0 > Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/051bb4d0 > Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/051bb4d0 > > Branch: refs/heads/wicket-6.x > Commit: 051bb4d08cbf13ec85e434f37df2fcf380987d60 > Parents: 6fa8616 > Author: Sven Meier <[email protected]> > Authored: Wed Jul 8 11:41:27 2015 +0200 > Committer: Sven Meier <[email protected]> > Committed: Wed Jul 8 11:57:17 2015 +0200 > > ---------------------------------------------------------------------- > .../ajax/AbstractDefaultAjaxBehavior.java | 8 ++++ > .../ajax/attributes/AjaxAttributeName.java | 7 ++++ > .../ajax/attributes/AjaxCallListener.java | 40 ++++++++++++++++++++ > .../wicket/ajax/res/js/wicket-ajax-jquery.js | 18 ++++----- > .../wicket/ajax/res/js/wicket-event-jquery.js | 1 + > .../ajax/attributes/AjaxAttributeNameTest.java | 3 +- > 6 files changed, 66 insertions(+), 11 deletions(-) > ---------------------------------------------------------------------- > > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 d95330d..06d52cd 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 > @@ -72,6 +72,7 @@ public abstract class AbstractDefaultAjaxBehavior > extends AbstractAjaxBehavior > 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}"; > + private static final String DONE_HANDLER_FUNCTION_TEMPLATE = > "function(attrs){%s}"; > > /** > * Subclasses should call super.onBind() > @@ -313,6 +314,13 @@ public abstract class AbstractDefaultAjaxBehavior > extends AbstractAjaxBehavior > CharSequence precondition = > ajaxCallListener.getPrecondition(component); > > appendListenerHandler(precondition, attributesJson, > > AjaxAttributeName.PRECONDITION.jsonName(), PRECONDITION_FUNCTION_TEMPLATE); > + > + if (ajaxCallListener instanceof > AjaxCallListener) { > + CharSequence doneHandler = > ((AjaxCallListener) ajaxCallListener).getDoneHandler(component); > + > appendListenerHandler(doneHandler, attributesJson, > + > AjaxAttributeName.DONE_HANDLER.jsonName(), > + > DONE_HANDLER_FUNCTION_TEMPLATE); > + } > } > } > > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 12edc71..bea715d 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 > @@ -181,6 +181,13 @@ public enum AjaxAttributeName { > INIT_HANDLER("ih"), > > /** > + * done handler (dh) > + * > + * @see > AjaxCallListener#getDoneHandler(org.apache.wicket.Component) > + */ > + DONE_HANDLER("dh"), > + > + /** > * the indicator id, if any found (i) > * > * @see AbstractDefaultAjaxBehavior#findIndicatorId() > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 927c4d7..3ba3fa7 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 > @@ -36,6 +36,7 @@ public class AjaxCallListener implements > IAjaxCallListener, IComponentAwareHeade > private StringBuilder after; > private StringBuilder complete; > private StringBuilder precondition; > + private StringBuilder done; > > /** > * Sets the JavaScript code that will be returned by {@link > #getInitHandler(Component)}. > @@ -59,6 +60,27 @@ public class AjaxCallListener implements > IAjaxCallListener, IComponentAwareHeade > } > > /** > + * Sets the JavaScript code that will be returned by {@link > #getDoneHandler(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 onDone(final CharSequence done) > + { > + if (Strings.isEmpty(done) == false) > + { > + if (this.done == null) > + { > + this.done = new StringBuilder(); > + } > + this.done.append(done); > + } > + 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. > * > @@ -255,6 +277,24 @@ public class AjaxCallListener implements > IAjaxCallListener, IComponentAwareHeade > return precondition; > } > > + > + /** > + * The JavaScript that will be executed after the Ajax call is > done, regardless whether it was > + * sent or not. The script will be executed in a function that > receives the following > + * parameters: > + * <ol> > + * <li>attrs - the AjaxRequestAttributes as JSON</li> > + * </ol> > + * TODO Wicket 7: pull up into IAjaxCallListener > + * > + * @param component > + * the Component with the Ajax behavior > + * @return the JavaScript that will be executed after the Ajax > call is done. > + */ > + public CharSequence getDoneHandler(Component component) { > + return done; > + } > + > @Override > public void renderHead(Component component, IHeaderResponse > response) > { > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 794c2ef..44de5f0 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 > @@ -550,9 +550,6 @@ > */ > doAjax: function (attrs) { > > - // keep channel for done() > - this.channel = attrs.ch; > - > var > // the headers to use for each Ajax request > headers = { > @@ -611,7 +608,7 @@ > } > if (result === false) { > Wicket.Log.info("Ajax > request stopped because of precondition check, url: " + attrs.u); > - self.done(); > + self.done(attrs); > return false; > } > } > @@ -702,7 +699,7 @@ > > self._executeHandlers(attrs.coh, attrs, jqXHR, textStatus); > > we.publish(topic.AJAX_CALL_COMPLETE, attrs, jqXHR, textStatus); > > - self.done(); > + self.done(attrs); > return > FunctionsExecuter.DONE; > }, self)); > > @@ -759,7 +756,7 @@ > // In case the page isn't really > redirected. For example say the redirect is to an octet-stream. > // A file download popup will > appear but the page in the browser won't change. > this.success(context); > - this.done(); > + this.done(context.attrs); > > var rhttp = /^http:\/\//, // > checks whether the string starts with http:// > rhttps = /^https:\/\//; // > checks whether the string starts with https:// > @@ -930,7 +927,7 @@ > this._executeHandlers(attrs.coh, attrs, > null, null); > > Wicket.Event.publish(Wicket.Event.Topic.AJAX_CALL_COMPLETE, attrs, null, > null); > > - this.done(); > + this.done(attrs); > return FunctionsExecuter.DONE; > }, this); > > @@ -1112,8 +1109,11 @@ > }, this)); > }, > > - done: function () { > - Wicket.channelManager.done(this.channel); > + done: function (attrs) { > + this._executeHandlers(attrs.dh, attrs); > + > Wicket.Event.publish(Wicket.Event.Topic.AJAX_CALL_DONE, attrs); > + > + Wicket.channelManager.done(attrs.channel); > s/attrs.channel/attrs.ch/ > }, > > // Adds a closure that replaces a component > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 248c99b..1a83c4c 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 > @@ -323,6 +323,7 @@ > AJAX_CALL_COMPLETE : > '/ajax/call/complete', > AJAX_CALL_AFTER : > '/ajax/call/after', > AJAX_CALL_FAILURE : > '/ajax/call/failure', > + AJAX_CALL_DONE : '/ajax/call/done', > AJAX_HANDLERS_BOUND : > '/ajax/handlers/bound' > } > } > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/051bb4d0/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 8a50bfe..1c9398b 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 > @@ -58,7 +58,6 @@ public class AjaxAttributeNameTest > } > > Assert.assertEquals("all known json parameter names", > - > > "tr|p|d|id|dt|wr|rt|ad|sp|ch|e|async|dep|ep|pre|coh|fh|sh|ah|bsh|bh|ih|i|sc|mp|f|c|m|u|sel|", > - sb.toString()); > + > > "tr|p|d|id|dt|wr|rt|ad|sp|ch|e|async|dep|ep|pre|coh|fh|sh|ah|bsh|bh|ih|dh|i|sc|mp|f|c|m|u|sel|", > sb.toString()); > } > } > > Please add JS Unit tests for the new handler. Also add an entry to http://ci.apache.org/projects/wicket/guide/6.x/guide/ajax.html#ajax_5 Thanks!
