All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nasdanika.html.bootstrap.impl.NavsImpl Maven / Gradle / Ivy

There is a newer version: 2024.12.0
Show newest version
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