2 import Util from './util'
5 * --------------------------------------------------------------------------
6 * Bootstrap (v4.1.3): alert.js
7 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
8 * --------------------------------------------------------------------------
11 const Alert = (($) => {
13 * ------------------------------------------------------------------------
15 * ------------------------------------------------------------------------
19 const VERSION = '4.1.3'
20 const DATA_KEY = 'bs.alert'
21 const EVENT_KEY = `.${DATA_KEY}`
22 const DATA_API_KEY = '.data-api'
23 const JQUERY_NO_CONFLICT = $.fn[NAME]
26 DISMISS : '[data-dismiss="alert"]'
30 CLOSE : `close${EVENT_KEY}`,
31 CLOSED : `closed${EVENT_KEY}`,
32 CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
42 * ------------------------------------------------------------------------
44 * ------------------------------------------------------------------------
48 constructor(element) {
49 this._element = element
54 static get VERSION() {
61 let rootElement = this._element
63 rootElement = this._getRootElement(element)
66 const customEvent = this._triggerCloseEvent(rootElement)
68 if (customEvent.isDefaultPrevented()) {
72 this._removeElement(rootElement)
76 $.removeData(this._element, DATA_KEY)
82 _getRootElement(element) {
83 const selector = Util.getSelectorFromElement(element)
87 parent = document.querySelector(selector)
91 parent = $(element).closest(`.${ClassName.ALERT}`)[0]
97 _triggerCloseEvent(element) {
98 const closeEvent = $.Event(Event.CLOSE)
100 $(element).trigger(closeEvent)
104 _removeElement(element) {
105 $(element).removeClass(ClassName.SHOW)
107 if (!$(element).hasClass(ClassName.FADE)) {
108 this._destroyElement(element)
112 const transitionDuration = Util.getTransitionDurationFromElement(element)
115 .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))
116 .emulateTransitionEnd(transitionDuration)
119 _destroyElement(element) {
122 .trigger(Event.CLOSED)
128 static _jQueryInterface(config) {
129 return this.each(function () {
130 const $element = $(this)
131 let data = $element.data(DATA_KEY)
134 data = new Alert(this)
135 $element.data(DATA_KEY, data)
138 if (config === 'close') {
144 static _handleDismiss(alertInstance) {
145 return function (event) {
147 event.preventDefault()
150 alertInstance.close(this)
156 * ------------------------------------------------------------------------
157 * Data Api implementation
158 * ------------------------------------------------------------------------
162 Event.CLICK_DATA_API,
164 Alert._handleDismiss(new Alert())
168 * ------------------------------------------------------------------------
170 * ------------------------------------------------------------------------
173 $.fn[NAME] = Alert._jQueryInterface
174 $.fn[NAME].Constructor = Alert
175 $.fn[NAME].noConflict = function () {
176 $.fn[NAME] = JQUERY_NO_CONFLICT
177 return Alert._jQueryInterface