/** * EGroupware eTemplate2 - Button widget * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package etemplate * @subpackage api * @link https://www.egroupware.org * @author Nathan Gray */ import {css, html} from "../../../../node_modules/@lion/core/index.js"; import {LionButton} from "../../../../node_modules/@lion/button/index.js"; import {SlotMixin} from "../../../../node_modules/@lion/core/src/SlotMixin.js"; import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget"; import {Et2Widget} from "../Et2Widget"; export class Et2Button extends Et2InputWidget(Et2Widget(SlotMixin(LionButton))) { protected _created_icon_node : HTMLImageElement; protected clicked : boolean = false; private image : string; static get styles() { return [ ...super.styles, css` :host { padding: 1px 8px; /* These should probably come from somewhere else */ border-radius: 3px; background-color: #e6e6e6; } :host([readonly]) { display: none; } /* Set size for icon */ ::slotted([slot="icon"]) { width: 20px; padding-right: 3px; }`, ]; } static get properties() { return { ...super.properties, image: {type: String} } } get slots() { return { ...super.slots, icon: () => { return document.createElement("img"); } } } constructor() { super(); // Property default values this.image = ''; // Do not add icon here, no children can be added in constructor // Define a default click handler // If a different one gets set via attribute, it will be used instead this.onclick = (typeof this.onclick === "function") ? this.onclick : () => { return this.getInstanceManager().submit(); }; } connectedCallback() { super.connectedCallback(); //this.classList.add("et2_button") if(this.image) { this._iconNode.src = egw.image(this.image); } } _handleClick(event : MouseEvent) : boolean { // ignore click on readonly button if(this.disabled || this.readonly) { return false; } this.clicked = true; // Cancel buttons don't trigger the close confirmation prompt if(this.classList.contains("et2_button_cancel")) { this.getInstanceManager()?.skip_close_prompt(); } if(!super._handleClick(event)) { this.clicked = false; return false; } this.clicked = false; this.getInstanceManager()?.skip_close_prompt(false); return true; } render() { if(this.readonly) { return ''; } return html`
`; } get _iconNode() : HTMLImageElement { return