b-components-js
Version:
Generate Bootstrap components through JavaScript
113 lines (108 loc) • 3.73 kB
JavaScript
/*!
* Name: b-components-js
* Version: 0.0.2
* Description: Generate Bootstrap components through JavaScript
* Copyright (c) 2020 - 2022 ZhangChengLin
* Licenses: MIT
* GitHub: https://github.com/ZhangChengLin/b-components
*/
import { Offcanvas } from 'bootstrap';
const isNull = (value) => value === null;
const isEmpty = (value) => typeof value === 'string' && value === '';
const bsDismissBtn = (dismissType, whiteVariant = false) => {
const btn = document.createElement('button');
btn.className = whiteVariant ? 'btn-close btn-close-white' : 'btn-close';
btn.type = 'button';
btn.dataset.bsDismiss = dismissType;
btn.ariaLabel = 'Close';
return btn
};
const getTimeString = () => Date.now().toString();
const offcanvasEvents = (_offcanvas, eventsType, eventsFun) => {
switch (eventsType) {
case 'show':
_offcanvas.addEventListener('show.bs.offcanvas', () => eventsFun());
break
case 'shown':
_offcanvas.addEventListener('shown.bs.offcanvas', () => eventsFun());
break
case 'hide':
_offcanvas.addEventListener('hide.bs.offcanvas', () => eventsFun());
break
case 'hidden':
_offcanvas.addEventListener('hidden.bs.offcanvas', () => eventsFun());
break
default:
throw 'eventsType error'
}
};
const removeOffcanvas = (_offcanvas) => {
_offcanvas.addEventListener('hidden.bs.offcanvas', () => {
const x = Offcanvas.getInstance(_offcanvas);
x.dispose();
setTimeout(() => {
_offcanvas.remove();
}, 3e3);
});
};
const offcanvas = (Placement, offcanvasId) => {
const _offcanvas = document.createElement('div');
Placement = Placement ?? 'start';
switch (Placement) {
case 'start':
case 'top':
case 'end':
case 'bottom':
break
default:
throw 'Placement error'
}
_offcanvas.className = `offcanvas offcanvas-${Placement}`;
_offcanvas.id = offcanvasId;
_offcanvas.tabIndex = -1;
_offcanvas.role = 'dialog';
_offcanvas.setAttribute('aria-labelledby', 'offcanvasTitleLabel');
return _offcanvas
};
const header = (headerNodeElement) => {
if (isNull(headerNodeElement) || isEmpty(headerNodeElement)) {
return ''
}
const _header = document.createElement('div');
const _title = document.createElement('h5');
_header.className = 'offcanvas-header';
_title.className = 'offcanvas-title';
_title.id = 'offcanvasTitleLabel';
headerNodeElement instanceof Function
? _title.append(headerNodeElement())
: (headerNodeElement instanceof HTMLElement
? _title.append(headerNodeElement)
: _title.innerHTML = headerNodeElement);
_header.append(_title, bsDismissBtn('offcanvas'));
return _header
};
const body = (bodyNodeElement) => {
const _body = document.createElement('div');
_body.className = 'offcanvas-body';
bodyNodeElement instanceof Function
? _body.append(bodyNodeElement())
: (bodyNodeElement instanceof HTMLElement
? _body.append(bodyNodeElement)
: _body.innerHTML = bodyNodeElement);
return _body
};
const bOffcanvas = (headerNodeElement, bodyNodeElement, Placement, Options, EventsType, EventsFunction) => {
const offcanvasId = 'offcanvasId_' + getTimeString();
const _offcanvas = offcanvas(Placement, offcanvasId);
const _header = header(headerNodeElement);
const _body = body(bodyNodeElement);
_offcanvas.append(_header, _body);
document.body.append(_offcanvas);
EventsType && EventsFunction ? offcanvasEvents(_offcanvas, EventsType, EventsFunction) : '';
const xxx = Options ? new Offcanvas(_offcanvas, Options) : new Offcanvas(_offcanvas);
xxx.show();
removeOffcanvas(_offcanvas);
return offcanvasId
};
export { bOffcanvas };
//# sourceMappingURL=bOffcanvas.esm.js.map