|
|
/*! * Bootstrap base-component.js v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js')) : typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Base = factory(global.Data, global.EventHandler)); })(this, (function (Data, EventHandler) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const Data__default = /*#__PURE__*/_interopDefaultLegacy(Data); const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
/** * -------------------------------------------------------------------------- * Bootstrap (v5.1.3): util/index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- */ const MILLISECONDS_MULTIPLIER = 1000; const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
const getTransitionDurationFromElement = element => { if (!element) { return 0; } // Get transition-duration of the element
let { transitionDuration, transitionDelay } = window.getComputedStyle(element); const floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; };
const triggerTransitionEnd = element => { element.dispatchEvent(new Event(TRANSITION_END)); };
const isElement = obj => { if (!obj || typeof obj !== 'object') { return false; }
if (typeof obj.jquery !== 'undefined') { obj = obj[0]; }
return typeof obj.nodeType !== 'undefined'; };
const getElement = obj => { if (isElement(obj)) { // it's a jQuery object or a node element
return obj.jquery ? obj[0] : obj; }
if (typeof obj === 'string' && obj.length > 0) { return document.querySelector(obj); }
return null; };
const execute = callback => { if (typeof callback === 'function') { callback(); } };
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { if (!waitForTransition) { execute(callback); return; }
const durationPadding = 5; const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; let called = false;
const handler = ({ target }) => { if (target !== transitionElement) { return; }
called = true; transitionElement.removeEventListener(TRANSITION_END, handler); execute(callback); };
transitionElement.addEventListener(TRANSITION_END, handler); setTimeout(() => { if (!called) { triggerTransitionEnd(transitionElement); } }, emulatedDuration); };
/** * -------------------------------------------------------------------------- * Bootstrap (v5.1.3): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- */ /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */
const VERSION = '5.1.3';
class BaseComponent { constructor(element) { element = getElement(element);
if (!element) { return; }
this._element = element; Data__default.default.set(this._element, this.constructor.DATA_KEY, this); }
dispose() { Data__default.default.remove(this._element, this.constructor.DATA_KEY); EventHandler__default.default.off(this._element, this.constructor.EVENT_KEY); Object.getOwnPropertyNames(this).forEach(propertyName => { this[propertyName] = null; }); }
_queueCallback(callback, element, isAnimated = true) { executeAfterTransition(callback, element, isAnimated); } /** Static */
static getInstance(element) { return Data__default.default.get(getElement(element), this.DATA_KEY); }
static getOrCreateInstance(element, config = {}) { return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); }
static get VERSION() { return VERSION; }
static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!'); }
static get DATA_KEY() { return `bs.${this.NAME}`; }
static get EVENT_KEY() { return `.${this.DATA_KEY}`; }
}
return BaseComponent;
})); //# sourceMappingURL=base-component.js.map
|