package com.revolsys.ui.html.view;
import java.util.List;
import com.revolsys.record.io.format.xml.XmlWriter;
import com.revolsys.ui.model.Brand;
import com.revolsys.ui.model.Menu;
import com.revolsys.ui.model.Navbar;
import com.revolsys.ui.web.config.JexlHttpServletRequestContext;
import com.revolsys.ui.web.controller.PathAliasController;
import com.revolsys.ui.web.utils.HttpServletUtils;
import com.revolsys.util.HtmlAttr;
import com.revolsys.util.HtmlElem;
import com.revolsys.util.HtmlUtil;
import com.revolsys.util.Property;
public class BootstrapUtil {
public static void icon(final XmlWriter writer, final String icon) {
writer.startTag(HtmlElem.SPAN);
writer.attribute(HtmlAttr.CLASS, icon);
writer.attribute("aria-hidden", true);
writer.text("");
writer.endTag(HtmlElem.SPAN);
}
private static void navBarBrand(final XmlWriter writer, final List<Brand> brands) {
if (Property.hasValue(brands)) {
writer.startTag(HtmlElem.DIV);
writer.attribute(HtmlAttr.CLASS, "navbar-brand");
for (final Brand brand : brands) {
final String title = brand.getBrandTitle();
String uri = brand.getBrandUri();
uri = HttpServletUtils.getAbsoluteUrl(PathAliasController.getPath(uri));
final String imageSrc = brand.getBrandImageSrc();
final String smallImageSrc = brand.getBrandSmallImageSrc();
final boolean hasUri = Property.hasValue(uri);
if (hasUri) {
writer.startTag(HtmlElem.A);
writer.attribute(HtmlAttr.HREF, uri);
}
HtmlUtil.serializeImage(writer, imageSrc, title, "hidden-xs");
HtmlUtil.serializeImage(writer, smallImageSrc, title, "visible-xs-inline-block");
HtmlUtil.serializeSpan(writer, "navbar-brand-title", title);
if (hasUri) {
writer.endTag(HtmlElem.A);
}
}
writer.endTag(HtmlElem.DIV);
}
}
public static void navbarDropdownEnd(final XmlWriter writer) {
writer.endTag(HtmlElem.UL);
writer.endTag(HtmlElem.LI);
}
public static void navbarDropdownStart(final XmlWriter writer, final Menu menu) {
writer.startTag(HtmlElem.LI);
writer.attribute(HtmlAttr.CLASS, "dropdown");
writer.startTag(HtmlElem.A);
writer.attribute(HtmlAttr.CLASS, "dropdown-toggle");
writer.attribute("data-toggle", "dropdown");
writer.attribute(HtmlAttr.ROLE, "button");
writer.attribute("aria-expanded", "false");
writer.text(menu.getTitle());
writer.text(" ");
icon(writer, "caret");
writer.endTag(HtmlElem.A);
writer.startTag(HtmlElem.UL);
writer.attribute(HtmlAttr.CLASS, "dropdown-menu");
writer.attribute(HtmlAttr.ROLE, "menu");
}
public static void navbarEnd(final XmlWriter writer) {
writer.endTagLn(HtmlElem.UL);
writer.endTagLn(HtmlElem.DIV);
writer.endTagLn(HtmlElem.DIV);
writer.endTagLn(HtmlElem.NAV);
}
public static void navbarStart(final XmlWriter writer, final Navbar navbar,
final JexlHttpServletRequestContext jexlContext) {
writer.startTag(HtmlElem.NAV);
final String id = navbar.getId();
writer.attribute(HtmlAttr.ID, id);
final String navbarCssClass = "navbar navbar-default " + navbar.getNavbarCssClass();
writer.attribute(HtmlAttr.CLASS, navbarCssClass);
writer.newLine();
writer.startTag(HtmlElem.DIV);
writer.attribute(HtmlAttr.CLASS, "container");
writer.newLine();
{
writer.startTag(HtmlElem.DIV);
writer.attribute(HtmlAttr.CLASS, "navbar-header");
writer.newLine();
{
writer.startTag(HtmlElem.BUTTON);
writer.attribute(HtmlAttr.TYPE, "button");
writer.attribute(HtmlAttr.CLASS, "navbar-toggle collapsed");
writer.attribute("data-toggle", "collapse");
writer.attribute("data-target", "#" + id + "Bar");
writer.attribute("aria-expanded", "false");
writer.attribute("aria-controls", "navbar");
writer.newLine();
HtmlUtil.serializeSpan(writer, "sr-only", "Toggle navigation");
for (int i = 0; i < 3; i++) {
icon(writer, "icon-bar");
}
writer.endTagLn(HtmlElem.BUTTON);
final List<Brand> brands = navbar.getBrands();
navBarBrand(writer, brands);
writer.endTagLn(HtmlElem.DIV);
}
{
writer.startTag(HtmlElem.DIV);
writer.attribute(HtmlAttr.ID, id + "Bar");
writer.attribute(HtmlAttr.CLASS, "navbar-collapse collapse");
writer.attribute("aria-expanded", "false");
writer.newLine();
writer.startTag(HtmlElem.UL);
final String cssClass = "nav navbar-nav navbar-" + navbar.getNavbarAlign();
writer.attribute(HtmlAttr.CLASS, cssClass);
}
}
}
}