corrade-http-templates – Blame information for rev 61

Subversion Repositories:
Rev:
Rev Author Line No. Line
61 office 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