package io.conducive.client.ui.widgets;
import com.google.common.base.Function;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Widget;
import io.conducive.client.ui.widgets.gwt.TextEdit;
import io.conducive.client.ui.widgets.gwt.TextInput;
import io.conducive.client.ui.widgets.html.*;
/**
* Utility class which allows shorthand construction of UIs, for the UIBinder averse.
* @author Reuben Firmin
*/
public class HTML {
/**
* Declare no class (rather than including ugly nulls in signatures)
* @return
*/
public static String noclass = null;
public static Div div() {
return new Div();
}
public static Span span() {
return new Span();
}
public static UnorderedList ul() {
return new UnorderedList();
}
public static OrderedList ol() {
return new OrderedList();
}
public static ListItem li() {
return new ListItem();
}
public static Heading h1() {
return new Heading(Heading.Level.ONE);
}
public static Heading h2() {
return new Heading(Heading.Level.TWO);
}
public static Heading h3() {
return new Heading(Heading.Level.THREE);
}
public static Heading h4() {
return new Heading(Heading.Level.FOUR);
}
public static Heading h5() {
return new Heading(Heading.Level.FIVE);
}
public static Heading h6() {
return new Heading(Heading.Level.SIX);
}
public static Section section() {
return new Section();
}
public static Paragraph p() {
return new Paragraph();
}
// TODO move href to last param
public static Anchor a(String text, String href, String clazz) {
return a(text, null, clazz, href, null);
}
public static Anchor a(String text, String id, String clazz, String href, String target) {
Anchor a = new Anchor(text, href);
if (id != null) {
a.getElement().setId(id);
}
if (clazz != null) {
a.addStyleName(clazz);
}
if (target != null) {
a.setTarget(target);
}
return a;
}
public static Anchor a(String text, String clazz, ClickHandler... handlers) {
Anchor a = new Anchor(text);
if (clazz != null) {
a.addStyleName(clazz);
}
for (ClickHandler handler : handlers) {
a.addClickHandler(handler);
}
return a;
}
public static TextInput textInput(String id, String clazz) {
return new TextInput(id, clazz);
}
public static TextEdit textEdit(String id, String clazz) {
return new TextEdit(id, clazz);
}
public static Spinner spinner() {
return new Spinner();
}
public static HorizontalRule hr(String id, String clazz) {
return new HorizontalRule(id, clazz);
}
/**
* Apply transformation to a set of widgets
* @param transform
* @param widgets
* @return
*/
public static Widget[] x(Function<Widget, Widget> transform, Widget... widgets) {
Widget[] out = new Widget[widgets.length];
for (int i=0; i<widgets.length; i++) {
out[i] = transform.apply(widgets[i]);
}
return out;
}
}