Skip to content
Snippets Groups Projects
Select Git revision
  • a40d22ae5200af7dd02a70124b5737a5447a0826
  • main default protected
  • renovate/lock-file-maintenance
  • demo protected
  • person-select-custom
  • dbp-translation-component
  • icon-set-mapping
  • port-i18next-parser
  • remove-sentry
  • favorites-and-recent-files
  • revert-6c632dc6
  • lit2
  • advertisement
  • wc-part
  • automagic
  • publish
  • wip-cleanup
  • demo-file-handling
18 results

vpu-icon.js

Blame
  • vpu-button.js 2.42 KiB
    import {html, LitElement, css} from 'lit-element';
    import * as commonUtils from './utils.js';
    import bulmaCSSPath from 'bulma/css/bulma.min.css';
    import VPULitElement from './vpu-lit-element.js';
    import * as utils from '../../src/utils';
    
    /**
     * vpu-button implements a button with Bulma styles and automatic spinner and
     * disabling if button is clicked
     *
     * Use the attribute "no-spinner-on-click" to disable the spinner, then you can
     * start it with start() and stop it with stop()
     *
     * Use the attribute "type" to set Bulma styles like "is-info"
     * See https://bulma.io/documentation/elements/button/#colors for a list of all styles
     */
    class Button extends VPULitElement {
        constructor() {
            super();
            this.value = "";
            // see: https://bulma.io/documentation/elements/button/#colors
            this.type = "is-primary";
            this.spinner = false;
            this.noSpinnerOnClick = false;
            this.disabled = false;
            this.button = null;
        }
    
        connectedCallback() {
            super.connectedCallback();
            const that = this;
    
            this.updateComplete.then(()=> {
                this.button = this._("button");
            });
        }
    
        static get properties() {
            return {
                value: { type: String },
                type: { type: String },
                spinner: { type: Boolean },
                noSpinnerOnClick: { type: Boolean, attribute: 'no-spinner-on-click' },
                disabled: { type: Boolean },
            };
        }
    
        static get styles() {
            return css`vpu-mini-spinner { margin-left: 0.5em; }`;
        }
    
        clickHandler() {
            if (!this.noSpinnerOnClick) {
                this.start();
            }
        }
    
        start() {
            this.spinner = true;
            this.disabled = true;
            this.setAttribute("disabled", "disabled");
        }
    
        stop() {
            this.spinner = false;
            this.disabled = false;
            this.removeAttribute("disabled");
        }
    
        isDisabled() {
            return this.button.hasAttribute("disabled");
        }
    
        render() {
            const bulmaCSS = utils.getAssetURL(bulmaCSSPath);
    
            return html`
                <link rel="stylesheet" href="${bulmaCSS}">
                <button @click="${this.clickHandler}" class="button ${this.type}" ?disabled="${this.disabled}">
                    ${this.value} <vpu-mini-spinner style="display: ${this.spinner ? "inline" : "none"}"></vpu-mini-spinner>
                </button>
            `;
        }
    }
    
    commonUtils.defineCustomElement('vpu-button', Button);