package com.google.gwt.query.jsquery.client;
import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.ExportAfterCreateMethod;
import org.timepedia.exporter.client.ExportClosure;
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.ExportStaticMethod;
import org.timepedia.exporter.client.ExporterUtil;
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.dom.client.NodeList;
import com.google.gwt.query.client.Function;
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.JsUtils;
import com.google.gwt.query.client.plugins.Effects;
import com.google.gwt.query.client.plugins.Events;
import com.google.gwt.query.client.plugins.effects.PropertiesAnimation;
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 abstract class GQueryOverlay implements ExportOverlay<GQuery> {
@ExportPackage("JsQuery")
@Export("jFunction")
@ExportClosure()
public interface FunctionOverlay extends ExportOverlay<Function> {
public void f();
public boolean f(Event e);
public Object f(Element e, int i);
}
@ExportPackage("JsQuery")
@Export("jPredicate")
@ExportClosure()
public interface PredicateOverlay extends ExportOverlay<Predicate> {
public boolean f(Element e, int i);
}
private GQueryOverlay(){}
/**
* In js a GQuery object represents a Nodelist.
* gwt-exporter will use the object returned by get() to wrap
* the GQuery object
*/
@ExportJsInitMethod
public abstract NodeList<Element> get();
/**
* Customized JS code to execute after GQuery has been exported.
*/
@ExportAfterCreateMethod
public static native void afterCreate() /*-{
$ = $wnd.$;
window = $wnd;
document = $doc;
$.fn = $wnd.JsQuery.fn.prototype;
$.fn.extend = $.extend
}-*/;
@ExportStaticMethod("$wnd.$")
public static GQuery $(Object o) {
return GQuery.$(o);
}
@ExportStaticMethod("$wnd.$")
public static GQuery $(String s, Element ctx) {
return GQuery.$(s, ctx);
}
@ExportStaticMethod("$wnd.$.extend")
public static JavaScriptObject extend(Object...objs) {
return JsQueryUtils.extend(objs);
}
@ExportStaticMethod("$wnd.$.expr")
// TODO: it is just a dummy implementation, fix it
public static JavaScriptObject expr(Object...objs) {
return JsCache.createObject();
}
@ExportStaticMethod("$wnd.$.each")
public static JavaScriptObject[] each(JavaScriptObject[] objs, Function f) {
return JsQueryUtils.each(objs, f);
}
@ExportStaticMethod("$wnd.$.inArray")
public static int inArray(Object o, Object arr) {
return JsQueryUtils.inArray(o, arr);
}
@ExportStaticMethod("$wnd.$.isArray")
public static boolean isArray(JavaScriptObject o) {
return JsUtils.isArray(o);
}
@ExportInstanceMethod
public static GQuery ready(GQuery g, Function f) {
f.fe();
return g;
}
@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));
}
}
@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 offset(GQuery instance, JsCache o) {
return instance.offset(new Offset(o.getInt("left"), o.getInt("top")));
}
@ExportInstanceMethod
public static Element[] toArray(GQuery g) {
return g.elements();
}
@ExportInstanceMethod
public static GQuery trigger(GQuery g, String name, Function f) {
g.as(Events.Events).triggerHtmlEvent(name, f);
return g;
}
@ExportInstanceMethod
public static GQuery unbind(GQuery g, String s, Function o) {
return g.unbind(s);
}
public abstract String toString();
public abstract GQuery add(GQuery previousObject);
public abstract GQuery add(String selector);
public abstract GQuery addClass(String... classes);
public abstract GQuery after(GQuery query);
public abstract GQuery after(Node n);
public abstract GQuery after(String html);
public abstract GQuery andSelf();
// public GQuery animate(Object stringOrProperties, int duration, Easing easing, Function... funcs);
public abstract GQuery animate(Object stringOrProperties, Function... funcs);
public abstract GQuery animate(Object stringOrProperties, int duration, Function... funcs);
// public GQuery attr(Properties properties);
public abstract String attr(String name);
// public GQuery attr(String key, Function closure);
public abstract GQuery attr(String key, Object value);
public abstract int size();
public abstract GQuery append(GQuery query);
public abstract GQuery append(Node n);
public abstract GQuery append(String html);
public abstract GQuery appendTo(GQuery other);
public abstract GQuery appendTo(Node n);
public abstract GQuery appendTo(String html);
// public abstract <T extends GQuery> T as(Class<T> plugin);
public abstract GQuery before(GQuery query);
public abstract GQuery before(Node n);
public abstract GQuery before(String html);
// public GQuery bind(int eventbits, Object data, Function... funcs);
// public GQuery bind(String eventType, Object data, Function... funcs);
@ExportInstanceMethod
public static GQuery bind(GQuery g, String events, Function func) {
return g.bind(events, null, func);
}
public abstract GQuery blur(Function... f);
public abstract GQuery change(Function... f);
public abstract GQuery children();
public abstract GQuery children(String... filters);
public abstract GQuery clearQueue();
public abstract GQuery clone();
public abstract GQuery clearQueue(String queueName);
public abstract GQuery click(Function... f);
public abstract GQuery closest(String selector);
// public abstract JsNamedArray<NodeList<Element>> closest(String[] selectors);
// public abstract JsNamedArray<NodeList<Element>> closest(String[] selectors, Node context);
public abstract GQuery closest(String selector, Node context);
public abstract GQuery contains(String text);
public abstract GQuery contents();
// public abstract GQuery css(Properties properties);
// public abstract String css(String name);
// public abstract String css(String name, boolean force);
public abstract GQuery css(String prop, String val);
public abstract double cur(String prop);
public abstract double cur(String prop, boolean force);
public abstract Object data(String name);
// public abstract <T> T data(String name, Class<T> clz);
public abstract GQuery data(String name, Object value);
public abstract GQuery dblclick(Function... f);
@ExportInstanceMethod
public static GQuery delay(GQuery g, int milliseconds) {
return g.delay(milliseconds);
}
public abstract GQuery delay(int milliseconds, Function... f);
public abstract GQuery delay(int milliseconds, String queueName, Function... f);
public abstract GQuery delegate(String selector, String eventType, Function... handlers);
public abstract GQuery delegate(String selector, String eventType, Object data, Function... handlers);
public abstract GQuery delegate(String selector, int eventbits, Function... handlers);
public abstract GQuery delegate(String selector, int eventbits, Object data, Function... handlers);
public abstract GQuery dequeue();
public abstract GQuery dequeue(String queueName);
public abstract GQuery detach();
public abstract GQuery detach(String filter);
public abstract GQuery die();
public abstract GQuery die(String eventName);
// public abstract GQuery die(int eventbits);
public abstract GQuery each(Function... f);
// public abstract Element[] elements();
public abstract GQuery empty();
// public abstract GQuery end();
public abstract GQuery eq(int pos);
public abstract GQuery error(Function... f);
public abstract GQuery fadeIn(Function... f);
public abstract GQuery fadeIn(int millisecs, Function... f);
public abstract GQuery fadeOut(Function... f);
public abstract GQuery fadeOut(int millisecs, Function... f);
public abstract GQuery fadeTo(double opacity, Function... f);
public abstract GQuery fadeTo(int millisecs, double opacity, Function... f);
public abstract Effects fadeToggle(int millisecs, Function... f);
public abstract GQuery filter(Predicate filterFn);
// public abstract GQuery filter(String... filters);
public abstract GQuery find(String... filters);
public abstract GQuery first();
// TODO: focusIn
// TODO: focusOut
public abstract GQuery focus(Function... f);
public abstract Element get(int i);
public abstract Node getContext();
// public abstract GQuery getPreviousObject();
// public abstract String getSelector();
// public abstract GQuery gt(int pos);
public abstract GQuery has(String selector);
public abstract GQuery has(Element elem);
public abstract boolean hasClass(String... classes);
public abstract int height();
public abstract GQuery height(int height);
public abstract GQuery height(String height);
public abstract GQuery hide();
public abstract GQuery hover(Function fover, Function fout);
public abstract String html();
public abstract GQuery html(String html);
// public abstract String id();
// public abstract GQuery id(String id);
public abstract int index(Element element);
// TODO: init
public abstract int innerHeight();
public abstract int innerWidth();
public abstract GQuery insertAfter(Element elem);
public abstract GQuery insertAfter(GQuery query);
public abstract GQuery insertAfter(String selector);
public abstract GQuery insertBefore(Element item);
public abstract GQuery insertBefore(GQuery query);
public abstract GQuery insertBefore(String selector);
public abstract boolean is(String... filters);
// public abstract boolean isEmpty();
public abstract GQuery keydown(Function... f);
public abstract GQuery keydown(int key);
public abstract GQuery keypress(Function... f);
public abstract GQuery keypress(int key);
public abstract GQuery keyup(Function... f);
public abstract GQuery keyup(int key);
public abstract GQuery last();
// public abstract int left();
// public abstract int length();
public abstract GQuery live(String eventName, Function... funcs);
// public abstract GQuery live(int eventbits, Function... funcs);
// public abstract GQuery live(int eventbits, Object data, Function... funcs);
public abstract GQuery live(String eventName, Object data, Function... funcs);
// TODO: public abstract GQuery load(Function f);
// public abstract GQuery lt(int pos);
// TODO: public abstract <W> List<W> map(Function f);
public abstract GQuery mousedown(Function... f);
public abstract GQuery mouseenter(Function... f);
public abstract GQuery mouseleave(Function... f);
public abstract GQuery mousemove(Function... f);
public abstract GQuery mouseout(Function... f);
public abstract GQuery mouseover(Function... f);
public abstract GQuery mouseup(Function... f);
public abstract GQuery next();
public abstract GQuery next(String... selectors);
public abstract GQuery nextAll();
public abstract GQuery nextUntil(String selector);
public abstract GQuery not(Element elem);
public abstract GQuery not(GQuery gq);
public abstract GQuery not(String... filters);
public abstract GQuery offsetParent();
public abstract GQuery one(int eventbits, Object data, Function f);
public abstract int outerHeight();
public abstract int outerHeight(boolean includeMargin);
public abstract int outerWidth();
public abstract int outerWidth(boolean includeMargin);
public abstract GQuery parent();
public abstract GQuery parent(String... filters);
public abstract GQuery parents();
public abstract GQuery parents(String... filters);
public abstract GQuery parentsUntil(String selector);
public abstract GQuery prepend(GQuery query);
public abstract GQuery prepend(Node n);
public abstract GQuery prepend(String html);
public abstract GQuery prependTo(GQuery other);
public abstract GQuery prependTo(Node n);
public abstract GQuery prependTo(String html);
public abstract GQuery prev();
public abstract GQuery prev(String... selectors);
public abstract GQuery prevAll();
public abstract GQuery prevUntil(String selector);
// TODO: pushStack
public abstract boolean prop(String key);
public abstract GQuery prop(String key, boolean value);
public abstract GQuery prop(String key, Function closure);
public abstract int queue();
public abstract int queue(String queueName);
public abstract GQuery queue(Function... f);
public abstract GQuery queue(String queueName, Function... f);
public abstract GQuery remove();
public abstract GQuery remove(String filter);
public abstract GQuery removeAttr(String key);
public abstract GQuery removeClass(String... classes);
public abstract GQuery removeData(String name);
public abstract GQuery removeProp(String name);
public abstract GQuery replaceAll(Element elem);
public abstract GQuery replaceAll(GQuery target);
public abstract GQuery replaceAll(String selector);
public abstract GQuery replaceWith(Element elem);
public abstract GQuery replaceWith(GQuery target);
public abstract GQuery replaceWith(String html);
public abstract GQuery resize(Function... f);
// public abstract void restoreCssAttrs(String... cssProps);
// public abstract void resize(Function f);
// public abstract void saveCssAttrs(String... cssProps);
public abstract GQuery scroll(Function... f);
// public abstract GQuery scrollIntoView();
// public abstract GQuery scrollIntoView(boolean ensure);
public abstract int scrollLeft();
public abstract GQuery scrollLeft(int left);
// public abstract GQuery scrollTo(int left, int top);
public abstract int scrollTop();
public abstract GQuery scrollTop(int top);
public abstract GQuery select();
// TODO: selector
// TODO: selector
// TODO: serialize
// TODO: serializeArray
// public abstract GQuery setArray(NodeList<Element> list);
// public abstract void setPreviousObject(GQuery previousObject);
// public abstract GQuery setSelector(String selector);
public abstract GQuery show();
public abstract GQuery siblings();
public abstract GQuery siblings(String... selectors);
public abstract GQuery slice(int start, int end);
public abstract Effects slideDown(Function... f);
public abstract Effects slideDown(int millisecs, Function... f);
public abstract Effects slideToggle(int millisecs, Function... f);
public abstract Effects slideUp(Function... f);
public abstract Effects slideUp(int millisecs, Function... f);
public abstract GQuery stop();
public abstract GQuery stop(boolean clearQueue);
public abstract GQuery stop(boolean clearQueue, boolean jumpToEnd);
public abstract GQuery submit(Function... funcs);
public abstract String text();
public abstract GQuery text(String txt);
public abstract GQuery toggle();
public abstract GQuery toggle(Function... fn);
public abstract GQuery toggleClass(String... classes);
public abstract GQuery toggleClass(String clz, boolean addOrRemove);
public abstract String toString(boolean pretty);
// public abstract GQuery unbind(String eventName);
// public abstract GQuery unbind(String eventName, Function f);
public abstract GQuery undelegate();
public abstract GQuery undelegate(String selector);
public abstract GQuery undelegate(String selector, String eventName);
// public abstract GQuery undelegate(String selector, int eventBit);
// public abstract JsNodeArray unique(NodeList<Element> result);
// TODO: unload
public abstract GQuery unwrap();
public abstract String val();
public abstract GQuery val(String... values);
// public abstract String[] vals();
// public abstract boolean isVisible();
public abstract int width();
public abstract GQuery width(int width);
public abstract GQuery wrap(Element elem);
public abstract GQuery wrap(GQuery query);
public abstract GQuery wrap(String html);
public abstract GQuery wrapAll(Element elem);
public abstract GQuery wrapAll(GQuery query);
public abstract GQuery wrapAll(String html);
public abstract GQuery wrapInner(Element elem);
public abstract GQuery wrapInner(GQuery query);
public abstract GQuery wrapInner(String html);
}