OSDN Git Service

Merge pull request #41 from Bytom/dev
[bytom/vapor.git] / tools / side_chain_tool / web / node_modules / bootstrap / js / src / alert.js
1 import $ from 'jquery'
2 import Util from './util'
3
4 /**
5  * --------------------------------------------------------------------------
6  * Bootstrap (v4.1.3): alert.js
7  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
8  * --------------------------------------------------------------------------
9  */
10
11 const Alert = (($) => {
12   /**
13    * ------------------------------------------------------------------------
14    * Constants
15    * ------------------------------------------------------------------------
16    */
17
18   const NAME                = 'alert'
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]
24
25   const Selector = {
26     DISMISS : '[data-dismiss="alert"]'
27   }
28
29   const Event = {
30     CLOSE          : `close${EVENT_KEY}`,
31     CLOSED         : `closed${EVENT_KEY}`,
32     CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`
33   }
34
35   const ClassName = {
36     ALERT : 'alert',
37     FADE  : 'fade',
38     SHOW  : 'show'
39   }
40
41   /**
42    * ------------------------------------------------------------------------
43    * Class Definition
44    * ------------------------------------------------------------------------
45    */
46
47   class Alert {
48     constructor(element) {
49       this._element = element
50     }
51
52     // Getters
53
54     static get VERSION() {
55       return VERSION
56     }
57
58     // Public
59
60     close(element) {
61       let rootElement = this._element
62       if (element) {
63         rootElement = this._getRootElement(element)
64       }
65
66       const customEvent = this._triggerCloseEvent(rootElement)
67
68       if (customEvent.isDefaultPrevented()) {
69         return
70       }
71
72       this._removeElement(rootElement)
73     }
74
75     dispose() {
76       $.removeData(this._element, DATA_KEY)
77       this._element = null
78     }
79
80     // Private
81
82     _getRootElement(element) {
83       const selector = Util.getSelectorFromElement(element)
84       let parent     = false
85
86       if (selector) {
87         parent = document.querySelector(selector)
88       }
89
90       if (!parent) {
91         parent = $(element).closest(`.${ClassName.ALERT}`)[0]
92       }
93
94       return parent
95     }
96
97     _triggerCloseEvent(element) {
98       const closeEvent = $.Event(Event.CLOSE)
99
100       $(element).trigger(closeEvent)
101       return closeEvent
102     }
103
104     _removeElement(element) {
105       $(element).removeClass(ClassName.SHOW)
106
107       if (!$(element).hasClass(ClassName.FADE)) {
108         this._destroyElement(element)
109         return
110       }
111
112       const transitionDuration = Util.getTransitionDurationFromElement(element)
113
114       $(element)
115         .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))
116         .emulateTransitionEnd(transitionDuration)
117     }
118
119     _destroyElement(element) {
120       $(element)
121         .detach()
122         .trigger(Event.CLOSED)
123         .remove()
124     }
125
126     // Static
127
128     static _jQueryInterface(config) {
129       return this.each(function () {
130         const $element = $(this)
131         let data       = $element.data(DATA_KEY)
132
133         if (!data) {
134           data = new Alert(this)
135           $element.data(DATA_KEY, data)
136         }
137
138         if (config === 'close') {
139           data[config](this)
140         }
141       })
142     }
143
144     static _handleDismiss(alertInstance) {
145       return function (event) {
146         if (event) {
147           event.preventDefault()
148         }
149
150         alertInstance.close(this)
151       }
152     }
153   }
154
155   /**
156    * ------------------------------------------------------------------------
157    * Data Api implementation
158    * ------------------------------------------------------------------------
159    */
160
161   $(document).on(
162     Event.CLICK_DATA_API,
163     Selector.DISMISS,
164     Alert._handleDismiss(new Alert())
165   )
166
167   /**
168    * ------------------------------------------------------------------------
169    * jQuery
170    * ------------------------------------------------------------------------
171    */
172
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
178   }
179
180   return Alert
181 })($)
182
183 export default Alert