@ribajs/bs4
Version:
Bootstrap 4 module for Riba.js
63 lines • 6.08 kB
JavaScript
import { Binder } from "@ribajs/core";
import { EventDispatcher } from "@ribajs/events";
import { TOGGLE_BUTTON, TOGGLE_ATTRIBUTE } from "../constants/index.js";
export class ToggleAttributeBinder extends Binder {
static key = "bs4-toggle-attribute-*";
toggleButtonEvents;
state = "off";
_triggerState() {
this.toggleButtonEvents?.trigger(TOGGLE_BUTTON.eventNames.state, this.state);
}
triggerState = this._triggerState.bind(this);
_onToggle() {
this.toggle.bind(this)(this.el);
}
onToggle = this._onToggle.bind(this);
toggle(el) {
if (this.state === "removed") {
this.add.bind(this)(el);
}
else {
this.remove.bind(this)(el);
}
}
remove(el) {
const attributeName = this.args[0];
el.removeAttribute(attributeName);
this.state = "removed";
el.dispatchEvent(new CustomEvent(TOGGLE_ATTRIBUTE.elEventNames.removed, {
detail: { attributeName },
}));
this.triggerState();
}
add(el) {
const attributeName = this.args[0];
el.setAttribute(attributeName, attributeName);
this.state = "added";
el.dispatchEvent(new CustomEvent(TOGGLE_ATTRIBUTE.elEventNames.added, {
detail: { attributeName },
}));
this.triggerState();
}
bind(el) {
const attributeName = this.args[0];
this.state = el.hasAttribute(attributeName) ? "added" : "removed";
}
unbind() {
this.toggleButtonEvents?.off(TOGGLE_BUTTON.eventNames.toggle, this.onToggle, this);
this.toggleButtonEvents?.off(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
}
routine(el, newId) {
const oldId = this._getValue(el);
if (oldId && this.toggleButtonEvents) {
this.toggleButtonEvents.off(TOGGLE_BUTTON.eventNames.toggle, this.onToggle, this);
this.toggleButtonEvents.off(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
}
if (!this.toggleButtonEvents) {
this.toggleButtonEvents = new EventDispatcher(TOGGLE_BUTTON.nsPrefix + newId);
this.toggleButtonEvents.on(TOGGLE_BUTTON.eventNames.toggle, this.onToggle, this);
this.toggleButtonEvents.on(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWF0dHJpYnV0ZS5iaW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluZGVycy90b2dnbGUtYXR0cmlidXRlLmJpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTeEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLE1BQWlDO0lBQzFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsd0JBQXdCLENBQUM7SUFFOUIsa0JBQWtCLENBQW1CO0lBQ3JDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFZCxhQUFhO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQzlCLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUM5QixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyQyxNQUFNLENBQUMsRUFBcUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxD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