9
import Util from './util'
16
const VERSION = '4.6.1'
17
const DATA_KEY = 'bs.alert'
18
const EVENT_KEY = `.${DATA_KEY}`
19
const DATA_API_KEY = '.data-api'
20
const JQUERY_NO_CONFLICT = $.fn[NAME]
22
const CLASS_NAME_ALERT = 'alert'
23
const CLASS_NAME_FADE = 'fade'
24
const CLASS_NAME_SHOW = 'show'
26
const EVENT_CLOSE = `close${EVENT_KEY}`
27
const EVENT_CLOSED = `closed${EVENT_KEY}`
28
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
30
const SELECTOR_DISMISS = '[data-dismiss="alert"]'
37
constructor(element) {
38
this._element = element
42
static get VERSION() {
48
let rootElement = this._element
50
rootElement = this._getRootElement(element)
53
const customEvent = this._triggerCloseEvent(rootElement)
55
if (customEvent.isDefaultPrevented()) {
59
this._removeElement(rootElement)
63
$.removeData(this._element, DATA_KEY)
68
_getRootElement(element) {
69
const selector = Util.getSelectorFromElement(element)
73
parent = document.querySelector(selector)
77
parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]
83
_triggerCloseEvent(element) {
84
const closeEvent = $.Event(EVENT_CLOSE)
86
$(element).trigger(closeEvent)
90
_removeElement(element) {
91
$(element).removeClass(CLASS_NAME_SHOW)
93
if (!$(element).hasClass(CLASS_NAME_FADE)) {
94
this._destroyElement(element)
98
const transitionDuration = Util.getTransitionDurationFromElement(element)
101
.one(Util.TRANSITION_END, event => this._destroyElement(element, event))
102
.emulateTransitionEnd(transitionDuration)
105
_destroyElement(element) {
108
.trigger(EVENT_CLOSED)
113
static _jQueryInterface(config) {
114
return this.each(function () {
115
const $element = $(this)
116
let data = $element.data(DATA_KEY)
119
data = new Alert(this)
120
$element.data(DATA_KEY, data)
123
if (config === 'close') {
129
static _handleDismiss(alertInstance) {
130
return function (event) {
132
event.preventDefault()
135
alertInstance.close(this)
145
EVENT_CLICK_DATA_API,
147
Alert._handleDismiss(new Alert())
154
$.fn[NAME] = Alert._jQueryInterface
155
$.fn[NAME].Constructor = Alert
156
$.fn[NAME].noConflict = () => {
157
$.fn[NAME] = JQUERY_NO_CONFLICT
158
return Alert._jQueryInterface