@ribajs/bs4
Version:
Bootstrap 4 module for Riba.js
297 lines • 20.6 kB
JavaScript
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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