aboutsummaryrefslogtreecommitdiffstats
path: root/jsquery/src
diff options
context:
space:
mode:
authorManolo Carrasco <manolo@apache.org>2012-03-14 16:52:10 +0000
committerManolo Carrasco <manolo@apache.org>2012-03-14 16:52:10 +0000
commit5db327df2c7312a6872e7b0bc63ba1b4a66cffec (patch)
tree33979b888550c2e39be5fe6e5d470b9d04c9d988 /jsquery/src
parent7822e013f689e39acbe6f37f05f3ced842af209d (diff)
downloadgwtquery-5db327df2c7312a6872e7b0bc63ba1b4a66cffec.tar.gz
gwtquery-5db327df2c7312a6872e7b0bc63ba1b4a66cffec.zip
jsquery re-factoring
Diffstat (limited to 'jsquery/src')
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/JsQuery.gwt.xml5
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/JsQueryXs.gwt.xml3
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/client/JsMenu.java6
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/client/JsQuery.java25
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/client/OverlayGQuery.java (renamed from jsquery/src/main/java/gwtquery/jsquery/client/JQ.java)278
-rw-r--r--jsquery/src/main/java/gwtquery/jsquery/client/utils/JsQAux.java129
6 files changed, 250 insertions, 196 deletions
diff --git a/jsquery/src/main/java/gwtquery/jsquery/JsQuery.gwt.xml b/jsquery/src/main/java/gwtquery/jsquery/JsQuery.gwt.xml
index 2dc6ab94..ace3971e 100644
--- a/jsquery/src/main/java/gwtquery/jsquery/JsQuery.gwt.xml
+++ b/jsquery/src/main/java/gwtquery/jsquery/JsQuery.gwt.xml
@@ -5,7 +5,8 @@
<set-property name="export" value="yes" />
<entry-point class="gwtquery.jsquery.client.JsQuery" />
-
- <add-linker name="xsiframe"/>
+
+ <!-- cross-site -->
+ <add-linker name="xsiframe"/>
</module>
diff --git a/jsquery/src/main/java/gwtquery/jsquery/JsQueryXs.gwt.xml b/jsquery/src/main/java/gwtquery/jsquery/JsQueryXs.gwt.xml
index 5cb9179f..80ce12a6 100644
--- a/jsquery/src/main/java/gwtquery/jsquery/JsQueryXs.gwt.xml
+++ b/jsquery/src/main/java/gwtquery/jsquery/JsQueryXs.gwt.xml
@@ -26,9 +26,6 @@
]]>
</property-provider>
- <!-- Cross Site -->
- <add-linker name="xslinker"/>
-
<!-- Minimize JS -->
<set-property name="compiler.stackMode" value="strip"/>
</module>
diff --git a/jsquery/src/main/java/gwtquery/jsquery/client/JsMenu.java b/jsquery/src/main/java/gwtquery/jsquery/client/JsMenu.java
index 6c30de6a..9c1cf373 100644
--- a/jsquery/src/main/java/gwtquery/jsquery/client/JsMenu.java
+++ b/jsquery/src/main/java/gwtquery/jsquery/client/JsMenu.java
@@ -2,15 +2,11 @@ package gwtquery.jsquery.client;
public abstract class JsMenu {
- static void log(Object l) {
- System.out.println(l);
- }
-
public static native void loadPlugin() /*-{
(function($)
{
- var l = @gwtquery.jsquery.client.JsMenu::log(Ljava/lang/Object;);
+ var l = @gwtquery.jsquery.client.utils.JsQAux::log(Ljava/lang/Object;);
var window = $wnd;
var document = $doc;
diff --git a/jsquery/src/main/java/gwtquery/jsquery/client/JsQuery.java b/jsquery/src/main/java/gwtquery/jsquery/client/JsQuery.java
index 98b9cca3..bf9559ee 100644
--- a/jsquery/src/main/java/gwtquery/jsquery/client/JsQuery.java
+++ b/jsquery/src/main/java/gwtquery/jsquery/client/JsQuery.java
@@ -1,10 +1,5 @@
package gwtquery.jsquery.client;
-import gwtquery.jsquery.client.JQ.Dollar;
-import gwtquery.jsquery.client.JQ.JEasing;
-import gwtquery.jsquery.client.JQ.JFunction;
-import gwtquery.jsquery.client.JQ.JPredicate;
-
import java.util.logging.Logger;
import com.google.gwt.core.client.EntryPoint;
@@ -24,15 +19,23 @@ public class JsQuery implements EntryPoint {
}
});
- GWT.create(JFunction.class);
- GWT.create(JPredicate.class);
- GWT.create(JEasing.class);
- GWT.create(JQ.class);
- GWT.create(Dollar.class);
- JsMenu.loadPlugin();
+ OverlayGQuery.export();
+
onJsQueryLoad();
+
+ testJs();
}
+ private native static void testJs() /*-{
+ var l = @gwtquery.jsquery.client.utils.JsQAux::log(Ljava/lang/Object;);
+ $ = $wnd.$;
+ l($.each);
+ $.each(["a","b"], function(a, b){
+ l("kk " + " " + a + " " + b);
+ }
+ );
+ }-*/;
+
private native static void onJsQueryLoad() /*-{
$wnd.onJsQueryLoad && $wnd.onJsQueryLoad();
$wnd.JsQuery && $wnd.JsQuery.onLoad && $wnd.JsQuery.onLoad();
diff --git a/jsquery/src/main/java/gwtquery/jsquery/client/JQ.java b/jsquery/src/main/java/gwtquery/jsquery/client/OverlayGQuery.java
index f34b223e..20b7139b 100644
--- a/jsquery/src/main/java/gwtquery/jsquery/client/JQ.java
+++ b/jsquery/src/main/java/gwtquery/jsquery/client/OverlayGQuery.java
@@ -1,6 +1,6 @@
package gwtquery.jsquery.client;
-import static com.google.gwt.user.client.Window.alert;
+import gwtquery.jsquery.client.utils.JsQAux;
import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.ExportAfterCreateMethod;
@@ -9,11 +9,12 @@ import org.timepedia.exporter.client.ExportInstanceMethod;
import org.timepedia.exporter.client.ExportJsInitMethod;
import org.timepedia.exporter.client.ExportOverlay;
import org.timepedia.exporter.client.ExportPackage;
-import org.timepedia.exporter.client.Exportable;
+import org.timepedia.exporter.client.ExportStaticMethod;
import org.timepedia.exporter.client.ExporterUtil;
+import org.timepedia.exporter.client.NoExport;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArray;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
@@ -22,26 +23,37 @@ import com.google.gwt.query.client.GQuery;
import com.google.gwt.query.client.GQuery.Offset;
import com.google.gwt.query.client.Predicate;
import com.google.gwt.query.client.Properties;
-import com.google.gwt.query.client.js.JsCache;
-import com.google.gwt.query.client.js.JsNodeArray;
-import com.google.gwt.query.client.js.JsUtils;
import com.google.gwt.query.client.plugins.Effects;
import com.google.gwt.query.client.plugins.effects.PropertiesAnimation;
-import com.google.gwt.query.client.plugins.effects.PropertiesAnimation.Easing;
import com.google.gwt.user.client.Event;
-
+/**
+ * Class used to expose GQuery methods and object to Javascript using
+ * gwt-exporter annotations.
+ *
+ * We prefer to overlay the original GQuery object instead of adding
+ * the gwt-exporter dependency to the project.
+ *
+ * Because of the differences between java and js apis, we need to
+ * override some methods in order to deal with complex cases.
+ *
+ */
@ExportPackage("jsQuery")
@Export(value="fn", all=false)
-public class JQ implements ExportOverlay<GQuery> {
+public class OverlayGQuery implements ExportOverlay<GQuery> {
+
+ @NoExport
+ public static void export() {
+ GWT.create(OverlayFunction.class);
+ GWT.create(OverlayPredicate.class);
+ GWT.create(OverlayGQuery.class);
+ }
@ExportPackage("jsQuery")
@Export("jFunction")
@ExportClosure()
- public interface JFunction extends ExportOverlay<Function> {
+ protected interface OverlayFunction extends ExportOverlay<Function> {
public void f();
-// Element and Event are JavascriptObjects so we export one.
-// public void f(Element e);
public boolean f(Event e);
public Object f(Element e, int i);
}
@@ -49,130 +61,87 @@ public class JQ implements ExportOverlay<GQuery> {
@ExportPackage("jsQuery")
@Export("jPredicate")
@ExportClosure()
- public interface JPredicate extends ExportOverlay<Predicate> {
+ protected interface OverlayPredicate extends ExportOverlay<Predicate> {
public boolean f(Element e, int i);
}
- @ExportPackage("jsQuery")
- @Export("jEasing")
- @ExportClosure()
- public interface JEasing extends ExportOverlay<Easing> {
- public double interpolate(double progress);
+ private OverlayGQuery(){}
+
+ /**
+ * In js a GQuery object represents a Nodelist.
+ * gwt-exporter will use the object returned by get() to wrap
+ * the GQuery object
+ */
+ @ExportJsInitMethod
+ public NodeList<Element> get() {return null;}
+
+ /**
+ * Customized JS code to execute after GQuery has been exported.
+ */
+ @ExportAfterCreateMethod
+ public static native void afterCreate() /*-{
+ }-*/;
+
+ @ExportStaticMethod("$wnd.$")
+ public static GQuery $(Object o) {
+ return JsQAux.dollar(o);
+ }
+
+ @ExportStaticMethod("$wnd.$")
+ public static GQuery $(String s, Element ctx) {
+ return GQuery.$(s, ctx);
}
- @ExportPackage("")
- @Export("jsQuery")
- // Used to export $ method
- public static class Dollar implements Exportable {
- // jQuery.fn.init.prototype = jQuery.fn
- native static String dumpObject(JavaScriptObject o) /*-{
- var s = "" ; for (k in o) s += " " + k; return s;
- }-*/;
-
- private static native boolean isFunction(Object o) /*-{
- return typeof(o) == 'function';
- }-*/;
-
- private static native void runFunction(Object f) /*-{
- f();
- }-*/;
+ @ExportStaticMethod("$wnd.$.extend")
+ public static JavaScriptObject extend(Object...objs) {
+ return JsQAux.extend(objs);
+ }
+
+ @ExportStaticMethod("$wnd.$.each")
+ public static Object[] each(Object[] objs, Function f) {
+ return JsQAux.each(objs, f);
+ }
+
+ @ExportInstanceMethod
+ public static GQuery ready(GQuery g, Function f) {
+ f.fe();
+ return g;
+ }
- @Export("$wnd.$")
- public static GQuery staticDollar(Object o) {
- if (o instanceof String) {
- return GQuery.$((String)o);
- } else if (isFunction(o)) {
- runFunction(o);
- } else if (o instanceof JavaScriptObject) {
- JavaScriptObject jso = (JavaScriptObject)o;
- GQuery r = GQuery.$(jso);
- if (JsUtils.isArray(jso)) {
- JsCache c = jso.cast();
- JsNodeArray elms = JsNodeArray.create();
- for (int i = 0 ; i < c.length(); i++) {
- elms.addNode(c.getJavaScriptObject(i).<Node>cast());
- }
- r = GQuery.$(elms);
-// System.out.println(c.length() + " " + elms.getLength() + " " + r.length());
- }
-
- return r;
- } else {
- System.out.println("Bad!!!! " + o);
- }
- return GQuery.$();
- }
-
- @Export("$wnd.$")
- public static GQuery staticDollar(String s, Element ctx) {
- return GQuery.$(s, ctx);
- }
-
-
- @Export("$wnd.$.ready")
- public static void ready(Function f) {
- alert("ready");
- }
-
- @Export("$wnd.$.inArray")
- public static int inArray(Object o, Object a) {
- if (o instanceof JavaScriptObject && JsUtils.isElement((JavaScriptObject)o)) {
- return staticDollar(a).index((Element)o);
- } else if (a instanceof JavaScriptObject && JsUtils.isArray((JavaScriptObject)a)) {
- return ((JsCache)a).indexOf(o);
- }
- return -1;
+ @ExportInstanceMethod
+ // TODO: normally plugins adds new easing functions to jquery.easing array
+ public static GQuery animate(GQuery g, Object stringOrProperties, int duration, String easing, Function... funcs) {
+ return g.animate(stringOrProperties, duration,
+ "linear".equalsIgnoreCase(easing)
+ ? PropertiesAnimation.Easing.LINEAR
+ : PropertiesAnimation.Easing.SWING, funcs);
+ }
+
+ @ExportInstanceMethod
+ public static Object css(GQuery g, Object o) {
+ if (o instanceof String) {
+ return g.css((String)o, false);
+ } else {
+ return ExporterUtil.wrap(g.css((Properties)o));
}
+ }
- @Export("$wnd.$.extend")
- public static JavaScriptObject extend(Object...objs) {
- int i = 0, l = objs.length;
- boolean deep = false;
- JavaScriptObject ctx = null;
- Object target = objs[i];
- if (target instanceof Boolean) {
- deep = (Boolean) target;
- if (l == 1) return ctx;
- target = objs[i++];
- }
- if (l - i == 1) {
- i--;
- } else {
- ctx = (JavaScriptObject)target;
- }
-
- for (++i; i < l; i++) {
- if (objs[i] != null) {
- ctx = extendImpl(deep, ctx, objs[i]);
- }
- }
- return ctx;
- }
-
- private static native JavaScriptObject getDefaultPrototype() /*-{
- return $wnd.jsQuery && $wnd.jsQuery.fn ? $wnd.jsQuery.fn.prototype : null;
- }-*/;
-
- private static native JavaScriptObject extendImpl(boolean deep, JavaScriptObject ctx, Object s) /*-{
- var d = ctx ? ctx : $wnd.jsQuery.fn.prototype || {};
- for (k in s) {
- d[k] = s[k];
- if (!ctx) $wnd.$[k] = s[k];
- }
- return d;
- }-*/;
-
- @ExportAfterCreateMethod
- public static native void afterCreate() /*-{
- }-*/;
+ @ExportInstanceMethod
+ public static GQuery css(GQuery g, String k, Object v) {
+ return g.css(k, String.valueOf(v));
+ }
+
+ @ExportInstanceMethod
+ public static JavaScriptObject offset(GQuery instance) {
+ Offset o = instance.offset();
+ return Properties.create("left: " + o.left + ", top:" + o.top);
+ }
+
+ @ExportInstanceMethod
+ public static GQuery unbind(GQuery g, String s, Function o) {
+ return g.unbind(s);
}
- // We have to stub all the method we want to export here.
- private JQ(){}
-
- @ExportJsInitMethod
- public NodeList<Element> get() {return null;}
-
public String toString() {return null;}
public GQuery add(GQuery previousObject) {return null;}
public GQuery add(String selector) {return null;}
@@ -182,18 +151,14 @@ public class JQ implements ExportOverlay<GQuery> {
public GQuery after(String html) {return null;}
public GQuery andSelf() {return null;}
- @ExportInstanceMethod
- public static GQuery animate(GQuery g, Object stringOrProperties, int duration, String easing, Function... funcs) {
- return g.animate(stringOrProperties, duration, "linear".equalsIgnoreCase(easing)? PropertiesAnimation.Easing.LINEAR : PropertiesAnimation.Easing.SWING, funcs);
- }
-// public GQuery animate(Object stringOrProperties, int duration, Easing easing, Function... funcs) {return null;}
+// public GQuery animate(Object stringOrProperties, int duration, Easing easing, Function... funcs) {return null;}
public GQuery animate(Object stringOrProperties, Function... funcs) {return null;}
public GQuery animate(Object stringOrProperties, int duration, Function... funcs) {return null;}
-//public GQuery attr(Properties properties) {return null;}
-public String attr(String name) {return null;}
-//public GQuery attr(String key, Function closure) {return null;}
-public GQuery attr(String key, Object value) {return null;}
-public int size() {return 0;}
+// public GQuery attr(Properties properties) {return null;}
+ public String attr(String name) {return null;}
+// public GQuery attr(String key, Function closure) {return null;}
+ public GQuery attr(String key, Object value) {return null;}
+ public int size() {return 0;}
public GQuery append(GQuery query) {return null;}
public GQuery append(Node n) {return null;}
@@ -206,8 +171,8 @@ public int size() {return 0;}
public GQuery before(GQuery query) {return null;}
public GQuery before(Node n) {return null;}
public GQuery before(String html) {return null;}
-// public GQuery bind(int eventbits, Object data, Function... funcs) {return null;}
-// public GQuery bind(String eventType, Object data, Function... funcs) {return null;}
+// public GQuery bind(int eventbits, Object data, Function... funcs) {return null;}
+// public GQuery bind(String eventType, Object data, Function... funcs) {return null;}
@ExportInstanceMethod
public static GQuery bind(GQuery g, String events, Function func) {
return g.bind(events, null, func);
@@ -226,18 +191,6 @@ public int size() {return 0;}
public GQuery closest(String selector, Node context) {return null;}
public GQuery contains(String text) {return null;}
public GQuery contents() {return null;}
- @ExportInstanceMethod
- public static Object css(GQuery g, Object o) {
- if (o instanceof String) {
- return g.css((String)o, false);
- } else {
- return ExporterUtil.wrap(g.css((Properties)o));
- }
- }
- @ExportInstanceMethod
- public static GQuery css(GQuery g, String k, Object v) {
- return g.css(k, String.valueOf(v));
- }
// public GQuery css(Properties properties) {return null;}
// public String css(String name) {return null;}
// public String css(String name, boolean force) {return null;}
@@ -317,7 +270,6 @@ public int size() {return 0;}
// public GQuery live(int eventbits, Object data, Function... funcs) {return null;}
public GQuery live(String eventName, Object data, Function... funcs) {return null;}
// public GQuery load(Function f) {return null;}
-
public GQuery lt(int pos) {return null;}
// public <W> List<W> map(Function f) {return null;}
public GQuery mousedown(Function... f) {return null;}
@@ -332,13 +284,6 @@ public int size() {return 0;}
public GQuery not(Element elem) {return null;}
public GQuery not(GQuery gq) {return null;}
public GQuery not(String... filters) {return null;}
-
- @ExportInstanceMethod
- public static JavaScriptObject offset(GQuery instance) {
- Offset o = instance.offset();
- return Properties.create("left: " + o.left + ", top:" + o.top);
- }
-
public GQuery offsetParent() {return null;}
public GQuery one(int eventbits, Object data, Function f) {return null;}
public int outerHeight() {return 0;}
@@ -418,10 +363,6 @@ public int size() {return 0;}
public String toString(boolean pretty) {return null;}
// public GQuery trigger(int eventbits, int... keys) {return null;}
// public GQuery unbind(int eventbits) {return null;}
- @ExportInstanceMethod
- public static GQuery unbind(GQuery g, String s, Function o) {
- return g.unbind(s);
- }
public GQuery undelegate() {return null;}
public GQuery undelegate(String selector) {return null;}
public GQuery undelegate(String selector, String eventName) {return null;}
@@ -443,17 +384,4 @@ public int size() {return 0;}
public GQuery wrapInner(Element elem) {return null;}
public GQuery wrapInner(GQuery query) {return null;}
public GQuery wrapInner(String html) {return null;}
-
- @ExportInstanceMethod
- public static GQuery ready(GQuery g, Function f) {
- f.fe();
- return g;
- }
-
- @ExportInstanceMethod
- public static String imprime(GQuery g, Function f) {
- System.out.println("Imprime " + g.size() + " " + g.toString(true));
- return g.toString();
- }
-
}
diff --git a/jsquery/src/main/java/gwtquery/jsquery/client/utils/JsQAux.java b/jsquery/src/main/java/gwtquery/jsquery/client/utils/JsQAux.java
new file mode 100644
index 00000000..72cc100c
--- /dev/null
+++ b/jsquery/src/main/java/gwtquery/jsquery/client/utils/JsQAux.java
@@ -0,0 +1,129 @@
+package gwtquery.jsquery.client.utils;
+
+import java.util.ArrayList;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Node;
+import com.google.gwt.query.client.Function;
+import com.google.gwt.query.client.GQuery;
+import com.google.gwt.query.client.js.JsCache;
+import com.google.gwt.query.client.js.JsNodeArray;
+import com.google.gwt.query.client.js.JsUtils;
+
+public abstract class JsQAux {
+
+ private native static String dumpObject(JavaScriptObject o) /*-{
+ var s = "";
+ for (k in o)
+ s += " " + k;
+ return s;
+ }-*/;
+
+ private static native void runJsFunction(JavaScriptObject f) /*-{
+ f();
+ }-*/;
+
+ public static GQuery dollar(Object o) {
+ if (o instanceof String) {
+ return GQuery.$((String) o);
+ } else if (o instanceof JavaScriptObject) {
+ JavaScriptObject jso = (JavaScriptObject) o;
+ if (JsUtils.isFunction(jso)) {
+ runJsFunction(jso);
+ } else {
+ GQuery r = GQuery.$(jso);
+ if (JsUtils.isArray(jso)) {
+ JsCache c = jso.cast();
+ JsNodeArray elms = JsNodeArray.create();
+ for (int i = 0; i < c.length(); i++) {
+ Object obj = c.get(i);
+ if (obj instanceof Node) {
+ elms.addNode((Node) obj);
+ }
+ }
+ r = GQuery.$(elms);
+ }
+ return r;
+ }
+ }
+ return GQuery.$();
+ }
+
+ public static GQuery dollar(String s, Element ctx) {
+ return GQuery.$(s, ctx);
+ }
+
+ public static void ready(Function f) {
+ f.f();
+ }
+
+ public static int inArray(Object o, Object a) {
+ if (o instanceof JavaScriptObject) {
+ JavaScriptObject jso = (JavaScriptObject) o;
+ if (JsUtils.isElement(jso)) {
+ return dollar(a).index((Element) o);
+ } else if (JsUtils.isArray(jso)) {
+ return ((JsCache) a).indexOf(o);
+ }
+ }
+ return -1;
+ }
+
+ public static JavaScriptObject extend(Object... objs) {
+ int i = 0, l = objs.length;
+ boolean deep = false;
+ JavaScriptObject ctx = null;
+ Object target = objs[i];
+ if (target instanceof Boolean) {
+ deep = (Boolean) target;
+ if (l == 1)
+ return ctx;
+ target = objs[i++];
+ }
+ if (l - i == 1) {
+ i--;
+ } else {
+ ctx = (JavaScriptObject) target;
+ }
+
+ for (++i; i < l; i++) {
+ if (objs[i] != null) {
+ ctx = extendImpl(deep, ctx, objs[i]);
+ }
+ }
+ return ctx;
+ }
+
+ private static native JavaScriptObject getDefaultPrototype() /*-{
+ return $wnd.jsQuery && $wnd.jsQuery.fn ? $wnd.jsQuery.fn.prototype
+ : null;
+ }-*/;
+
+ private static native JavaScriptObject extendImpl(boolean deep,
+ JavaScriptObject ctx, Object s) /*-{
+ var d = ctx ? ctx : $wnd.jsQuery.fn.prototype || {};
+ for (k in s) {
+ d[k] = s[k];
+ if (!ctx)
+ $wnd.$[k] = s[k];
+ }
+ return d;
+ }-*/;
+
+ public static Object[] each(Object[] objs, Function f) {
+ ArrayList<Object> ret = new ArrayList<Object>();
+ for (Object o : objs) {
+ f.setDataObject(o);
+ if (f.fe(null, o)) {
+ ret.add(o);
+ }
+ }
+ return ret.toArray(new Object[0]);
+ }
+
+ public static void log(Object l) {
+ System.out.println(l);
+ }
+
+}