talos

Форк
0
161 строка · 3.1 Кб
1
/**
2
 * --------------------------------------------------------------------------
3
 * Bootstrap (v4.6.1): alert.js
4
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
 * --------------------------------------------------------------------------
6
 */
7

8
import $ from 'jquery'
9
import Util from './util'
10

11
/**
12
 * Constants
13
 */
14

15
const NAME = 'alert'
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]
21

22
const CLASS_NAME_ALERT = 'alert'
23
const CLASS_NAME_FADE = 'fade'
24
const CLASS_NAME_SHOW = 'show'
25

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}`
29

30
const SELECTOR_DISMISS = '[data-dismiss="alert"]'
31

32
/**
33
 * Class definition
34
 */
35

36
class Alert {
37
  constructor(element) {
38
    this._element = element
39
  }
40

41
  // Getters
42
  static get VERSION() {
43
    return VERSION
44
  }
45

46
  // Public
47
  close(element) {
48
    let rootElement = this._element
49
    if (element) {
50
      rootElement = this._getRootElement(element)
51
    }
52

53
    const customEvent = this._triggerCloseEvent(rootElement)
54

55
    if (customEvent.isDefaultPrevented()) {
56
      return
57
    }
58

59
    this._removeElement(rootElement)
60
  }
61

62
  dispose() {
63
    $.removeData(this._element, DATA_KEY)
64
    this._element = null
65
  }
66

67
  // Private
68
  _getRootElement(element) {
69
    const selector = Util.getSelectorFromElement(element)
70
    let parent = false
71

72
    if (selector) {
73
      parent = document.querySelector(selector)
74
    }
75

76
    if (!parent) {
77
      parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]
78
    }
79

80
    return parent
81
  }
82

83
  _triggerCloseEvent(element) {
84
    const closeEvent = $.Event(EVENT_CLOSE)
85

86
    $(element).trigger(closeEvent)
87
    return closeEvent
88
  }
89

90
  _removeElement(element) {
91
    $(element).removeClass(CLASS_NAME_SHOW)
92

93
    if (!$(element).hasClass(CLASS_NAME_FADE)) {
94
      this._destroyElement(element)
95
      return
96
    }
97

98
    const transitionDuration = Util.getTransitionDurationFromElement(element)
99

100
    $(element)
101
      .one(Util.TRANSITION_END, event => this._destroyElement(element, event))
102
      .emulateTransitionEnd(transitionDuration)
103
  }
104

105
  _destroyElement(element) {
106
    $(element)
107
      .detach()
108
      .trigger(EVENT_CLOSED)
109
      .remove()
110
  }
111

112
  // Static
113
  static _jQueryInterface(config) {
114
    return this.each(function () {
115
      const $element = $(this)
116
      let data = $element.data(DATA_KEY)
117

118
      if (!data) {
119
        data = new Alert(this)
120
        $element.data(DATA_KEY, data)
121
      }
122

123
      if (config === 'close') {
124
        data[config](this)
125
      }
126
    })
127
  }
128

129
  static _handleDismiss(alertInstance) {
130
    return function (event) {
131
      if (event) {
132
        event.preventDefault()
133
      }
134

135
      alertInstance.close(this)
136
    }
137
  }
138
}
139

140
/**
141
 * Data API implementation
142
 */
143

144
$(document).on(
145
  EVENT_CLICK_DATA_API,
146
  SELECTOR_DISMISS,
147
  Alert._handleDismiss(new Alert())
148
)
149

150
/**
151
 * jQuery
152
 */
153

154
$.fn[NAME] = Alert._jQueryInterface
155
$.fn[NAME].Constructor = Alert
156
$.fn[NAME].noConflict = () => {
157
  $.fn[NAME] = JQUERY_NO_CONFLICT
158
  return Alert._jQueryInterface
159
}
160

161
export default Alert
162

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.