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

org.dominokit.domino.ui.loaders.Loader Maven / Gradle / Ivy

There is a newer version: 1.0.139
Show newest version
package org.dominokit.domino.ui.loaders;

import elemental2.dom.HTMLElement;
import org.dominokit.domino.ui.style.Styles;
import org.dominokit.domino.ui.utils.DominoElement;
import org.jboss.gwt.elemento.core.IsElement;

import static java.util.Objects.nonNull;

public class Loader {

    private boolean started = false;
    private DominoElement target;
    private IsLoader loaderElement;
    private String width;
    private String height;
    private boolean removeLoadingText = false;

    private LoadingTextPosition loadingTextPosition = LoadingTextPosition.MIDDLE;

    public static Loader create(HTMLElement target, LoaderEffect effect) {
        return new Loader(target, effect);
    }

    public static Loader create(IsElement target, LoaderEffect effect) {
        return new Loader(target.element(), effect);
    }

    private Loader(HTMLElement target, LoaderEffect type) {
        this.target = DominoElement.of(target);
        this.loaderElement = LoaderFactory.make(type);
        this.loaderElement.getContentElement().css(loadingTextPosition.getStyle());
    }

    public Loader start() {
        stop();
        if (nonNull(width) && nonNull(height)) {
            loaderElement.setSize(width, height);
        }
        if (removeLoadingText) {
            loaderElement.removeLoadingText();
        }

        target.appendChild(loaderElement.getElement());
        target.style().add("waitMe_container");
        started = true;

        return this;
    }

    public Loader stop() {
        if (started) {
            loaderElement.getElement().remove();
            target.style().remove("waitMe_container");
            started = false;
        }

        return this;
    }

    public Loader setLoadingText(String text) {
        loaderElement.setLoadingText(text);
        return this;
    }

    public Loader setSize(String width, String height) {
        this.width = width;
        this.height = height;
        return this;
    }

    public Loader setRemoveLoadingText(boolean removeLoadingText) {
        this.removeLoadingText = removeLoadingText;
        return this;
    }

    public boolean isStarted() {
        return started;
    }

    public LoadingTextPosition getLoadingTextPosition() {
        return loadingTextPosition;
    }

    public Loader setLoadingTextPosition(LoadingTextPosition loadingTextPosition) {
        this.loaderElement.getContentElement().removeCss(this.loadingTextPosition.getStyle());
        this.loadingTextPosition = loadingTextPosition;
        if (LoadingTextPosition.MIDDLE.equals(loadingTextPosition)) {
            this.loaderElement.getContentElement().css(Styles.vertical_center);
        } else {
            this.loaderElement.getContentElement().removeCss(Styles.vertical_center);
        }
        this.loaderElement.getContentElement().css(this.loadingTextPosition.getStyle());
        return this;
    }

    public IsLoader getLoaderElement() {
        return loaderElement;
    }

    public enum LoadingTextPosition {
        TOP(LoaderStyles.LOADING_TOP), MIDDLE(LoaderStyles.LOADING_MIDDLE), BOTTOM(LoaderStyles.LOADING_BOTTOM);

        private String style;

        LoadingTextPosition(String style) {
            this.style = style;
        }

        public String getStyle() {
            return style;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy