You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/07/10 14:39:17 UTC

git commit: WICKET-4649 Add an additional Ajax call listener point - before the call

Updated Branches:
  refs/heads/master 747a1b475 -> 9f8af183e


WICKET-4649 Add an additional Ajax call listener point - before the call


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9f8af183
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9f8af183
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9f8af183

Branch: refs/heads/master
Commit: 9f8af183e745d91966ceb3081156883a330f9037
Parents: 747a1b4
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 10 15:34:35 2012 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 10 15:34:35 2012 +0300

----------------------------------------------------------------------
 .../wicket/ajax/AbstractDefaultAjaxBehavior.java   |    6 +++-
 .../wicket/ajax/attributes/AjaxCallListener.java   |   20 +++++++++++++++
 .../wicket/ajax/attributes/IAjaxCallListener.java  |   19 ++++++++++++-
 .../wicket/ajax/res/js/wicket-ajax-jquery.js       |    7 +++-
 .../ajax/AbstractDefaultAjaxBehaviorTest.java      |    2 +-
 .../wicket/examples/ajax/builtin/LinksPage.java    |    2 +-
 .../captcha/kittens/KittenCaptchaPanel.java        |    2 +-
 7 files changed, 50 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/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 899d5e8..6018ea7 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
@@ -67,7 +67,8 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior
 	private static final String FAILURE_HANDLER_FUNCTION_TEMPLATE   = "function(attrs, jqXHR, errorMessage, textStatus){%s}";
 	private static final String SUCCESS_HANDLER_FUNCTION_TEMPLATE   = "function(attrs, jqXHR, data, textStatus){%s}";
 	private static final String AFTER_HANDLER_FUNCTION_TEMPLATE     = "function(attrs){%s}";
-	private static final String BEFORE_HANDLER_FUNCTION_TEMPLATE    = "function(attrs, jqXHR, settings){%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}";
 
 	/**
 	 * Subclasses should call super.onBind()
@@ -251,6 +252,9 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior
 					CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component);
 					appendListenerHandler(beforeHandler, attributesJson, "bh", BEFORE_HANDLER_FUNCTION_TEMPLATE);
 
+					CharSequence beforeSendHandler = ajaxCallListener.getBeforeSendHandler(component);
+					appendListenerHandler(beforeSendHandler, attributesJson, "bsh", BEFORE_SEND_HANDLER_FUNCTION_TEMPLATE);
+
 					CharSequence afterHandler = ajaxCallListener.getAfterHandler(component);
 					appendListenerHandler(afterHandler, attributesJson, "ah", AFTER_HANDLER_FUNCTION_TEMPLATE);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/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 c69a1dc..1832786 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
@@ -31,6 +31,7 @@ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeade
 	private StringBuilder success;
 	private StringBuilder failure;
 	private StringBuilder before;
+	private StringBuilder beforeSend;
 	private StringBuilder after;
 	private StringBuilder complete;
 	private StringBuilder precondition;
@@ -48,6 +49,19 @@ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeade
 		return this;
 	}
 
+	public AjaxCallListener onBeforeSend(final CharSequence beforeSend)
+	{
+		if (Strings.isEmpty(beforeSend) == false)
+		{
+			if (this.beforeSend == null)
+			{
+				this.beforeSend = new StringBuilder();
+			}
+			this.beforeSend.append(beforeSend);
+		}
+		return this;
+	}
+
 	public AjaxCallListener onAfter(final CharSequence after)
 	{
 		if (Strings.isEmpty(after) == false)
@@ -133,6 +147,12 @@ public class AjaxCallListener implements IAjaxCallListener, IComponentAwareHeade
 	}
 
 	@Override
+	public CharSequence getBeforeSendHandler(Component component)
+	{
+		return beforeSend;
+	}
+
+	@Override
 	public CharSequence getAfterHandler(Component component)
 	{
 		return after;

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/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 5fef9fa..534cc4e 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
@@ -63,7 +63,22 @@ public interface IAjaxCallListener
 	CharSequence getFailureHandler(Component component);
 
 	/**
-	 * The JavaScript that will be executed before the Ajax call.
+	 * 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:
+	 * <ol>
+	 *     <li>attrs - the AjaxRequestAttributes as JSON</li>
+	 * </ol>
+	 *
+	 * @param component
+	 *      the Component with the Ajax behavior
+	 * @return the JavaScript that will be executed before the Ajax call.
+	 */
+	CharSequence getBeforeHandler(Component component);
+
+
+	/**
+	 * The JavaScript that will be executed right before make of the the Ajax call,
+	 * only if all preconditions pass.
 	 * The script will be executed in a function that receives the following parameters:
 	 * <ol>
 	 *     <li>attrs - the AjaxRequestAttributes as JSON</li>
@@ -75,7 +90,7 @@ public interface IAjaxCallListener
 	 *      the Component with the Ajax behavior
 	 * @return the JavaScript that will be executed before the Ajax call.
 	 */
