import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.List;\r
+import java.util.Map;\r
\r
import com.google.gwt.core.client.GWT;\r
import com.google.gwt.core.client.JavaScriptObject;\r
import com.google.gwt.query.client.css.TakesCssValue;\r
import com.google.gwt.query.client.css.TakesCssValue.CssSetter;\r
import com.google.gwt.query.client.impl.DocumentStyleImpl;\r
+import com.google.gwt.query.client.impl.HasSelector;\r
import com.google.gwt.query.client.impl.SelectorEngine;\r
+import com.google.gwt.query.client.impl.SelectorEngineCssToXPath;\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
protected static JsCache dataCache = null;\r
\r
private static SelectorEngine engine;\r
+ \r
+ private static HasSelector xpahtEngine;\r
\r
private static final int FUNC_PREPEND = 0, FUNC_APPEND = 1, FUNC_AFTER = 2,\r
FUNC_BEFORE = 3;\r
* element containing those elements.\r
*/\r
public static GQuery $(String selectorOrHtml) {\r
- if (selectorOrHtml == null || selectorOrHtml.trim().length() == 0) {\r
- return $();\r
- }\r
- if (selectorOrHtml.trim().charAt(0) == '<') {\r
- return innerHtml(selectorOrHtml);\r
- }\r
return $(selectorOrHtml, document);\r
}\r
\r
* created.\r
*/\r
public static GQuery $(String selectorOrHtml, Node ctx) {\r
- if (selectorOrHtml == null || selectorOrHtml.trim().length() == 0) {\r
+ String selector = null;\r
+ if (selectorOrHtml == null || (selector = selectorOrHtml.trim()).length() == 0) {\r
return $();\r
}\r
- if (selectorOrHtml.trim().charAt(0) == '<') {\r
- return $(cleanHtmlString(selectorOrHtml, getOwnerDocument(ctx)));\r
+ if (selector.startsWith("<")) {\r
+ return innerHtml(selectorOrHtml, getOwnerDocument(ctx));\r
}\r
return new GQuery().select(selectorOrHtml, ctx);\r
}\r
return e.getClassName().matches("(^|.*\\s)" + clz + "(\\s.*|$)");\r
}\r
\r
- private static GQuery innerHtml(String html) {\r
- return $(cleanHtmlString(html, document));\r
+ private static GQuery innerHtml(String html, Document doc) {\r
+ return $(cleanHtmlString(html, doc));\r
}\r
\r
private static native String[] jsArrayToString0(JsArrayString array) /*-{\r
if (engine == null) {\r
engine = new SelectorEngine();\r
}\r
- NodeList<Element> n = engine.select(selector, context);\r
+ HasSelector impl = engine;\r
+ if (selector.startsWith("./") || selector.startsWith("/")) {\r
+ if (xpahtEngine == null) {\r
+ impl = xpahtEngine = engine.impl instanceof SelectorEngineCssToXPath ? \r
+ engine.impl : new SelectorEngineCssToXPath();\r
+ }\r
+ }\r
+ NodeList<Element> n = impl.select(selector, context);\r
JsNodeArray res = copyNodeList(n);\r
\r
currentSelector = selector;\r
currentContext = context != null ? context : document;\r
\r
return setArray(res);\r
-\r
}\r
\r
private static native Element window() /*-{\r
import static com.google.gwt.query.client.GQuery.document;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.query.client.css.CSS;
import com.google.gwt.query.client.css.RGBColor;
+import com.google.gwt.query.client.impl.SelectorEngineCssToXPath;
import com.google.gwt.query.client.impl.SelectorEngineImpl;
import com.google.gwt.query.client.impl.SelectorEngineSizzle;
import com.google.gwt.query.client.js.JsNamedArray;
label.removeFromParent();
}
+
+ public void testXpathSelector() {
+ $(e).html("<table border=1 id=idtest width=440><tr><td width=50%>A Text</td><td width=50%>B</td></tr></table>");
+ SelectorEngineCssToXPath s = new SelectorEngineCssToXPath();
+ for (String selector : Arrays.asList("td[width]", "table > td", "*[width!=440]")) {
+ String xselector = s.css2Xpath(selector);
+ assertEquals($(selector).toString(), $(xselector).toString());
+ }
+ }
}