\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
import com.google.gwt.core.client.JsArrayString;\r
-import com.google.gwt.dom.client.BodyElement;\r
import com.google.gwt.dom.client.ButtonElement;\r
import com.google.gwt.dom.client.Document;\r
import com.google.gwt.dom.client.Element;\r
import com.google.gwt.query.client.css.TakesLength;\r
import com.google.gwt.query.client.css.TakesPercentage;\r
import com.google.gwt.query.client.impl.DocumentStyleImpl;\r
+import com.google.gwt.query.client.impl.SelectorEngineImpl;\r
import com.google.gwt.user.client.DOM;\r
import com.google.gwt.user.client.Event;\r
import com.google.gwt.user.client.Window;\r
}-*/;\r
}\r
\r
- private static final class FastSet extends JavaScriptObject {\r
-\r
- public static FastSet create() {\r
- return JavaScriptObject.createObject().cast();\r
- }\r
-\r
- protected FastSet() {\r
- }\r
-\r
- public void add(Object o) {\r
- add0(o.hashCode());\r
- }\r
-\r
- public boolean contains(Object o) {\r
- return contains0(o.hashCode());\r
- }\r
-\r
- public void remove(Object o) {\r
- remove0(o.hashCode());\r
- }\r
-\r
- private native void add0(int hc) /*-{\r
- this[hc]=true;\r
- }-*/;\r
-\r
- private native boolean contains0(int hc) /*-{\r
- return this[hc] || false;\r
- }-*/;\r
-\r
- private native void remove0(int hc) /*-{\r
- delete this[hc];\r
- }-*/;\r
- }\r
-\r
- private static final class Queue<T> extends JavaScriptObject {\r
+ public static final class Queue<T> extends JavaScriptObject {\r
\r
public static Queue newInstance() {\r
return createArray().cast();\r
* only works on arrays of DOM elements, not strings or numbers.\r
*/\r
public JSArray unique(JSArray result) {\r
- FastSet f = FastSet.create();\r
- JSArray ret = JSArray.create();\r
- for (int i = 0; i < result.getLength(); i++) {\r
- Element e = result.getElement(i);\r
- if (!f.contains(e)) {\r
- f.add(e);\r
- ret.addNode(e);\r
- }\r
- }\r
- return ret;\r
+ return SelectorEngineImpl.unique(result.<JsArray<Element>>cast()).cast();\r
}\r
\r
/**\r
return n.getChildNodes().cast();\r
}\r
\r
- private <S> Object data(Element item, String name, S value) {\r
+ protected <S> Object data(Element item, String name, S value) {\r
if (dataCache == null) {\r
windowData = JavaScriptObject.createObject().cast();\r
dataCache = JavaScriptObject.createObject().cast();\r
*/\r
package com.google.gwt.query.client.impl;\r
\r
+import java.util.HashSet;\r
+\r
+import com.google.gwt.core.client.JavaScriptObject;\r
+import com.google.gwt.core.client.JsArray;\r
import com.google.gwt.dom.client.Element;\r
import com.google.gwt.dom.client.Node;\r
import com.google.gwt.dom.client.NodeList;\r
* @return a list of matched nodes\r
*/\r
public abstract NodeList<Element> select(String selector, Node ctx);\r
+\r
+ public static JsArray<Element> unique(JsArray<Element> a) {\r
+ JsArray<Element> ret = JavaScriptObject.createArray().cast();\r
+ HashSet<Integer> f = new HashSet<Integer>();\r
+ for (int i = 0; i < a.length(); i++) {\r
+ Element e = a.get(i);\r
+ if (!f.contains(e.hashCode())) {\r
+ f.add(e.hashCode());\r
+ ret.push(e);\r
+ }\r
+ } \r
+ return ret;\r
+ }\r
}\r
*/
package com.google.gwt.query.client.impl;
-import java.util.HashSet;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
return @com.google.gwt.query.client.impl.SelectorEngineSizzle::filter(Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;ZLjava/lang/Object;)( later, tmpSet, false );
}-*/;
- public static JsArray<Element> unique(JsArray<Element> a) {
- JsArray<Element> ret = JavaScriptObject.createArray().cast();
- HashSet<Integer> f = new HashSet<Integer>();
- for (int i = 0; i < a.length(); i++) {
- Element e = a.get(i);
- if (!f.contains(e.hashCode())) {
- f.add(e.hashCode());
- ret.push(e);
- }
- }
- return ret;
- }
-
private static native JsArray<Element> select(String selector, Node context, JsArray<Element> results, JsArray<Element> seed) /*-{
results = results || [];
var origContext = context = context || document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.query.client.impl.SelectorEngineImpl;
+import com.google.gwt.query.client.impl.SelectorEngineSizzle;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
assertEquals(2, $("p", e).slice(0, -1).size());
assertEquals(0, $("p", e).slice(3, 2).size());
}
+
+ public void testUnique() {
+ SelectorEngineImpl selSizz = new SelectorEngineSizzle();
+ GQuery g = $(e).html("<div><p></p><p></p><span></span><p></p>");
+ JSArray a;
+ a = selSizz.select("p", e).cast();
+ assertEquals(3, a.getLength());
+ a.addNode(a.getNode(0));
+ a.addNode(a.getNode(3));
+ assertEquals(5 , a.getLength());
+ a = g.unique(a);
+ assertEquals(3, a.getLength());
+ }
+
public void testWrapMethod() {
String content = "<p>Test Paragraph.</p>";
String wrapper = "<div id=\"content\">Content</div>";
import static com.google.gwt.query.client.GQuery.$;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JsArray;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
assertEquals("branchB target", selectors.target().text());
}
+ public void testUnique() {
+ SelectorEngineImpl selSizz = new SelectorEngineSizzle();
+ $(e).html(getTestContent());
+
+ JsArray<Element> a;
+ a = selSizz.select("p", e).cast();
+ int n = a.length();
+ assertTrue(n > 300);
+ for (int i=0; i<n; i++) {
+ a.push(a.get(i));
+ }
+ assertEquals(n * 2 , a.length());
+ a = SelectorEngineImpl.unique(a);
+ assertEquals(n, a.length());
+ }
+
+
private void assertArrayContains(Object result, Object... array) {
assertArrayContains("", result, array);
}