-	CharSequence getBeforeHandler(Component component);
+	CharSequence getBeforeSendHandler(Component component);
 
 	/**
 	 * The JavaScript that will be executed after the Ajax call.

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/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 ebe2b48..d980754 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
@@ -453,6 +453,9 @@
 				headers["Wicket-FocusedElementId"] = Wicket.Focus.lastFocusId;
 			}
 
+			Wicket.Event.publish('/ajax/call/before', attrs);
+			self._executeHandlers(attrs.bh, attrs);
+
 			if (attrs.mp) { // multipart form. jQuery doesn't help here ...
 				// TODO Wicket.next - should we execute all handlers ?!
 				// Wicket 1.5 didn't support success/failure handlers for this, but we can do it
@@ -534,8 +537,8 @@
 						}
 					}
 
-					Wicket.Event.publish('/ajax/call/before', attrs, jqXHR, settings);
-					self._executeHandlers(attrs.bh, attrs, jqXHR, settings);
+					Wicket.Event.publish('/ajax/call/beforeSend', attrs, jqXHR, settings);
+					self._executeHandlers(attrs.bsh, attrs, jqXHR, settings);
 
 					if (attrs.i) {
 						// show the indicator

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/wicket-core/src/test/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehaviorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehaviorTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehaviorTest.java
index 1741127..bf947f5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehaviorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehaviorTest.java
@@ -65,7 +65,7 @@ public class AbstractDefaultAjaxBehaviorTest extends Assert
 
 		CharSequence json = behavior.renderAjaxAttributes(component, attributes);
 
-		String expected = "{\"coh\":[function(attrs, jqXHR, textStatus){alert('Complete!');}],\"u\":\"some/url\",\"pre\":[function(attrs, jqXHR, settings){return somePrecondition();}],\"fh\":[function(attrs, jqXHR, errorMessage, textStatus){alert('Failure!');}],\"bh\":[function(attrs, jqXHR, settings){alert('Before!');}],\"sh\":[function(attrs, jqXHR, data, textStatus){alert('Success!');}],\"ah\":[function(attrs){alert('After!');}]}";
+		String expected = "{\"coh\":[function(attrs, jqXHR, textStatus){alert('Complete!');}],\"u\":\"some/url\",\"pre\":[function(attrs, jqXHR, settings){return somePrecondition();}],\"fh\":[function(attrs, jqXHR, errorMessage, textStatus){alert('Failure!');}],\"bh\":[function(attrs){alert('Before!');}],\"sh\":[function(attrs, jqXHR, data, textStatus){alert('Success!');}],\"ah\":[function(attrs){alert('After!');}]}";
 		assertEquals(expected, json);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
index 3055038..e15635c 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
@@ -150,7 +150,7 @@ public class LinksPage extends BasePage
 					}
 
 					@Override
-					public CharSequence getBeforeHandler(Component component)
+					public CharSequence getBeforeSendHandler(Component component)
 					{
 						return "alert('Before ajax call');";
 					}

http://git-wip-us.apache.org/repos/asf/wicket/blob/9f8af183/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
index d031571..bd0c33f 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
@@ -178,7 +178,7 @@ public class KittenCaptchaPanel extends Panel
 				super.updateAjaxAttributes(attributes);
 				IAjaxCallListener ajaxCallListener = new AjaxCallListener() {
 					@Override
-					public CharSequence getBeforeHandler(Component component)
+					public CharSequence getBeforeSendHandler(Component component)
 					{
 						return "showLoadingIndicator();";
 					}