package com.revolsys.ui.html.view; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.servlet.http.HttpServletRequest; import com.revolsys.record.io.format.xml.XmlWriter; import com.revolsys.ui.model.Menu; import com.revolsys.ui.web.config.JexlHttpServletRequestContext; import com.revolsys.util.HtmlAttr; import com.revolsys.util.HtmlElem; import com.revolsys.util.HtmlUtil; import com.revolsys.util.Property; public class ButtonsToolbarElement extends Element { private JexlHttpServletRequestContext jexlContext; private final Menu menu; public ButtonsToolbarElement(final Menu menu) { this.menu = menu; } public Menu getMenu() { return this.menu; } @Override public void initialize(final HttpServletRequest request) { this.jexlContext = new JexlHttpServletRequestContext(request); } private void menu(final XmlWriter out, final Collection<Menu> items, final int level) { if (items.size() > 0) { for (final Menu menu : items) { if (menu.isVisible()) { menuLink(out, menu); final List<Menu> menus = menu.getMenus(); menu(out, menus, level + 1); } } } } private void menuLink(final XmlWriter out, final Menu menu) { String uri = menu.getLink(this.jexlContext); String linkTitle = menu.getLinkTitle(); final String onClick = menu.getOnClick(); if (onClick != null && uri == null) { uri = "#"; } final String buttonClass = menu.getProperty("buttonClass", "btn-default"); if (Property.hasValue(uri)) { if (uri.startsWith("javascript:")) { out.startTag(HtmlElem.BUTTON); out.attribute(HtmlAttr.CLASS, "btn btn-sm " + buttonClass); out.attribute(HtmlAttr.ON_CLICK, uri.substring(11)); linkTitle = menu.getTitle(); final String iconName = menu.getIconName(); if (Property.hasValue(iconName)) { BootstrapUtil.icon(out, iconName); HtmlUtil.serializeSpan(out, "sr-only", linkTitle); } else { out.text(linkTitle); } out.endTag(HtmlElem.BUTTON); } else { out.startTag(HtmlElem.A); out.attribute(HtmlAttr.HREF, uri); out.attribute(HtmlAttr.TITLE, linkTitle); out.attribute(HtmlAttr.ON_CLICK, onClick); out.attribute(HtmlAttr.TARGET, menu.getTarget()); out.attribute(HtmlAttr.CLASS, "btn btn-sm " + buttonClass); out.attribute(HtmlAttr.ROLE, "button"); final String iconName = menu.getIconName(); if (Property.hasValue(iconName)) { BootstrapUtil.icon(out, iconName); HtmlUtil.serializeSpan(out, "sr-only", linkTitle); } else { out.text(linkTitle); } out.endTag(HtmlElem.A); } } else { out.text(linkTitle); } } @Override public void serializeElement(final XmlWriter out) { if (this.menu != null) { final List<Menu> menus = new ArrayList<>(); for (final Menu menuItem : this.menu.getMenus()) { if (menuItem.isVisible()) { menus.add(menuItem); } } out.startTag(HtmlElem.DIV); out.attribute(HtmlAttr.CLASS, "btn-toolbar"); out.attribute(HtmlAttr.ROLE, "toolbar"); menu(out, menus, 1); out.endTag(HtmlElem.DIV); } } }