]> source.dussan.org Git - gwtquery.git/commitdiff
improve off and on methods jd_off
authorjdramaix <julien.dramaix@gmail.com>
Wed, 17 Dec 2014 10:17:28 +0000 (11:17 +0100)
committerjdramaix <julien.dramaix@gmail.com>
Wed, 17 Dec 2014 10:17:28 +0000 (11:17 +0100)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryEventsTestGwt.java
gwtquery-core/src/test/java/com/google/gwt/query/client/ajax/AjaxTestJre.java

index 09e69fe3ad1b6e67c9bca9cc2ad9795a86378ef5..7f5bbf828d33eab238e3a2c975f7d7dd9bf115cb 100644 (file)
@@ -3236,6 +3236,10 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Attach an event handler function for one or more events to the selected elements.
    */
   public GQuery on(String eventName, String selector, Function... funcs) {
+    if (selector == null || selector.isEmpty()) {
+      return on(eventName, funcs);
+    }
+
     return delegate(selector, eventName, funcs);
   }
 
@@ -3243,6 +3247,10 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Attach an event handler function for one or more events to the selected elements.
    */
   public GQuery on(String eventName, String selector, Object data, Function... funcs) {
+    if (selector == null || selector.isEmpty()) {
+      return on(eventName, data, funcs);
+    }
+
     return delegate(selector, eventName, data, funcs);
   }
 
@@ -3250,7 +3258,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Remove all event handlers.
    */
   public GQuery off() {
-    return as(Effects).off();
+    return as(Events).off();
   }
 
   /**
@@ -3271,6 +3279,9 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * Remove an event handler
    */
   public GQuery off(String eventName, String selector) {
+    if (selector == null || selector.isEmpty()) {
+      return off(eventName);
+    }
     return undelegate(selector, eventName);
   }
 
index 31ff1695f3b4b742986cdc8259e7f00afe8766f1..98700235b5766bff36b6c0636b131bacfd2a2f3f 100644 (file)
  */
 package com.google.gwt.query.client;
 
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.NodeList;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.junit.DoNotRunWith;
-import com.google.gwt.junit.Platform;
-import com.google.gwt.junit.client.GWTTestCase;
-import com.google.gwt.query.client.css.CSS;
-import com.google.gwt.query.client.css.Length;
-import com.google.gwt.query.client.css.RGBColor;
-import com.google.gwt.query.client.plugins.Events;
-import com.google.gwt.query.client.plugins.events.EventsListener;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.RootPanel;
-
 import static com.google.gwt.query.client.GQuery.$;
 import static com.google.gwt.query.client.GQuery.document;
 import static com.google.gwt.query.client.GQuery.lazy;
@@ -48,6 +30,23 @@ import static com.google.gwt.user.client.Event.ONMOUSEOUT;
 import static com.google.gwt.user.client.Event.ONMOUSEOVER;
 import static com.google.gwt.user.client.Event.ONMOUSEUP;
 
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.junit.DoNotRunWith;
+import com.google.gwt.junit.Platform;
+import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.query.client.css.CSS;
+import com.google.gwt.query.client.css.Length;
+import com.google.gwt.query.client.css.RGBColor;
+import com.google.gwt.query.client.plugins.Events;
+import com.google.gwt.query.client.plugins.events.EventsListener;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.RootPanel;
+
 /**
  * Test class for testing gwt events plugin api.
  */
@@ -1186,6 +1185,134 @@ public class GQueryEventsTestGwt extends GWTTestCase {
     }
   }
 
+  public void testOnOff() {
+    $(e).html("<div class='mainDiv'><div class='subDiv'>Content</div></div>");
+
+    $(".mainDiv", e).on("click", new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("color", "red");
+      }
+    });
+
+    $(".mainDiv", e).click();
+
+    assertEquals("red", $(".mainDiv", e).css("color", false));
+    
+    // reset
+    $(".mainDiv", e).css("color", "black");
+    
+    $(".mainDiv", e).off("click");
+
+    $(".mainDiv", e).click();
+
+    assertEquals("black", $(".mainDiv", e).css("color", false));
+
+    // try with other signatures by passing null to extra parameters
+    $(".mainDiv", e).on("click", (String) null, new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("color", "red");
+      }
+    });
+
+    $(".mainDiv", e).click();
+
+    assertEquals("red", $(".mainDiv", e).css("color", false));
+    
+    // reset
+    $(".mainDiv", e).css("color", "black");
+
+    $(".mainDiv", e).off("click");
+
+    // try with other signatures by passing null to extra parameters
+    $(".mainDiv", e).on("click", null,  new Object(), new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("color", "red");
+      }
+    });
+
+    $(".mainDiv", e).click();
+
+    assertEquals("red", $(".mainDiv", e).css("color", false));
+  }
+
+
+  public void testOff() {
+    $(e).html("<div class='mainDiv'><div class='subDiv'>Content</div></div>");
+
+    $(".mainDiv", e).on("click", new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("color", "red");
+      }
+    });
+
+    $(".mainDiv", e).on("mouseover", new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("background-color", "yellow");
+      }
+    });
+
+    $(".mainDiv", e).click().trigger(Event.ONMOUSEOVER);
+
+    assertEquals("red", $(".mainDiv", e).css("color", false));
+    assertEquals("yellow", $(".mainDiv", e).css("background-color", false));
+
+    // reset
+    $(".mainDiv", e).css("color", "black");
+    $(".mainDiv", e).css("background-color", "white");
+
+    $(".mainDiv", e).off();
+
+    $(".mainDiv", e).click().trigger(Event.ONMOUSEOVER);
+
+    assertEquals("black", $(".mainDiv", e).css("color", false));
+    assertEquals("white", $(".mainDiv", e).css("background-color", false));
+  }
+
+  
+  public void testOnOffWithSelector() {
+    $(e).html("<div class='mainDiv'><div class='subDiv'>Content " +
+        "0<span>blop</span></div></div><div class='mainDiv'><div class='subDiv'>" +
+        "Content 0<span>blop</span></div></div>");
+
+    $(".mainDiv", e).on("click", ".subDiv", new Function() {
+      @Override
+      public void f(Element e) {
+        $(e).css("color", "red");
+      }
+    });
+    
+
+    for (Element mainDiv : $(".mainDiv", e).elements()) {
+      for (int i = 0; i < 3; i++) {
+        String html = "<div class='subDiv'>Content " + i + "<span>blop</span></div>";
+        $(mainDiv).append(html);
+      }
+    }
+
+    assertEquals(8, $(".subDiv", e).length());
+
+    $("span", e).click();
+
+    for (Element el : $(".subDiv", e).elements()) {
+      assertEquals("red", $(el).css("color", false));
+      // reset
+      $(el).css("color", "black");
+    }
+
+    $(".mainDiv", e).off("click", ".subDiv");
+
+    $("span", e).click();
+
+    for (Element el : $(".subDiv", e).elements()) {
+      assertEquals("black", $(el).css(CSS.COLOR, false));
+    }
+  }
+
   public void testUnDelegateAll() {
 
     $(e).html(
index 64d7ce6ee453f5d101df27f36ea709598aa0afd3..8618f10d03bc97b6081a50ed8d413731190d0988 100644 (file)
@@ -107,4 +107,3 @@ public class AjaxTestJre extends AjaxTests {
     return server;
   }
 }
-