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()
*/