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

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

package org.nasdanika.html.bootstrap.impl;

import java.util.Map;

import org.nasdanika.html.Event;
import org.nasdanika.html.HTMLElement;
import org.nasdanika.html.HTMLFactory;
import org.nasdanika.html.HTMLPage;
import org.nasdanika.html.Select;
import org.nasdanika.html.Tag;
import org.nasdanika.html.TagName;
import org.nasdanika.html.bootstrap.ActionGroup;
import org.nasdanika.html.bootstrap.BootstrapElement;
import org.nasdanika.html.bootstrap.BootstrapFactory;
import org.nasdanika.html.bootstrap.Breadcrumb;
import org.nasdanika.html.bootstrap.Breakpoint;
import org.nasdanika.html.bootstrap.Button;
import org.nasdanika.html.bootstrap.ButtonGroup;
import org.nasdanika.html.bootstrap.ButtonToolbar;
import org.nasdanika.html.bootstrap.Card;
import org.nasdanika.html.bootstrap.Color;
import org.nasdanika.html.bootstrap.Container;
import org.nasdanika.html.bootstrap.Direction;
import org.nasdanika.html.bootstrap.Dropdown;
import org.nasdanika.html.bootstrap.FormGroup;
import org.nasdanika.html.bootstrap.InputGroup;
import org.nasdanika.html.bootstrap.ListGroup;
import org.nasdanika.html.bootstrap.Modal;
import org.nasdanika.html.bootstrap.Navbar;
import org.nasdanika.html.bootstrap.Navs;
import org.nasdanika.html.bootstrap.Placement;
import org.nasdanika.html.bootstrap.RowContainer.Row;
import org.nasdanika.html.bootstrap.RowContainer.Row.Cell;
import org.nasdanika.html.bootstrap.Size;
import org.nasdanika.html.bootstrap.Table;
import org.nasdanika.html.bootstrap.TagBootstrapElement;
import org.nasdanika.html.bootstrap.Theme;

/**
 * HTML factory which relies on Bootstrap styles and scripts.
 * @author Pavel
 *
 */
public class DefaultBootstrapFactory implements BootstrapFactory {
	
	private HTMLFactory htmlFactory;

	public DefaultBootstrapFactory(HTMLFactory htmlFactory) {
		this.htmlFactory = htmlFactory;
	}
	
	@Override
	public HTMLFactory getHTMLFactory() {
		return htmlFactory;
	}

	@Override
	public Tag alert(Color color, Object... content) {
		return getHTMLFactory().div(content)
				.addClass("alert")
				.addClassConditional(color != null && color.code != null, "alert-"+color.code)
				.attribute("role", "alert");
	}

	@Override
	public Tag badge(boolean pill, Color color, Object... content) {
		Tag ret = getHTMLFactory().span(content)
				.addClass("badge")
				.addClassConditional(color != null && color.code != null, "badge-"+color.code)
				.addClassConditional(pill, "badge-pill");
		return ret;
	}

	@Override
	public Tag badge(boolean pill, Object... content) {
		Tag ret = getHTMLFactory().span(content)
				.addClass("badge")
				.addClassConditional(pill, "badge-pill");
		return ret;
	}

	@Override
	public Tag badgeLink(Object href, boolean pill, Color color, Object... content) {
		Tag ret = getHTMLFactory().link(href, content)
				.addClass("badge")
				.addClassConditional(color != null && color.code != null, "badge-"+color.code)
				.addClassConditional(pill, "badge-pill");
		return ret;
	}

	@Override
	public Breadcrumb breadcrumb() {
		return new BreadcrumbImpl(this);
	}

	@Override
	public > Button button(H htmlElement, Color color, boolean outline) {
		return new ButtonImpl(this, htmlElement, color, outline);
	}

	@Override
	public ButtonGroup buttonGroup(boolean vertical) {
		return new ButtonGroupImpl(this, vertical);
	}

	@Override
	public ButtonToolbar buttonToolbar() {
		return new ButtonToolbarImpl(this);
	}

	@Override
	public Dropdown dropdown(Button button, boolean split, Direction direction) {
		return new DropdownImpl(this, button, split, direction);
	}
	
	@Override
	public InputGroup inputGroup() {
		return new InputGroupImpl(this);
	}
	
	@Override
	public Table table(org.nasdanika.html.Table htmlTable) {
		return new TableImpl(this, htmlTable);
	}
	
