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);
},
// 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());
}
}