123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import Util from './util'
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.0.0): alert.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * --------------------------------------------------------------------------
- */
- const Alert = (($) => {
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
- const NAME = 'alert'
- const VERSION = '4.0.0'
- const DATA_KEY = 'bs.alert'
- const EVENT_KEY = `.${DATA_KEY}`
- const DATA_API_KEY = '.data-api'
- const JQUERY_NO_CONFLICT = $.fn[NAME]
- const TRANSITION_DURATION = 150
- const Selector = {
- DISMISS : '[data-dismiss="alert"]'
- }
- const Event = {
- CLOSE : `close${EVENT_KEY}`,
- CLOSED : `closed${EVENT_KEY}`,
- CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
- }
- const ClassName = {
- ALERT : 'alert',
- FADE : 'fade',
- IN : 'in'
- }
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
- class Alert {
- constructor(element) {
- this._element = element
- }
- // getters
- static get VERSION() {
- return VERSION
- }
- // public
- close(element) {
- element = element || this._element
- let rootElement = this._getRootElement(element)
- let customEvent = this._triggerCloseEvent(rootElement)
- if (customEvent.isDefaultPrevented()) {
- return
- }
- this._removeElement(rootElement)
- }
- dispose() {
- $.removeData(this._element, DATA_KEY)
- this._element = null
- }
- // private
- _getRootElement(element) {
- let selector = Util.getSelectorFromElement(element)
- let parent = false
- if (selector) {
- parent = $(selector)[0]
- }
- if (!parent) {
- parent = $(element).closest(`.${ClassName.ALERT}`)[0]
- }
- return parent
- }
- _triggerCloseEvent(element) {
- let closeEvent = $.Event(Event.CLOSE)
- $(element).trigger(closeEvent)
- return closeEvent
- }
- _removeElement(element) {
- $(element).removeClass(ClassName.IN)
- if (!Util.supportsTransitionEnd() ||
- !$(element).hasClass(ClassName.FADE)) {
- this._destroyElement(element)
- return
- }
- $(element)
- .one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element))
- .emulateTransitionEnd(TRANSITION_DURATION)
- }
- _destroyElement(element) {
- $(element)
- .detach()
- .trigger(Event.CLOSED)
- .remove()
- }
- // static
- static _jQueryInterface(config) {
- return this.each(function () {
- let $element = $(this)
- let data = $element.data(DATA_KEY)
- if (!data) {
- data = new Alert(this)
- $element.data(DATA_KEY, data)
- }
- if (config === 'close') {
- data[config](this)
- }
- })
- }
- static _handleDismiss(alertInstance) {
- return function (event) {
- if (event) {
- event.preventDefault()
- }
- alertInstance.close(this)
- }
- }
- }
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
- $(document).on(
- Event.CLICK_DATA_API,
- Selector.DISMISS,
- Alert._handleDismiss(new Alert())
- )
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
- $.fn[NAME] = Alert._jQueryInterface
- $.fn[NAME].Constructor = Alert
- $.fn[NAME].noConflict = function () {
- $.fn[NAME] = JQUERY_NO_CONFLICT
- return Alert._jQueryInterface
- }
- return Alert
- })(jQuery)
- export default Alert
|