
org.nasdanika.html.bootstrap.impl.NavsImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bootstrap Show documentation
Show all versions of bootstrap Show documentation
Classes for generating Bootstrap UI.
package org.nasdanika.html.bootstrap.impl;
import org.nasdanika.html.Fragment;
import org.nasdanika.html.HTMLFactory;
import org.nasdanika.html.Tag;
import org.nasdanika.html.TagName;
import org.nasdanika.html.bootstrap.BootstrapFactory;
import org.nasdanika.html.bootstrap.Dropdown;
import org.nasdanika.html.bootstrap.Navs;
public class NavsImpl extends WrappingBootstrapElementImpl implements Navs {
private static final String NAV_TABS = "nav-tabs";
private static final String NAV_PILLS = "nav-pills";
private Fragment fragment;
private Tag contentDiv;
private boolean hasContent;
protected NavsImpl(BootstrapFactory factory) {
super(factory, factory.getHTMLFactory().nonEmptyDiv());
htmlElement.addClass("nav");
contentDiv = factory.getHTMLFactory().nonEmptyDiv().addClass("tab-content");
fragment = factory.getHTMLFactory().fragment(htmlElement, contentDiv);
}
@Override
public void item(Object name, Object content) {
item(name, isEmpty(), false, null, content);
}
@Override
public boolean isEmpty() {
return htmlElement.isEmpty();
}
@Override
public Navs item(Object name, boolean active, boolean disabled, Object contentId, Object... content) {
if (contentId == null) {
contentId = "nav-"+getFactory().getHTMLFactory().nextId();
}
Tag navLink = getFactory().getHTMLFactory().link("#"+contentId, name)
.addClass("nav-item", "nav-link")
.addClassConditional(active, "active")
.attribute("data-toggle", "tab")
.addClassConditional(disabled, "disabled")
.attribute("role", "tab");
htmlElement.content(navLink);
Tag cDiv = getFactory().getHTMLFactory().nonEmptyDiv(content)
.id(contentId)
.attribute("role", "tabpanel")
.addClass("tab-pane", "fade")
.addClassConditional(active, "show", "active");
if (!cDiv.isEmpty()) {
htmlElement.attribute("role", "tablist");
hasContent = true;
}
contentDiv.content(cDiv);
return this;
}
@Override
public Tag item(Object name, Object href, boolean active, boolean disabled) {
Tag navLink = getFactory().getHTMLFactory().link(href, name)
.addClass("nav-item", "nav-link")
.addClassConditional(active, "active")
.addClassConditional(disabled, "disabled");
htmlElement.content(navLink);
return navLink;
}
@Override
public Dropdown dropdown(boolean active, Object... name) {
HTMLFactory htmlFactory = getFactory().getHTMLFactory();
Tag toggle = htmlFactory.link("#", name)
.addClass("nav-link", "dropdown-toggle")
.attribute("role", "button")
.attribute("data-toggle", "dropdown");
DropdownMenu menu = new DropdownMenu(getFactory(), getFactory().wrap(toggle));
Tag li = htmlFactory.tag(TagName.li, toggle, menu.toHTMLElement())
.addClass("nav-item", "dropdown")
.addClassConditional(active, "active");
htmlElement.content(li);
return menu;
}
@Override
public Object produce(int indent) {
return (hasContent ? fragment : htmlElement).produce(indent);
}
@Override
public String toString() {
return (hasContent ? fragment : htmlElement).toString();
}
@Override
public Tag getContentDiv() {
return contentDiv;
}
@Override
public Navs tabs(boolean tabs) {
htmlElement.addClassConditional(tabs, NAV_TABS);
return this;
}
@Override
public Navs pills(boolean pills) {
htmlElement.addClassConditional(pills, NAV_PILLS);
return this;
}
@Override
public Navs content(Object... content) {
htmlElement.content(content);
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy