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

org.dominokit.domino.ui.infoboxes.InfoBox Maven / Gradle / Ivy

package org.dominokit.domino.ui.infoboxes;

import elemental2.dom.HTMLDivElement;
import elemental2.dom.HTMLElement;
import org.dominokit.domino.ui.icons.BaseIcon;
import org.dominokit.domino.ui.style.Color;
import org.dominokit.domino.ui.style.Style;
import org.dominokit.domino.ui.utils.BaseDominoElement;
import org.dominokit.domino.ui.utils.DominoElement;
import org.dominokit.domino.ui.utils.ElementUtil;
import org.dominokit.domino.ui.utils.HasBackground;
import org.jboss.gwt.elemento.core.IsElement;
import org.jboss.gwt.elemento.template.DataElement;
import org.jboss.gwt.elemento.template.Templated;

import javax.annotation.PostConstruct;

import static java.util.Objects.nonNull;

@Templated
public abstract class InfoBox extends BaseDominoElement implements HasBackground, IsElement {

    public enum HoverEffect {
        ZOOM("hover-zoom-effect"),
        EXPAND("hover-expand-effect");

        private final String effectStyle;

        HoverEffect(String effectStyle) {
            this.effectStyle = effectStyle;
        }

    }

    public enum Flip {

        RIGHT("info-box-3"),
        LEFT("info-box");

        private final String flipStyle;

        Flip(String flipStyle) {
            this.flipStyle = flipStyle;
        }
    }

    @DataElement
    HTMLDivElement iconElement;

    @DataElement
    HTMLDivElement titleElement;

    @DataElement
    HTMLDivElement valueElement;

    HTMLElement icon;

    private Color counterBackground;
    private Color iconBackground;
    private HoverEffect hoverEffect;
    private Flip flip = Flip.LEFT;
    private Color iconColor;

    @PostConstruct
    void init() {
        init(this);
    }

    public static InfoBox create(BaseIcon icon, String title, String value) {
        Templated_InfoBox templated_InfoBox = new Templated_InfoBox();
        templated_InfoBox.getIconElement().appendChild(icon);
        templated_InfoBox.getTitleElement().setTextContent(title);
        templated_InfoBox.getValueElement().setTextContent(value);
        templated_InfoBox.icon = icon.asElement();
        return templated_InfoBox;
    }

    public static InfoBox create(HTMLElement icon, String title, String value) {
        Templated_InfoBox templated_InfoBox = new Templated_InfoBox();
        templated_InfoBox.getIconElement().appendChild(icon);
        templated_InfoBox.getTitleElement().setTextContent(title);
        templated_InfoBox.getValueElement().setTextContent(value);
        templated_InfoBox.icon = icon;
        return templated_InfoBox;
    }

    public static InfoBox create(HTMLElement icon, String title) {
        Templated_InfoBox templated_InfoBox = new Templated_InfoBox();
        templated_InfoBox.getIconElement().appendChild(icon);
        templated_InfoBox.getTitleElement().setTextContent(title);
        templated_InfoBox.icon = icon;
        return templated_InfoBox;
    }

    @Override
    public InfoBox setBackground(Color background) {
        if (nonNull(counterBackground))
            style().remove(counterBackground.getBackground());
        style().add(background.getBackground());
        this.counterBackground = background;

        return this;
    }

    public InfoBox setIconBackground(Color background) {
        if (nonNull(iconBackground))
            Style.of(iconElement).remove(iconBackground.getBackground());
        Style.of(iconElement).add(background.getBackground());
        this.iconBackground = background;

        return this;
    }

    public InfoBox setHoverEffect(HoverEffect effect) {
        if (nonNull(hoverEffect))
            style().remove(hoverEffect.effectStyle);
        this.hoverEffect = effect;
        style().add(hoverEffect.effectStyle);

        return this;
    }

    public InfoBox removeHoverEffect() {
        if (nonNull(hoverEffect)) {
            style().remove(hoverEffect.effectStyle);
            this.hoverEffect = null;
        }

        return this;
    }

    public InfoBox flipLeft() {
        style().remove(flip.flipStyle);
        this.flip = Flip.LEFT;
        style().add(this.flip.flipStyle);

        return this;
    }

    public InfoBox flipRight() {
        style().remove(flip.flipStyle);
        this.flip = Flip.RIGHT;
        style().add(this.flip.flipStyle);
        return this;
    }

    public InfoBox flip() {
        style().remove(flip.flipStyle);
        if (Flip.LEFT.equals(this.flip)) {
            this.flip = Flip.RIGHT;
        } else {
            this.flip = Flip.LEFT;
        }
        style().add(this.flip.flipStyle);

        return this;
    }

    public InfoBox setIconColor(Color color) {
        if (nonNull(iconColor) && nonNull(icon))
            Style.of(icon).remove(iconColor.getStyle());
        if (nonNull(icon)) {
            this.iconColor = color;
            Style.of(icon).add(this.iconColor.getStyle());
        }

        return this;
    }

    public InfoBox setIcon(HTMLElement element) {
        ElementUtil.clear(iconElement);
        iconElement.appendChild(element);
        return this;
    }

    public InfoBox removeShadow() {
        style()
                .setBoxShadow("none")
                .setProperty("-webkit-box-shadow", "none");
        return this;
    }

    public InfoBox setValue(String value){
        getValueElement().setTextContent(value);
        return this;
    }

    public InfoBox setTitle(String title){
        getTitleElement().setTextContent(title);
        return this;
    }

    public InfoBox setIcon(BaseIcon icon){
        getIconElement().clearElement()
                .appendChild(icon);
        return this;
    }

    public DominoElement getIconElement() {
        return DominoElement.of(iconElement);
    }

    public DominoElement getTitleElement() {
        return DominoElement.of(titleElement);
    }

    public DominoElement getValueElement() {
        return DominoElement.of(valueElement);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy