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

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

package org.nasdanika.html.bootstrap.impl;

import org.nasdanika.html.Form;
import org.nasdanika.html.HTMLElement;
import org.nasdanika.html.HTMLFactory;
import org.nasdanika.html.Tag;
import org.nasdanika.html.bootstrap.BootstrapElement;
import org.nasdanika.html.bootstrap.BootstrapFactory;
import org.nasdanika.html.bootstrap.Button;
import org.nasdanika.html.bootstrap.Direction;
import org.nasdanika.html.bootstrap.Dropdown;

public class DropdownImpl extends DivWrappingBootstrapElementImpl implements Dropdown {
	
	protected DropdownMenu menu;

	public DropdownImpl(BootstrapFactory factory, Button button, boolean split, Direction direction) {
		super(factory);
		htmlElement.addClass("btn-group");
		HTMLFactory htmlFactory = getFactory().getHTMLFactory();
		htmlElement.content(button);

		switch (direction) {
		case DOWN:
			// Default behavior
			break;
		case LEFT:
		case RIGHT:
		case UP:
			htmlElement.addClass("drop"+direction.name().toLowerCase());
			break;
		default:
			break;
		
		}
		
		HTMLElement toggleHtmlElement = button.toHTMLElement();
		
		if (split) {
			org.nasdanika.html.Button splitHtmlButton = htmlFactory.button(htmlFactory.span("Toggle Dropdown").addClass("sr-only"))
					.addClass("dropdown-toggle-split");
			Button splitButton = getFactory().button(
					splitHtmlButton, 
					((ButtonImpl) button).getColor(), 
					((ButtonImpl) button).isOutline()); 
			
			toggleHtmlElement = splitHtmlButton;
			htmlElement.content(splitButton);
		}
		
		toggleHtmlElement
			.addClass("dropdown-toggle")
			.attribute("data-toggle", "dropdown")
			.attribute("aria-haspopup", "true")
			.attribute("aria-expanded", "false");

		if (toggleHtmlElement.getId() == null) {
			toggleHtmlElement.id(htmlFactory.nextId());
		}		
		
		menu = new DropdownMenu(factory, factory.wrap(toggleHtmlElement));
		htmlElement.content(menu.toHTMLElement());
	}
	
	@Override
	public Dropdown item(HTMLElement item, boolean active, boolean disabled) {
		menu.item(item, active, disabled);
		return this;
	}

	@Override
	public Tag header(Object... content) {
		return menu.header(content);
	}

	@Override
	public Tag divider() {
		return menu.divider();
	}

	@Override
	public Dropdown form(Form form) {
		menu.form(form);
		return this;
	}

	@Override
	public BootstrapElement getToggle() {
		return menu.getToggle();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy