]> source.dussan.org Git - gwtquery.git/commitdiff
remove java.util.Map in GQuery class (closest method)
authorManolo Carrasco <manolo@apache.org>
Wed, 13 Apr 2011 10:20:57 +0000 (10:20 +0000)
committerManolo Carrasco <manolo@apache.org>
Wed, 13 Apr 2011 10:20:57 +0000 (10:20 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/events/EventsListener.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java

index 4698bcae282f77ff7af5a8408fcf6cf802b5fe0f..e946c434e167819377427dbcad3404d488096440 100644 (file)
@@ -19,6 +19,10 @@ import static com.google.gwt.query.client.plugins.Effects.Effects;
 import static com.google.gwt.query.client.plugins.Events.Events;\r
 import static com.google.gwt.query.client.plugins.SimpleNamedQueue.SimpleNamedQueue;\r
 \r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
 import com.google.gwt.core.client.GWT;\r
 import com.google.gwt.core.client.JavaScriptObject;\r
 import com.google.gwt.core.client.JsArray;\r
@@ -32,9 +36,9 @@ import com.google.gwt.dom.client.Node;
 import com.google.gwt.dom.client.NodeList;\r
 import com.google.gwt.dom.client.OptionElement;\r
 import com.google.gwt.dom.client.SelectElement;\r
-import com.google.gwt.dom.client.TextAreaElement;\r
 import com.google.gwt.dom.client.Style.Display;\r
 import com.google.gwt.dom.client.Style.HasCssName;\r
+import com.google.gwt.dom.client.TextAreaElement;\r
 import com.google.gwt.query.client.css.CSS;\r
 import com.google.gwt.query.client.css.HasCssValue;\r
 import com.google.gwt.query.client.css.TakesCssValue;\r
@@ -43,6 +47,7 @@ import com.google.gwt.query.client.impl.DocumentStyleImpl;
 import com.google.gwt.query.client.impl.SelectorEngine;\r
 import com.google.gwt.query.client.js.JsCache;\r
 import com.google.gwt.query.client.js.JsMap;\r
+import com.google.gwt.query.client.js.JsNamedArray;\r
 import com.google.gwt.query.client.js.JsNodeArray;\r
 import com.google.gwt.query.client.js.JsUtils;\r
 import com.google.gwt.query.client.plugins.Effects;\r
@@ -56,12 +61,6 @@ import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.GqUi;\r
 import com.google.gwt.user.client.ui.Widget;\r
 \r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
 /**\r
  * GwtQuery is a GWT clone of the popular jQuery library.\r
  */\r
@@ -1013,7 +1012,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * @param selector\r
    * @return\r
    */\r
-  public Map<String, List<Element>> closest(String[] selectors) {\r
+  public JsNamedArray<NodeList<Element>> closest(String[] selectors) {\r
     return closest(selectors, null);\r
   }\r
 \r
@@ -1027,56 +1026,46 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * @param selector\r
    * @return\r
    */\r
-  public Map<String, List<Element>> closest(String[] selectors, Node context) {\r
-    Map<String, List<Element>> results = new HashMap<String, List<Element>>();\r
+  public JsNamedArray<NodeList<Element>> closest(String[] selectors, Node context) {\r
+    JsNamedArray<NodeList<Element>> results = JsNamedArray.create();\r
 \r
     if (context == null) {\r
       context = currentContext;\r
     }\r
 \r
     Element first = get(0);\r
-\r
     if (first != null && selectors != null && selectors.length > 0) {\r
-\r
-      Map<String, GQuery> matches = new HashMap<String, GQuery>();\r
-\r
+      JsNamedArray<GQuery> matches = JsNamedArray.create();\r
       for (String selector : selectors) {\r
-        if (!matches.containsKey(selector)) {\r
+        if (!matches.exists(selector)) {\r
           matches.put(selector, selector.matches(POS_REGEX) ? $(selector,\r
               context) : null);\r
         }\r
       }\r
 \r
       Element current = first;\r
-\r
       while (current != null && current.getOwnerDocument() != null\r
           && current != context) {\r
         // for each selector, check if the current element match it.\r
-        for (String selector : matches.keySet()) {\r
+        for (String selector : matches.keys()) {\r
 \r
           GQuery pos = matches.get(selector);\r
-\r
           boolean match = pos != null ? pos.index(current) > -1\r
               : $(current).is(selector);\r
 \r
           if (match) {\r
-\r
-            List<Element> elementsMatchingSelector = results.get(selector);\r
-\r
+            JsNodeArray elementsMatchingSelector = results.get(selector).cast();\r
             if (elementsMatchingSelector == null) {\r
-              elementsMatchingSelector = new ArrayList<Element>();\r
+              elementsMatchingSelector = JsNodeArray.create();\r
               results.put(selector, elementsMatchingSelector);\r
             }\r
-\r
-            elementsMatchingSelector.add(current);\r
+            elementsMatchingSelector.addNode(current);\r
           }\r
         }\r
 \r
         current = current.getParentElement();\r
       }\r
-\r
     }\r
-\r
     return results;\r
   }\r
 \r
@@ -2305,6 +2294,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    */\r
   @SuppressWarnings("unchecked")\r
   public <W> List<W> map(Function f) {\r
+    @SuppressWarnings("rawtypes")\r
     ArrayList ret = new ArrayList();\r
     for (int i = 0; i < elements().length; i++) {\r
       Object o = f.f(elements()[i], i);\r
@@ -3899,7 +3889,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   }\r
 \r
   private GQuery domManip(String htmlString, int func) {\r
-    HashMap<Document, GQuery> cache = new HashMap<Document, GQuery>();\r
+    JsMap<Document, GQuery> cache = JsMap.createObject().cast();\r
     for (Element e : elements()) {\r
       Document d = e.getNodeType() == Node.DOCUMENT_NODE ? e.<Document> cast()\r
           : e.getOwnerDocument();\r
@@ -3910,7 +3900,6 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
       }\r
       domManip(g.clone(), func, e);\r
     }\r
-\r
     return this;\r
   }\r
 \r
index 6fe42c1af488d21e64988c2af899c7b3e9769b50..a499cff90a84617ce6f12a16c0f9ebfe00ef92c8 100644 (file)
@@ -17,6 +17,9 @@ package com.google.gwt.query.client;
 import static com.google.gwt.query.client.plugins.Effects.Effects;
 import static com.google.gwt.query.client.plugins.Events.Events;
 import static com.google.gwt.query.client.plugins.SimpleNamedQueue.SimpleNamedQueue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArray;
@@ -30,9 +33,9 @@ import com.google.gwt.dom.client.Node;
 import com.google.gwt.dom.client.NodeList;
 import com.google.gwt.dom.client.OptionElement;
 import com.google.gwt.dom.client.SelectElement;
-import com.google.gwt.dom.client.TextAreaElement;
 import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.dom.client.Style.HasCssName;
+import com.google.gwt.dom.client.TextAreaElement;
 import com.google.gwt.query.client.css.CSS;
 import com.google.gwt.query.client.css.HasCssValue;
 import com.google.gwt.query.client.css.TakesCssValue;
@@ -41,6 +44,7 @@ import com.google.gwt.query.client.impl.DocumentStyleImpl;
 import com.google.gwt.query.client.impl.SelectorEngine;
 import com.google.gwt.query.client.js.JsCache;
 import com.google.gwt.query.client.js.JsMap;
+import com.google.gwt.query.client.js.JsNamedArray;
 import com.google.gwt.query.client.js.JsNodeArray;
 import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.query.client.plugins.Effects;
@@ -53,11 +57,6 @@ import com.google.gwt.user.client.EventListener;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.GqUi;
 import com.google.gwt.user.client.ui.Widget;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import com.google.gwt.query.client.LazyBase;
 
 public interface LazyGQuery<T> extends LazyBase<T>{
@@ -433,7 +432,7 @@ public interface LazyGQuery<T> extends LazyBase<T>{
    * @param selector
    * @return
    */
-  Map<String, List<Element>> closest(String[] selectors);
+  JsNamedArray<NodeList<Element>> closest(String[] selectors);
 
   /**
    * Returns a {@link Map} object as key a selector and as value the list of
@@ -445,7 +444,7 @@ public interface LazyGQuery<T> extends LazyBase<T>{
    * @param selector
    * @return
    */
-  Map<String, List<Element>> closest(String[] selectors, Node context);
+  JsNamedArray<NodeList<Element>> closest(String[] selectors, Node context);
 
   /**
    * Get the first ancestor element that matches the selector (for each matched
index d673025afeed077b099ce4728351021f84282525..27b34f371ca9002394d2c7f185f7b6625a714097 100644 (file)
@@ -25,7 +25,9 @@ import java.util.Map;
 import com.google.gwt.core.client.Duration;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.dom.client.NodeList;
 import com.google.gwt.query.client.Function;
+import com.google.gwt.query.client.js.JsNamedArray;
 import com.google.gwt.query.client.js.JsObjectArray;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
@@ -117,7 +119,6 @@ public class EventsListener implements EventListener {
 
     @Override
     public boolean fire(Event event) {
-
       if (isEmpty()) {
         return true;
       }
@@ -134,11 +135,11 @@ public class EventsListener implements EventListener {
         return true;
       }
 
-      Map<String, List<Element>> realCurrentTargetBySelector = $(eventTarget).closest(
+      JsNamedArray<NodeList<Element>> realCurrentTargetBySelector = $(eventTarget).closest(
           selectors, liveContextElement);
 
       // nothing match the selectors
-      if (realCurrentTargetBySelector.isEmpty()) {
+      if (realCurrentTargetBySelector.length() == 0) {
         return true;
       }
 
@@ -146,15 +147,16 @@ public class EventsListener implements EventListener {
 
       com.google.gwt.query.client.plugins.events.Event gqEvent = com.google.gwt.query.client.plugins.events.Event.create(event);
 
-      for (String cssSelector : realCurrentTargetBySelector.keySet()) {
+      for (String cssSelector : realCurrentTargetBySelector.keys()) {
         List<BindFunction> bindFunctions = bindFunctionBySelector.get(cssSelector);
-
         if (bindFunctions == null){
           continue;
         }
         
         for (BindFunction f : bindFunctions) {
-          for (Element element : realCurrentTargetBySelector.get(cssSelector)) {
+          NodeList<Element> n = realCurrentTargetBySelector.get(cssSelector);
+          if (n != null ) for (int i = 0; i < n.getLength(); i++) {
+            Element element = n.getItem(i);
             gqEvent.setCurrentElementTarget(element);
             boolean subResult = f.fire(gqEvent);
             result &= subResult;
@@ -168,9 +170,7 @@ public class EventsListener implements EventListener {
 
       // trick to reset the right currentTarget on the original event on ie
       gqEvent.setCurrentElementTarget(liveContextElement);
-
       return result;
-
     }
 
     /**
index ed8d3b80619f0dbee3e503ccc6f7df43f31f14b5..6308403072dfab8893ee74e231ec96af34cded26 100644 (file)
@@ -19,9 +19,14 @@ import static com.google.gwt.query.client.GQuery.$;
 import static com.google.gwt.query.client.GQuery.$$;
 import static com.google.gwt.query.client.GQuery.document;
 
+import java.util.List;
+
+import junit.framework.Assert;
+
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Node;
+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.client.GWTTestCase;
@@ -29,6 +34,7 @@ import com.google.gwt.query.client.css.CSS;
 import com.google.gwt.query.client.css.RGBColor;
 import com.google.gwt.query.client.impl.SelectorEngineImpl;
 import com.google.gwt.query.client.impl.SelectorEngineSizzle;
+import com.google.gwt.query.client.js.JsNamedArray;
 import com.google.gwt.query.client.js.JsNodeArray;
 import com.google.gwt.query.client.js.JsUtils;
 import com.google.gwt.user.client.DOM;
@@ -39,11 +45,6 @@ import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.TextArea;
 
-import junit.framework.Assert;
-
-import java.util.List;
-import java.util.Map;
-
 /**
  * Test class for testing gwtquery-core api.
  */
@@ -1204,24 +1205,24 @@ public class GQueryCoreTest extends GWTTestCase {
     String html = "<div id='mainDiv'><div id='subDiv' class='test'><div id='subSubDiv'><p id='mainP'><span id='testSpan' class='test'><input id='firstInput' type='text'></input></span></p></div></div></div>";
     $(e).html(html);
     
-    Map<String, List<Element>> close = $("input", e).closest(new String[]{"p","div", ".test", "#unknown"});
+    JsNamedArray<NodeList<Element>> close = $("input", e).closest(new String[]{"p","div", ".test", "#unknown"});
     
-    assertEquals(3, close.size());
+    assertEquals(3, close.length());
     
     assertNotNull(close.get("p"));
-    assertEquals(1,close.get("p").size());
-    assertEquals("mainP", close.get("p").get(0).getId());
+    assertEquals(1,close.get("p").getLength());
+    assertEquals("mainP", close.get("p").getItem(0).getId());
     
     assertNotNull(close.get("div"));
-    assertEquals(3,close.get("div").size());
-    assertEquals("subSubDiv", close.get("div").get(0).getId());
-    assertEquals("subDiv", close.get("div").get(1).getId());
-    assertEquals("mainDiv", close.get("div").get(2).getId());
+    assertEquals(3,close.get("div").getLength());
+    assertEquals("subSubDiv", close.get("div").getItem(0).getId());
+    assertEquals("subDiv", close.get("div").getItem(1).getId());
+    assertEquals("mainDiv", close.get("div").getItem(2).getId());
     
     assertNotNull(close.get(".test"));
-    assertEquals(2,close.get(".test").size());
-    assertEquals("testSpan", close.get(".test").get(0).getId());
-    assertEquals("subDiv", close.get(".test").get(1).getId());
+    assertEquals(2,close.get(".test").getLength());
+    assertEquals("testSpan", close.get(".test").getItem(0).getId());
+    assertEquals("subDiv", close.get(".test").getItem(1).getId());
     
     assertNull(close.get("#unknown"));