All files / src alert.js

100% Statements 27/27
100% Branches 9/9
100% Functions 6/6
100% Lines 26/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                                1x 1x 1x   1x 1x 1x 1x                 51x         6x   6x 1x     5x   5x 5x         5x 5x 5x         5x 5x   5x 1x     4x 2x     2x                 1x           1x      
/**
 * --------------------------------------------------------------------------
 * Bootstrap (v5.2.3): alert.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 * --------------------------------------------------------------------------
 */
 
import { defineJQueryPlugin } from './util/index'
import EventHandler from './dom/event-handler'
import BaseComponent from './base-component'
import { enableDismissTrigger } from './util/component-functions'
 
/**
 * Constants
 */
 
const NAME = 'alert'
const DATA_KEY = 'bs.alert'
const EVENT_KEY = `.${DATA_KEY}`
 
const EVENT_CLOSE = `close${EVENT_KEY}`
const EVENT_CLOSED = `closed${EVENT_KEY}`
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
 
/**
 * Class definition
 */
 
class Alert extends BaseComponent {
  // Getters
  static get NAME() {
    return NAME
  }
 
  // Public
  close() {
    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)
 
    if (closeEvent.defaultPrevented) {
      return
    }
 
    this._element.classList.remove(CLASS_NAME_SHOW)
 
    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)
    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)
  }
 
  // Private
  _destroyElement() {
    this._element.remove()
    EventHandler.trigger(this._element, EVENT_CLOSED)
    this.dispose()
  }
 
  // Static
  static jQueryInterface(config) {
    return this.each(function () {
      const data = Alert.getOrCreateInstance(this)
 
      if (typeof config !== 'string') {
        return
      }
 
      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
        throw new TypeError(`No method named "${config}"`)
      }
 
      data[config](this)
    })
  }
}
 
/**
 * Data API implementation
 */
 
enableDismissTrigger(Alert, 'close')
 
/**
 * jQuery
 */
 
defineJQueryPlugin(Alert)
 
export default Alert