UNPKG

@ribajs/bs4

Version:

Bootstrap 4 module for Riba.js

106 lines (89 loc) 2.6 kB
import { Component, TemplateFunction, ScopeBase } from "@ribajs/core"; interface Scope extends ScopeBase { animationClass: string; onClick: Bs4ButtonComponent["onClick"]; } export class Bs4ButtonComponent extends Component { public static tagName = "bs4-button"; protected autobind = true; static get observedAttributes(): string[] { return ["animation-class"]; } public scope: Scope = { animationClass: "btn-animation-start", onClick: this.onClick.bind(this), }; constructor() { super(); } public onClick() { this.startAnimation(); } protected connectedCallback() { super.connectedCallback(); this.init(Bs4ButtonComponent.observedAttributes); } protected startAnimation() { this.classList.add(this.scope.animationClass); } protected onStartAnimation() { // } protected onEndAnimation() { setTimeout(() => { this.classList.remove(this.scope.animationClass); }); } protected async init(observedAttributes: string[]) { return super.init(observedAttributes).then((view) => { this.onStartAnimation = this.onStartAnimation.bind(this); this.addEventListener( "webkitAnimationStart" as "animationstart", this.onStartAnimation, ); this.addEventListener("animationstart", this.onStartAnimation); this.onEndAnimation = this.onEndAnimation.bind(this); this.addEventListener( "webkitAnimationEnd" as "animationend", this.onEndAnimation, ); this.addEventListener("animationend", this.onEndAnimation); this.addEventListener("click", this.scope.onClick); return view; }); } protected requiredAttributes(): string[] { return []; } protected parsedAttributeChangedCallback( attributeName: string, oldValue: any, newValue: any, namespace: string | null, ) { super.parsedAttributeChangedCallback( attributeName, oldValue, newValue, namespace, ); } // deconstruction protected disconnectedCallback() { super.disconnectedCallback(); this.removeEventListener( "webkitAnimationStart" as "animationstart", this.onStartAnimation, ); this.removeEventListener("animationstart", this.onStartAnimation); this.removeEventListener( "webkitAnimationEnd" as "animationend", this.onEndAnimation, ); this.removeEventListener("animationend", this.onEndAnimation); this.removeEventListener("click", this.scope.onClick); } protected template(): ReturnType<TemplateFunction> { return null; } }