@ribajs/bs4
Version:
Bootstrap 4 module for Riba.js
274 lines • 20.9 kB
JavaScript
import { Component } from "@ribajs/core";
import { EventDispatcher } from "@ribajs/events";
import { getViewportDimensions, hasChildNodesTrim, } from "@ribajs/utils/src/dom.js";
import { TOGGLE_BUTTON } from "../../constants/index.js";
import { debounce } from "@ribajs/utils/src/control";
export class Bs4SidebarComponent extends Component {
static tagName = "bs4-sidebar";
computedStyle;
autobind = true;
static get observedAttributes() {
return [
"id",
"container-selector",
"position",
"width",
"auto-show-on-wider-than",
"auto-hide-on-slimmer-than",
"force-hide-on-location-pathnames",
"force-show-on-location-pathnames",
"overlay-on-slimmer-than",
"watch-new-page-ready-event",
];
}
eventDispatcher;
routerEvents = new EventDispatcher("main");
scope = {
containerSelector: undefined,
state: "hidden",
oldState: "hidden",
id: undefined,
width: "250px",
position: "left",
autoShowOnWiderThan: 1199,
autoHideOnSlimmerThan: 1200,
watchNewPageReadyEvent: true,
forceHideOnLocationPathnames: [],
forceShowOnLocationPathnames: [],
overlayOnSlimmerThan: 1200,
hide: this.hide,
show: this.show,
toggle: this.toggle,
};
constructor() {
super();
this.onEnvironmentChanges = this.onEnvironmentChanges.bind(this);
}
setState(state) {
this.scope.oldState = `${this.scope.state}`;
this.scope.state = state;
this.onStateChange();
}
getState() {
return this.scope.state;
}
getShowMode() {
let mode;
const vw = getViewportDimensions().w;
if (vw < this.scope.overlayOnSlimmerThan) {
mode = ("overlay-" + this.scope.position);
}
else {
mode = ("side-" + this.scope.position);
}
return mode;
}
hide() {
this.setState("hidden");
}
show() {
const state = this.getShowMode();
this.setState(state);
}
toggle() {
if (this.scope.state === "hidden") {
this.show();
}
else {
this.hide();
}
}
connectedCallback() {
super.connectedCallback();
this.init(Bs4SidebarComponent.observedAttributes);
this.computedStyle = window.getComputedStyle(this);
window.addEventListener("resize", this.onEnvironmentChanges, {
passive: true,
});
this.onEnvironmentChanges();
}
initToggleButtonEventDispatcher() {
if (this.eventDispatcher) {
this.eventDispatcher.off(TOGGLE_BUTTON.eventNames.toggle, this.toggle, this);
this.eventDispatcher.off(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
}
this.eventDispatcher = new EventDispatcher(TOGGLE_BUTTON.nsPrefix + this.scope.id);
this.eventDispatcher.on(TOGGLE_BUTTON.eventNames.toggle, this.toggle, this);
this.eventDispatcher.on(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
}
initRouterEventDispatcher() {
if (this.scope.watchNewPageReadyEvent) {
this.routerEvents.on("newPageReady", this.onEnvironmentChanges, this);
}
}
onHidden() {
this.setContainersStyle(this.scope.state);
const translateX = this.scope.position === "left" ? "-100%" : "100%";
this.setAttribute("style", `transform:translateX(${translateX});width:${this.scope.width};`);
}
onSide(state) {
this.setContainersStyle(state);
this.setAttribute("style", `transform:translateX(0);width:${this.scope.width};`);
}
onOverlay(state) {
this.setContainersStyle(state);
this.setAttribute("style", `transform:translateX(0);width:${this.scope.width};`);
}
triggerState() {
this.eventDispatcher?.trigger("state", this.scope.state);
}
onStateChange() {
switch (this.scope.state) {
case "side-left":
case "side-right":
this.onSide(this.scope.state);
break;
case "overlay-left":
case "overlay-right":
this.onOverlay(this.scope.state);
break;
default:
this.onHidden();
break;
}
if (this.eventDispatcher) {
this.eventDispatcher.trigger(TOGGLE_BUTTON.eventNames.toggled, this.scope.state);
}
}
get width() {
return this.offsetWidth ? this.offsetWidth + "px" : this.scope.width;
}
setStateByEnvironment() {
if (this.scope.forceHideOnLocationPathnames.includes(window.location.pathname)) {
return this.hide();
}
if (this.scope.forceShowOnLocationPathnames.includes(window.location.pathname)) {
return this.show();
}
const vw = getViewportDimensions().w;
if (this.scope.autoHideOnSlimmerThan > -1 &&
vw < this.scope.autoHideOnSlimmerThan) {
return this.hide();
}
if (this.scope.autoShowOnWiderThan > -1 &&
vw > this.scope.autoShowOnWiderThan) {
return this.show();
}
}
_onEnvironmentChanges() {
this.setStateByEnvironment();
}
onEnvironmentChanges = debounce(this._onEnvironmentChanges.bind(this));
getContainers() {
return this.scope.containerSelector
? document.querySelectorAll(this.scope.containerSelector)
: undefined;
}
initContainers(state) {
this.setContainersStyle(state);
}
setContainersStyle(state) {
const containers = this.getContainers() || [];
if (containers) {
for (let i = 0; i < containers.length; i++) {
const container = containers[i];
this.setContainerStyle(container, state);
}
}
}
setContainerStyle(container, state) {
const currStyle = container.style;
if (state) {
const width = this.width;
const conStyle = window.getComputedStyle(container);
switch (state) {
case "side-left":
switch (conStyle.position) {
case "fixed":
currStyle.left = width;
break;
default:
currStyle.marginLeft = width;
break;
}
break;
case "side-right":
switch (conStyle.position) {
case "fixed":
currStyle.right = width;
break;
default:
currStyle.marginRight = width;
break;
}
break;
case "hidden":
switch (this.scope.oldState) {
case "side-left":
switch (conStyle.position) {
case "fixed":
currStyle.left = "0";
break;
default:
currStyle.marginLeft = "0";
break;
}
break;
case "side-right":
switch (conStyle.position) {
case "fixed":
currStyle.right = "0";
break;
default:
currStyle.marginRight = "0";
break;
}
break;
default:
break;
}
default:
break;
}
}
container.style.transition = this.computedStyle
? this.computedStyle.transition
: "";
}
async beforeBind() {
await super.beforeBind();
this.scope.oldState = this.getShowMode();
this.initRouterEventDispatcher();
return this.onEnvironmentChanges();
}
async afterBind() {
this.onEnvironmentChanges();
await super.afterBind();
}
requiredAttributes() {
return ["id"];
}
parsedAttributeChangedCallback(attributeName, oldValue, newValue, namespace) {
super.parsedAttributeChangedCallback(attributeName, oldValue, newValue, namespace);
if (attributeName === "containerSelector") {
this.initContainers(this.scope.state);
}
if (attributeName === "id") {
this.initToggleButtonEventDispatcher();
}
}
disconnectedCallback() {
super.disconnectedCallback();
this.eventDispatcher?.off(TOGGLE_BUTTON.eventNames.init, this.triggerState, this);
this.eventDispatcher?.off(TOGGLE_BUTTON.eventNames.toggle, this.toggle, this);
this.routerEvents.off("newPageReady", this.onEnvironmentChanges, this);
window.removeEventListener("resize", this.onEnvironmentChanges, false);
}
template() {
if (!hasChildNodesTrim(this)) {
console.warn("No child elements found, this component as no template so you need to define your own as child of this component.");
}
return null;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnM0LXNpZGViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYnM0LXNpZGViYXIvYnM0LXNpZGViYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixHQUNsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNckQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFNBQVM7SUFDekMsTUFBTSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7SUFFNUIsYUFBYSxDQUF1QjtJQUVwQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRTFCLE1BQU0sS0FBSyxrQkFBa0I7UUFDM0IsT0FBTztZQUNMLElBQUk7WUFDSixvQkFBb0I7WUFDcEIsVUFBVTtZQUNWLE9BQU87WUFDUCx5QkFBeUI7WUFDekIsMkJBQTJCO1lBQzNCLGtDQUFrQztZQUNsQyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLDRCQUE0QjtTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FBbUI7SUFFbEMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlDLEtBQUssR0FBVTtRQUVwQixpQkFBaUIsRUFBRSxTQUFTO1FBQzVCLEtBQUssRUFBRSxRQUFRO1FBQ2YsUUFBUSxFQUFFLFFBQVE7UUFDbEIsRUFBRSxFQUFFLFNBQVM7UUFDYixLQUFLLEVBQUUsT0FBTztRQUdkLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLG1CQUFtQixFQUFFLElB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