	@Override
	public Table table() {
		return table(htmlFactory.table());
	}
	
	@Override
	public Row row(org.nasdanika.html.RowContainer.Row htmlRow) {
		return new RowImpl(this, htmlRow);
	}
	
	@Override
	public Cell cell(org.nasdanika.html.RowContainer.Row.Cell htmlCell) {
		return new CellImpl(this, htmlCell);
	}
	
	@Override
	public FormGroup formGroup(Object label, Object input, Object hint, Map horizontalLabelWidths) {
		return new FormGroupImpl(this, label, input, hint, horizontalLabelWidths);
	}
	
	@Override
	public > B tooltip(B bootstrapElement, Object tooltip, boolean html, Placement placement) {
		tooltip(bootstrapElement.toHTMLElement(), tooltip, html, placement);
		return bootstrapElement;
	}
	
	@Override
	public > H tooltip(H htmlElement, Object tooltip, boolean html, Placement placement) {
		htmlElement
			.attribute("data-toggle", "tooltip")
			.attribute("data-placement", placement.name().toLowerCase())			
			.attribute("data-html", "true", html)
			.attribute("title", tooltip);		
		return htmlElement;
	}
	
	@Override
	public Tag initTooltipScript() {
		return htmlFactory.nonEmptyTag(TagName.script, "$(function () { $('[data-toggle=\"tooltip\"]').tooltip(); });");
	}
	
	@Override
	public Navs navs() {
		return new NavsImpl(this);
	}
	
	@Override
	public Navs pills() {
		return new NavsImpl(this).pills();
	}
	
	@Override
	public Navs tabs() {
		return new NavsImpl(this).tabs();
	}
	
	@Override
	public Container container() {
		return container(htmlFactory.div());
	}

	@Override
	public Container container(Tag div) {
		return new ContainerImpl(this, div, false);
	}

	@Override
	public Container fluidContainer() {
		return fluidContainer(htmlFactory.div());
	}

	@Override
	public Container fluidContainer(Tag div) {
		return new ContainerImpl(this, div, true);
	}
	
	@Override
	public 

P bootstrapHTMLPage(P page) { page .head(getHTMLFactory().tag(TagName.meta).attribute("charset", "utf-8")) .head(getHTMLFactory().tag(TagName.meta).attribute("name", "viewport").attribute("content", "width=device-width, initial-scale=1, shrink-to-fit=no")); return page; } @Override public HTMLPage bootstrapCdnHTMLPage() { return bootstrapCdnHTMLPage(Theme.Default); } @Override public HTMLPage bootstrapCdnHTMLPage(Theme theme) { return bootstrapCdnHTMLPage(getHTMLFactory().page(), theme); } @Override public

P bootstrapCdnHTMLPage(P page, Theme theme) { theme.cdn(page); P bootstrapPage = bootstrapHTMLPage(page); bootstrapPage.script("https://code.jquery.com/jquery-3.3.1.min.js"); bootstrapPage.script("https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"); bootstrapPage.script("https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"); return page; } @Override public

P bootstrapCdnHTMLPage(P page) { return bootstrapCdnHTMLPage(page, Theme.Default); } @Override public HTMLPage bootstrapHTMLPage() { return bootstrapHTMLPage(getHTMLFactory().page()); } @Override public Select themeSelect(Theme selected) { Select select = getHTMLFactory().select(); select.on(Event.change, "document.getElementById('"+Theme.STYLESHEET_ID+"').href = this.value;"); for (Theme theme: Theme.values()) { select.option(theme.stylesheetCdnURL, theme.name(), theme == selected, false); } return select; } @Override public > H display(H element, int level) { element.addClass("display-"+level); return element; } @Override public Navbar navbar(Breakpoint expandSize, boolean dark, Color background, HTMLElement brand) { return new NavbarImpl(this, expandSize, dark, background, brand); } @Override public ListGroup listGroup(boolean flush) { return new ListGroupImpl(this, flush); } @Override public ActionGroup actionGroup(boolean flush) { return new ActionGroupImpl(this, flush); } @Override public > BootstrapElement> wrap(H htmlElement) { return new WrappingBootstrapElementImpl>(this, htmlElement); } @Override public TagBootstrapElement wrap(Tag tag) { return new TagBootstrapElementImpl(this, tag); } @Override public Card card() { return new CardImpl(this); } @Override public Modal modal() { return new ModalImpl(this); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy