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 2014/12/05 12:26:19 UTC

wicket git commit: WICKET-5783 Multiple events in AjaxEventBehavior with prefix 'on'

Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x aa1a0356a -> 6d2334974


WICKET-5783 Multiple events in AjaxEventBehavior with prefix 'on'


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

Branch: refs/heads/wicket-6.x
Commit: 6d2334974f63ac931e9bad640cc1661527800365
Parents: aa1a035
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Dec 5 12:24:49 2014 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Dec 5 12:26:12 2014 +0100

----------------------------------------------------------------------
 .../apache/wicket/ajax/AjaxEventBehavior.java   | 44 +++++++++----
 .../wicket/ajax/AjaxEventBehaviorTest.java      | 68 ++++++++++++++++++++
 2 files changed, 101 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/6d233497/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
index 76ffee2..d605d30 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
@@ -16,11 +16,16 @@
  */
 package org.apache.wicket.ajax;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.lang.Checks;
+import org.apache.wicket.util.string.Strings;
 
 /**
  * An ajax behavior that is attached to a certain client-side (usually javascript) event, such as
@@ -41,7 +46,14 @@ import org.apache.wicket.util.lang.Args;
  * This behavior will be linked to the <em>click</em> javascript event of the div WebMarkupContainer
  * represents, and so anytime a user clicks this div the {@link #onEvent(AjaxRequestTarget)} of the
  * behavior is invoked.
- * 
+ *
+ * <p>
+ * <strong>Note</strong>: {@link #getEvent()} method cuts any <em>on</em> prefix from the given event name(s).
+ * This is being done for easier migration of applications coming from Wicket 1.5.x where Wicket used
+ * inline attributes like 'onclick=...'. If the application needs to use custom events with names starting with
+ * <em>on</em> then {@link #getEvent()} should be overridden.
+ * </p>
+ *
  * @since 1.2
  * 
  * @author Igor Vaynberg (ivaynberg)
@@ -65,12 +77,6 @@ public abstract class AjaxEventBehavior extends AbstractDefaultAjaxBehavior
 
 		onCheckEvent(event);
 
-		event = event.toLowerCase();
-		if (event.startsWith("on"))
-		{
-			event = event.substring(2);
-		}
-
 		this.event = event;
 	}
 
@@ -92,7 +98,9 @@ public abstract class AjaxEventBehavior extends AbstractDefaultAjaxBehavior
 	{
 		super.updateAjaxAttributes(attributes);
 
-		attributes.setEventNames(event);
+		String evt = getEvent();
+		Checks.notEmpty(evt, "getEvent() should return non-empty event name(s)");
+		attributes.setEventNames(evt);
 	}
 
 	/**
@@ -105,13 +113,27 @@ public abstract class AjaxEventBehavior extends AbstractDefaultAjaxBehavior
 	}
 
 	/**
-	 * 
 	 * @return event
 	 *      the event this behavior is attached to
 	 */
-	public final String getEvent()
+	public String getEvent()
 	{
-		return event;
+		String events = event.toLowerCase();
+		String[] splitEvents = events.split("\\s+");
+		List<String> cleanedEvents = new ArrayList<String>(splitEvents.length);
+		for (String evt : splitEvents)
+		{
+			if (Strings.isEmpty(evt) == false)
+			{
+				if (evt.startsWith("on"))
+				{
+					evt = evt.substring(2);
+				}
+				cleanedEvents.add(evt);
+			}
+		}
+
+		return Strings.join(" ", cleanedEvents);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/6d233497/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
index 5c6a2c1..52d9e42 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax;
 
+import static org.hamcrest.Matchers.is;
+
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.wicket.MarkupContainer;
@@ -62,6 +64,72 @@ public class AjaxEventBehaviorTest extends WicketTestCase
 		assertEquals(4, counter.get());
 	}
 
+	@Test(expected = IllegalArgumentException.class)
+	public void nullName()
+	{
+		new EventNamesBehavior(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void emptyName()
+	{
+		new EventNamesBehavior("");
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void spacesName()
+	{
+		new EventNamesBehavior("  ");
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void tabName()
+	{
+		new EventNamesBehavior("\t");
+	}
+
+	@Test
+	public void cutLeadingOnPrefix() {
+		AjaxEventBehavior behavior = new EventNamesBehavior("onevent");
+		assertThat(behavior.getEvent(), is("event"));
+
+		behavior = new EventNamesBehavior("event");
+		assertThat(behavior.getEvent(), is("event"));
+
+		behavior = new EventNamesBehavior("onevent onevent2");
+		assertThat(behavior.getEvent(), is("event event2"));
+
+		behavior = new EventNamesBehavior("event onevent2");
+		assertThat(behavior.getEvent(), is("event event2"));
+
+		behavior = new EventNamesBehavior("event event2");
+		assertThat(behavior.getEvent(), is("event event2"));
+
+		behavior = new EventNamesBehavior("event  onevent2on");
+		assertThat(behavior.getEvent(), is("event event2on"));
+
+		behavior = new EventNamesBehavior("  event   onevent2on    \t  onevent3on  onon ");
+		assertThat(behavior.getEvent(), is("event event2on event3on on"));
+	}
+
+	private static class EventNamesBehavior extends AjaxEventBehavior
+	{
+		/**
+		 * Construct.
+		 *
+		 * @param event the event this behavior will be attached to
+		 */
+		public EventNamesBehavior(String event)
+		{
+			super(event);
+		}
+
+		@Override
+		protected void onEvent(AjaxRequestTarget target)
+		{
+		}
+	}
+
 	/**
 	 * Test page for #executeSecondEvent()
 	 */