UNPKG

@ribajs/bs4

Version:

Bootstrap 4 module for Riba.js

297 lines 20.6 kB
import { handleizeFormatter, TemplatesComponent, } from "@ribajs/core"; import templateHorizontal from "./bs4-tabs-horizontal.component.html?raw"; import templateVertical from "./bs4-tabs-vertical.component.html?raw"; import { hasChildNodesTrim } from "@ribajs/utils/src/dom.js"; import { debounce } from "@ribajs/utils/src/control"; const handleize = handleizeFormatter.read; export class Bs4TabsComponent extends TemplatesComponent { static tagName = "bs4-tabs"; templateAttributes = [ { name: "title", required: true, }, { name: "handle", required: false, }, { name: "type", required: false, }, { name: "active", required: false, }, { name: "index", required: false, }, ]; scope = { items: new Array(), activate: this.activate, deactivate: this.deactivate, deactivateAll: this.deactivateAll, optionTabsAutoHeight: false, optionTabsAngle: "horizontal", }; tabs; tabPanes; scrollable; static get observedAttributes() { return [ "option-tabs-auto-height", "option-tabs-angle", "tab-0-title", "tab-0-content", "tab-0-handle", "tab-1-title", "tab-1-content", "tab-1-handle", "tab-2-title", "tab-2-content", "tab-2-handle", "tab-3-title", "tab-3-content", "tab-3-handle", "tab-4-title", "tab-4-content", "tab-4-handle", "tab-5-title", "tab-5-content", "tab-5-handle", "tab-6-title", "tab-6-content", "tab-6-handle", "tab-7-title", "tab-7-content", "tab-7-handle", "tab-8-title", "tab-8-content", "tab-8-handle", "tab-9-title", "tab-9-content", "tab-9-handle", "tab-10-title", "tab-10-content", "tab-10-handle", "tab-11-title", "tab-11-content", "tab-11-handle", "tab-12-title", "tab-12-content", "tab-12-handle", "tab-13-title", "tab-13-content", "tab-13-handle", "tab-14-title", "tab-14-content", "tab-14-handle", "tab-15-title", "tab-15-content", "tab-15-handle", "tab-16-title", "tab-16-content", "tab-16-handle", "tab-17-title", "tab-17-content", "tab-17-handle", "tab-18-title", "tab-18-content", "tab-18-handle", "tab-19-title", "tab-19-content", "tab-19-handle", ]; } constructor() { super(); } _onResize() { this.setHeight(); } onResize = debounce(this._onResize.bind(this)); setHeight() { if (this.scope.optionTabsAutoHeight) { return; } this.setElements(); let highest = 0; if (!this.tabPanes) { return; } this.tabPanes.forEach((tabPane) => { if (!tabPane.style) { return; } tabPane.style.height = "auto"; tabPane.style.display = "block"; const height = tabPane.offsetHeight || 0; if (height > highest) { highest = height; } }); this.tabPanes.forEach((tabPane) => { if (!tabPane.style) { return; } tabPane.style.display = ""; if (highest > 0) { tabPane.style.height = highest + "px"; } }); } deactivateAll() { for (let index = 0; index < this.scope.items.length; index++) { const tab = this.scope.items[index]; this.deactivate(tab); } } deactivate(tab) { tab.active = false; const firstTabContentChild = this.getTabContentChildByIndex(tab.index); if (firstTabContentChild) { this.triggerVisibilityChangedForElement(firstTabContentChild, tab.active); } } activate(tab) { this.deactivateAll(); tab.active = true; const firstTabContentChild = this.getTabContentChildByIndex(tab.index); if (firstTabContentChild) { this.triggerVisibilityChangedForElement(firstTabContentChild, tab.active); } } activateFirstTab() { if (this.scope.items.length > 0) { this.activate(this.scope.items[0]); } } getTabContentChildByIndex(index) { return (this.querySelector(`.tab-content .tab-pane:nth-child(${index + 1}) > *`) || undefined); } triggerVisibilityChangedForElement(element, visible) { setTimeout(() => { element.dispatchEvent(new CustomEvent("visibility-changed", { detail: { visible } })); }, 200); } connectedCallback() { super.connectedCallback(); this.initTabs(); this.activateFirstTab(); this.init(Bs4TabsComponent.observedAttributes); } disconnectedCallback() { if (this.tabs) { this.tabs.forEach((tab) => { tab.removeEventListener("shown.bs.tab", this.onTabShownEventHandler); }); } window.removeEventListener("resize", this.onResize); } setElements() { this.tabs = this.querySelectorAll('[role="tab"]'); this.tabPanes = this.querySelectorAll('[role="tabpanel"]'); this.scrollable = this.querySelector("[scrollable]"); } resizeTabsArray(newSize) { while (newSize > this.scope.items.length) { this.scope.items.push({ handle: "", title: "", content: "", active: false, index: this.scope.items.length - 1, }); } } onTabShownEventHandler(event) { const curTab = (event.target || event.srcElement); if (!curTab) { return; } if (this.scrollable) { const tabScrollPosition = curTab.getBoundingClientRect(); const scrollLeftTo = this.scrollable.scrollLeft || 0 + tabScrollPosition.left; this.scrollable.scrollLeft = scrollLeftTo; } } initTabs() { this.setElements(); if (this.tabs) { this.tabs.forEach((tab) => { tab.removeEventListener("shown.bs.tab", this.onTabShownEventHandler); tab.addEventListener("shown.bs.tab", this.onTabShownEventHandler); }); } if (this.scope.optionTabsAutoHeight) { window.removeEventListener("resize", this.onResize); window.addEventListener("resize", this.onResize, { passive: true }); this.setHeight(); } } addTabByAttribute(attributeName, newValue) { const index = Number(attributeName.replace(/[^0-9]/g, "")); if (index >= this.scope.items.length) { this.resizeTabsArray(index + 1); } this.scope.items[index].index = index; if (attributeName.endsWith("Content")) { this.scope.items[index].content = newValue; } if (attributeName.endsWith("Title")) { this.scope.items[index].title = newValue; this.scope.items[index].handle = this.scope.items[index].handle || handleize(this.scope.items[index].title); } if (attributeName.endsWith("Handle")) { this.scope.items[index].handle = newValue; } if (this.scope.items.length > 0 && this.scope.items[0] && this.scope.items[0].content.length > 0 && this.scope.items[0].title.length > 0 && this.scope.items[0].handle.length > 0) { this.activateFirstTab(); } } transformTemplateAttributes(attributes, index) { attributes = super.transformTemplateAttributes(attributes, index); if (!attributes.handle && attributes.title) { attributes.handle = handleize(attributes.title); } attributes.active = attributes.active || false; return attributes; } parsedAttributeChangedCallback(attributeName, oldValue, newValue, namespace) { super.parsedAttributeChangedCallback(attributeName, oldValue, newValue, namespace); if (attributeName.startsWith("tab")) { this.addTabByAttribute(attributeName, newValue); this.initTabs(); } } async afterBind() { setTimeout(() => { if (this.scope.optionTabsAutoHeight) { this.setHeight(); } }, 500); await super.afterBind(); } template() { if (!hasChildNodesTrim(this) || this.hasOnlyTemplateChilds()) { if (this.scope.optionTabsAngle === "horizontal") { return templateHorizontal; } else { return templateVertical; } } else { return null; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnM0LXRhYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYnM0LXRhYnMvYnM0LXRhYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsa0JBQWtCLEdBRW5CLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sa0JBQWtCLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxnQkFBZ0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckQsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBbUIsQ0FBQztBQW9CekQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGtCQUFrQjtJQUMvQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUV6QixrQkFBa0IsR0FBRztRQUM3QjtZQUNFLElBQUksRUFBRSxPQUFPO1lBQ2IsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsS0FBSztTQUNoQjtRQUNEO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUUsS0FBSztTQUNoQjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsS0FBSztTQUNoQjtRQUNEO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixRQUFRLEVBQUUsS0FBSztTQUNoQjtLQUNGLENBQUM7SUFFSyxLQUFLLEdBQVU7UUFDcEIsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFPO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxh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