mirror of
				https://github.com/twbs/bootstrap.git
				synced 2025-10-30 00:05:32 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			184 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*!
 | |
|   * 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
 |