
org.rapidoid.widget.BootstrapWidgets Maven / Gradle / Ivy
The newest version!
package org.rapidoid.widget;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.arr.Arr;
import org.rapidoid.beany.Beany;
import org.rapidoid.cls.Cls;
import org.rapidoid.cls.TypeKind;
import org.rapidoid.config.Conf;
import org.rapidoid.ctx.Ctxs;
import org.rapidoid.html.FieldType;
import org.rapidoid.html.FormLayout;
import org.rapidoid.html.HTML;
import org.rapidoid.html.Tag;
import org.rapidoid.html.TagWidget;
import org.rapidoid.html.customtag.ColspanTag;
import org.rapidoid.html.tag.ATag;
import org.rapidoid.html.tag.ButtonTag;
import org.rapidoid.html.tag.FormTag;
import org.rapidoid.html.tag.InputTag;
import org.rapidoid.html.tag.OptionTag;
import org.rapidoid.html.tag.SelectTag;
import org.rapidoid.html.tag.TableTag;
import org.rapidoid.html.tag.TextareaTag;
import org.rapidoid.http.HttpExchange;
import org.rapidoid.lambda.Calc;
import org.rapidoid.model.Item;
import org.rapidoid.model.Items;
import org.rapidoid.model.Models;
import org.rapidoid.model.Property;
import org.rapidoid.plugins.db.DB;
import org.rapidoid.security.DataPermissions;
import org.rapidoid.util.Rnd;
import org.rapidoid.util.U;
import org.rapidoid.util.UTILS;
import org.rapidoid.var.Var;
import org.rapidoid.widget.impl.ArrayContainerVar;
import org.rapidoid.widget.impl.CollectionContainerVar;
import org.rapidoid.widget.impl.EqualityVar;
import org.rapidoid.widget.impl.LocalVar;
import org.rapidoid.widget.impl.MultiLanguageWidget;
import org.rapidoid.widget.impl.SessionVar;
/*
* #%L
* rapidoid-widget
* %%
* Copyright (C) 2014 - 2015 Nikolche Mihajlovski and contributors
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
@Authors("Nikolche Mihajlovski")
@Since("2.0.0")
public abstract class BootstrapWidgets extends HTML {
public static final Tag NOTHING = span(awesome("ban"), " N/A").class_("nothing");
public static final Tag N_A = NOTHING;
public static final ButtonWidget SAVE = cmd("^Save");
public static final ButtonWidget ADD = cmd("^Add");
public static final ButtonWidget UPDATE = cmd("^Update");
public static final ButtonWidget INSERT = cmd("^Insert");
public static final ButtonWidget DELETE = cmd("!Delete");
public static final ButtonWidget YES_DELETE = cmd("!YesDelete").contents("Yes, delete!");
public static final ButtonWidget REMOVE = cmd("!Remove");
public static final ButtonWidget DESTROY = cmd("!Destroy");
public static final ButtonWidget YES = cmd("^Yes");
public static final ButtonWidget NO = cmd("No");
public static final ButtonWidget OK = cmd("^OK");
public static final ButtonWidget CANCEL = navigate("Cancel");
public static final ButtonWidget BACK = navigate("Back");
public static final ButtonWidget EDIT = cmd("^Edit");
public static TableTag table_(Object... contents) {
return table(contents).class_("table table-striped table-hover");
}
public static Tag row(ColspanTag... cols) {
return div((Object[]) cols).class_("row");
}
public static Tag rowSeparated(ColspanTag... cols) {
return row(cols).class_("row row-separated");
}
public static Tag row(Object... contents) {
return row(col12(contents));
}
public static Tag columns(Object left, Object right) {
return row(col6(left), col6(right));
}
public static Tag columns(Object left, Object middle, Object right) {
return row(col4(left), col4(middle), col4(right));
}
public static Tag columns(Object left, Object middleLeft, Object middleRight, Object right) {
return row(col3(left), col3(middleLeft), col3(middleRight), col3(right));
}
public static Tag rowSeparated(Object... contents) {
return row(contents).class_("row row-separated");
}
public static Tag container(Object... contents) {
return div(contents).class_("container");
}
public static Tag containerFluid(Object... contents) {
return div(contents).class_("container-fluid");
}
public static Tag icon(String icon) {
return span().class_("icon-" + icon);
}
public static Tag glyphicon(String glyphicon) {
return span().class_("glyphicon glyphicon-" + glyphicon);
}
public static Tag awesome(String fontAwesomeIcon) {
return span().class_("fa fa-" + fontAwesomeIcon);
}
public static Tag awesomeFw(String fontAwesomeIcon) {
return span().class_("fa fa-fw fa-" + fontAwesomeIcon);
}
public static ATag a_glyph(String glyphicon, Object... contents) {
return a_void(glyphicon(glyphicon), NBSP, contents);
}
public static ATag a_awesome(String fontAwesomeIcon, Object... contents) {
return a_void(awesome(fontAwesomeIcon), NBSP, contents);
}
public static ButtonWidget btn(Object... contents) {
ButtonWidget btn = Cls.customizable(ButtonWidget.class).contents(contents);
for (Object content : contents) {
if (content instanceof String) {
String cmd = (String) content;
btn = btn.command(cmd);
break;
}
}
return btn;
}
public static Tag nav_(boolean fluid, boolean inverse, Tag brand, Object[] navbarContent) {
brand = brand.class_("navbar-brand");
Tag hdr = div(btnCollapse(), brand).class_("navbar-header");
Tag collapsable = div(navbarContent).class_("collapse navbar-collapse").id("collapsable");
Tag cnt = div(hdr, collapsable).class_(containerMaybeFluid(fluid));
String navDefOrInv = inverse ? "navbar-inverse" : "navbar-default";
return nav(cnt).class_("navbar " + navDefOrInv).role("navigation");
}
public static String containerMaybeFluid(boolean fluid) {
return fluid ? "container-fluid" : "container";
}
public static ButtonTag btnCollapse() {
ButtonTag btn = button(span("Toggle navigation").class_("sr-only"), icon("bar"), icon("bar"), icon("bar"));
btn = btn.type("button").class_("navbar-toggle collapsed").attr("data-toggle", "collapse")
.attr("data-target", "#collapsable");
return btn;
}
public static Tag navbarMenu(boolean onLeft, int activeIndex, Object... menuItems) {
Tag menu = ul().class_("nav navbar-nav navbar-" + leftOrRight(onLeft));
for (int i = 0; i < menuItems.length; i++) {
Object item = menuItems[i];
Tag li = li(item);
if (i == activeIndex) {
li = li.class_("active");
}
menu = menu.append(li);
}
return menu;
}
public static Tag navbarDropdown(boolean onLeft, Tag menu, Object... subItems) {
Tag ul1 = ul_li(subItems).class_("dropdown-menu").role("menu");
menu = menu.class_("dropdown-toggle").attr("data-toggle", "dropdown");
Tag drop1 = li(menu, ul1).class_("dropdown");
return ul(drop1).class_("nav navbar-nav navbar-" + leftOrRight(onLeft));
}
public static Tag menuDivider() {
return li().class_("divider");
}
public static FormTag navbarForm(boolean onLeft, Object btnContent, String[] fields, String[] placeholders) {
U.must(fields.length == placeholders.length, "");
Tag ctrls = div().class_("form-group");
for (int i = 0; i < fields.length; i++) {
InputTag inp = input().type("text").class_("form-control").name(fields[i]).id("navbar-" + fields[i])
.placeholder(placeholders[i]);
ctrls = ctrls.append(inp);
}
ButtonTag btn = button(btnContent).class_("btn btn-default").type("submit");
return form(ctrls, btn).class_("navbar-form navbar-" + leftOrRight(onLeft));
}
public static FormTag navbarSearchForm(String action) {
return navbarForm(false, awesome("search"), arr("q"), arr("Search")).attr("action", action).attr("method",
"GET");
}
public static Object navbarPage(boolean fluid, Tag brand, Object[] navbarContent, Object pageContent) {
Object cont = div(pageContent).class_(containerMaybeFluid(fluid));
Tag navbar = nav_(fluid, false, brand, navbarContent);
return arr(navbar, cont);
}
public static Object cleanPage(boolean fluid, Object pageContent) {
return div(pageContent).class_(containerMaybeFluid(fluid));
}
private static String leftOrRight(boolean onLeft) {
return onLeft ? "left" : "right";
}
public static Tag caret() {
return span().class_("caret");
}
public static Tag jumbotron(Object... contents) {
return div(contents).class_("jumbotron");
}
public static Tag well(Object... contents) {
return div(contents).class_("well");
}
public static ColspanTag col_(int cols, Object... contents) {
return (ColspanTag) tag(ColspanTag.class, "div", contents).class_("col-md-" + cols);
}
public static ColspanTag col1(Object... contents) {
return col_(1, contents);
}
public static ColspanTag col2(Object... contents) {
return col_(2, contents);
}
public static ColspanTag col3(Object... contents) {
return col_(3, contents);
}
public static ColspanTag col4(Object... contents) {
return col_(4, contents);
}
public static ColspanTag col5(Object... contents) {
return col_(5, contents);
}
public static ColspanTag col6(Object... contents) {
return col_(6, contents);
}
public static ColspanTag col7(Object... contents) {
return col_(7, contents);
}
public static ColspanTag col8(Object... contents) {
return col_(8, contents);
}
public static ColspanTag col9(Object... contents) {
return col_(9, contents);
}
public static ColspanTag col10(Object... contents) {
return col_(10, contents);
}
public static ColspanTag col11(Object... contents) {
return col_(11, contents);
}
public static ColspanTag col12(Object... contents) {
return col_(12, contents);
}
public static Tag mid2(Object... contents) {
return row(col5(), col2(contents), col5());
}
public static Tag mid4(Object... contents) {
return row(col4(), col4(contents), col4());
}
public static Tag mid6(Object... contents) {
return row(col3(), col6(contents), col3());
}
public static Tag mid8(Object... contents) {
return row(col2(), col8(contents), col2());
}
public static Tag mid10(Object... contents) {
return row(col1(), col10(contents), col1());
}
public static ButtonWidget cmd(String cmd, Object... args) {
boolean primary = cmd.startsWith("^");
boolean danger = cmd.startsWith("!");
boolean warning = cmd.startsWith("?");
if (primary || danger || warning) {
cmd = cmd.substring(1);
}
String caption = U.capitalized(cmd);
ButtonWidget btn = btn(caption);
if (primary) {
btn = btn.primary();
} else if (danger) {
btn = btn.danger();
} else if (warning) {
btn = btn.warning();
}
return btn.command(cmd, args);
}
public static ButtonWidget navigate(String cmd) {
String caption = U.capitalized(cmd);
return btn(caption).linkTo(cmd);
}
public static ButtonWidget[] cmds(String... commands) {
ButtonWidget[] cmds = new ButtonWidget[commands.length];
for (int i = 0; i < cmds.length; i++) {
cmds[i] = cmd(commands[i]);
}
return cmds;
}
public static Tag titleBox(Object... contents) {
return div(contents).class_("title-box");
}
public static Tag right(Object... contents) {
return span(contents).class_("pull-right");
}
public static PanelWidget panel(Object... contents) {
return Cls.customizable(PanelWidget.class, new Object[] { UTILS.flat(contents) });
}
public static GridWidget grid(Class type, Object[] items, String sortOrder, int pageSize,
String... properties) {
return grid(Models.beanItems(type, items), sortOrder, pageSize, properties);
}
public static GridWidget grid(Class type, Iterable items, String sortOrder, int pageSize,
String... properties) {
return grid(type, U.array(items), sortOrder, pageSize, properties);
}
public static GridWidget grid(Items items, String sortOrder, int pageSize, String... properties) {
return Cls.customizable(GridWidget.class, items, sortOrder, pageSize, properties);
}
public static KeyValueGridWidget grid(Map, ?> map) {
return Cls.customizable(KeyValueGridWidget.class).map(map);
}
public static PagerWidget pager(int from, int to, Var pageNumber) {
return Cls.customizable(PagerWidget.class, from, to, pageNumber);
}
public static FormWidget form_(FormLayout layout, String[] fieldsNames, String[] fieldsDesc,
FieldType[] fieldTypes, Object[][] options, Var>[] vars, ButtonWidget[] buttons) {
return Cls.customizable(FormWidget.class, layout, fieldsNames, fieldsDesc, fieldTypes, options, vars, buttons);
}
public static FormWidget show(Object bean, String... properties) {
return show(Models.item(bean), properties);
}
public static FormWidget show(final Item item, String... properties) {
// FIXME make fluent and customizable!
return new FormWidget(FormMode.SHOW, item, properties);
}
public static FormWidget edit(Object bean, String... properties) {
return edit(Models.item(bean), properties);
}
public static FormWidget edit(final Item item, String... properties) {
// FIXME make fluent and customizable!
return new FormWidget(FormMode.EDIT, item, properties);
}
public static FormWidget create(Object bean, String... properties) {
return create(Models.item(bean), properties);
}
public static FormWidget create(final Item item, String... properties) {
// FIXME make fluent and customizable!
return new FormWidget(FormMode.CREATE, item, properties);
}
public static FormFieldWidget field(FormMode mode, FormLayout layout, Property prop, String name, String desc,
FieldType type, Collection> options, boolean required, Var> var, DataPermissions permissions) {
return new FormFieldWidget(mode, layout, prop, name, desc, type, options, required, var, permissions);
}
public static FormFieldWidget field(FormMode mode, FormLayout layout, Item item, Property prop) {
return new FormFieldWidget(mode, layout, item, prop);
}
public static Property prop(String name, Calc calc) {
return Models.property(name, calc);
}
public static Item item(Object value) {
return Models.item(value);
}
public static Items beanItems(Class beanType, T... beans) {
return Models.beanItems(beanType, beans);
}
public static GridWidget grid(Class entityType, int pageSize, String... properties) {
Iterable all = DB.getAll(entityType);
return grid(entityType, all, "", pageSize, properties);
}
public static Tag media(Object left, Object title, Object body, String targetUrl) {
Tag mhead = h4(title).class_("media-heading");
Tag mleft = div(left).class_("media-left");
Tag mbody = div(mhead, body).class_("media-body");
String divClass = targetUrl != null ? "media pointer" : "media";
String js = targetUrl != null ? U.format("goAt('%s');", targetUrl) : null;
return div(mleft, mbody).class_(divClass).onclick(js);
}
public static Tag[] mediaList(List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy