@coreui/coreui 4.1.6 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -2
- package/README.md +62 -10
- package/dist/css/coreui-grid.css +22 -4
- package/dist/css/coreui-grid.css.map +1 -1
- package/dist/css/coreui-grid.min.css +2 -2
- package/dist/css/coreui-grid.min.css.map +1 -1
- package/dist/css/coreui-grid.rtl.css +23 -5
- package/dist/css/coreui-grid.rtl.css.map +1 -1
- package/dist/css/coreui-grid.rtl.min.css +3 -3
- package/dist/css/coreui-grid.rtl.min.css.map +1 -1
- package/dist/css/coreui-reboot.css +34 -41
- package/dist/css/coreui-reboot.css.map +1 -1
- package/dist/css/coreui-reboot.min.css +2 -2
- package/dist/css/coreui-reboot.min.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.css +34 -42
- package/dist/css/coreui-reboot.rtl.css.map +1 -1
- package/dist/css/coreui-reboot.rtl.min.css +3 -3
- package/dist/css/coreui-reboot.rtl.min.css.map +1 -1
- package/dist/css/coreui-utilities.css +278 -163
- package/dist/css/coreui-utilities.css.map +1 -1
- package/dist/css/coreui-utilities.min.css +2 -2
- package/dist/css/coreui-utilities.min.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.css +273 -164
- package/dist/css/coreui-utilities.rtl.css.map +1 -1
- package/dist/css/coreui-utilities.rtl.min.css +3 -3
- package/dist/css/coreui-utilities.rtl.min.css.map +1 -1
- package/dist/css/coreui.css +2177 -1240
- package/dist/css/coreui.css.map +1 -1
- package/dist/css/coreui.min.css +2 -2
- package/dist/css/coreui.min.css.map +1 -1
- package/dist/css/coreui.rtl.css +2159 -1228
- package/dist/css/coreui.rtl.css.map +1 -1
- package/dist/css/coreui.rtl.min.css +3 -3
- package/dist/css/coreui.rtl.min.css.map +1 -1
- package/dist/js/coreui.bundle.js +2095 -1906
- package/dist/js/coreui.bundle.js.map +1 -1
- package/dist/js/coreui.bundle.min.js +2 -2
- package/dist/js/coreui.bundle.min.js.map +1 -1
- package/dist/js/coreui.esm.js +2098 -1909
- package/dist/js/coreui.esm.js.map +1 -1
- package/dist/js/coreui.esm.min.js +2 -2
- package/dist/js/coreui.esm.min.js.map +1 -1
- package/dist/js/coreui.js +2099 -1910
- package/dist/js/coreui.js.map +1 -1
- package/dist/js/coreui.min.js +2 -2
- package/dist/js/coreui.min.js.map +1 -1
- package/js/dist/alert.js +10 -148
- package/js/dist/alert.js.map +1 -1
- package/js/dist/base-component.js +36 -122
- package/js/dist/base-component.js.map +1 -1
- package/js/dist/button.js +9 -76
- package/js/dist/button.js.map +1 -1
- package/js/dist/carousel.js +212 -507
- package/js/dist/carousel.js.map +1 -1
- package/js/dist/collapse.js +64 -251
- package/js/dist/collapse.js.map +1 -1
- package/js/dist/dom/data.js +2 -4
- package/js/dist/dom/data.js.map +1 -1
- package/js/dist/dom/event-handler.js +82 -133
- package/js/dist/dom/event-handler.js.map +1 -1
- package/js/dist/dom/manipulator.js +22 -26
- package/js/dist/dom/manipulator.js.map +1 -1
- package/js/dist/dom/selector-engine.js +16 -81
- package/js/dist/dom/selector-engine.js.map +1 -1
- package/js/dist/dropdown.js +99 -338
- package/js/dist/dropdown.js.map +1 -1
- package/js/dist/modal.js +106 -774
- package/js/dist/modal.js.map +1 -1
- package/js/dist/navigation.js +309 -0
- package/js/dist/navigation.js.map +1 -0
- package/js/dist/offcanvas.js +88 -680
- package/js/dist/offcanvas.js.map +1 -1
- package/js/dist/popover.js +35 -120
- package/js/dist/popover.js.map +1 -1
- package/js/dist/scrollspy.js +178 -264
- package/js/dist/scrollspy.js.map +1 -1
- package/js/dist/sidebar.js +347 -0
- package/js/dist/sidebar.js.map +1 -0
- package/js/dist/tab.js +226 -216
- package/js/dist/tab.js.map +1 -1
- package/js/dist/toast.js +27 -216
- package/js/dist/toast.js.map +1 -1
- package/js/dist/tooltip.js +271 -618
- package/js/dist/tooltip.js.map +1 -1
- package/js/dist/util/backdrop.js +166 -0
- package/js/dist/util/backdrop.js.map +1 -0
- package/js/dist/util/component-functions.js +47 -0
- package/js/dist/util/component-functions.js.map +1 -0
- package/js/dist/util/config.js +80 -0
- package/js/dist/util/config.js.map +1 -0
- package/js/dist/util/focustrap.js +130 -0
- package/js/dist/util/focustrap.js.map +1 -0
- package/js/dist/util/index.js +354 -0
- package/js/dist/util/index.js.map +1 -0
- package/js/dist/util/sanitizer.js +126 -0
- package/js/dist/util/sanitizer.js.map +1 -0
- package/js/dist/util/scrollbar.js +139 -0
- package/js/dist/util/scrollbar.js.map +1 -0
- package/js/dist/util/swipe.js +156 -0
- package/js/dist/util/swipe.js.map +1 -0
- package/js/dist/util/template-factory.js +178 -0
- package/js/dist/util/template-factory.js.map +1 -0
- package/js/src/alert.js +3 -15
- package/js/src/base-component.js +28 -18
- package/js/src/button.js +3 -15
- package/js/src/carousel.js +203 -320
- package/js/src/collapse.js +61 -94
- package/js/src/dom/data.js +1 -3
- package/js/src/dom/event-handler.js +74 -107
- package/js/src/dom/manipulator.js +22 -31
- package/js/src/dom/selector-engine.js +10 -19
- package/js/src/dropdown.js +84 -138
- package/js/src/modal.js +94 -158
- package/js/src/navigation.js +12 -13
- package/js/src/offcanvas.js +71 -60
- package/js/src/popover.js +31 -62
- package/js/src/scrollspy.js +166 -171
- package/js/src/sidebar.js +5 -8
- package/js/src/tab.js +201 -110
- package/js/src/toast.js +19 -41
- package/js/src/tooltip.js +264 -374
- package/js/src/util/backdrop.js +55 -36
- package/js/src/util/component-functions.js +1 -1
- package/js/src/util/config.js +66 -0
- package/js/src/util/focustrap.js +38 -28
- package/js/src/util/index.js +41 -57
- package/js/src/util/sanitizer.js +9 -17
- package/js/src/util/scrollbar.js +47 -30
- package/js/src/util/swipe.js +146 -0
- package/js/src/util/template-factory.js +160 -0
- package/package.json +37 -37
- package/scss/_accordion.scss +53 -25
- package/scss/_alert.scss +29 -9
- package/scss/_badge.scss +15 -6
- package/scss/_breadcrumb.scss +23 -11
- package/scss/_button-group.scss +3 -0
- package/scss/_buttons.scss +77 -50
- package/scss/_callout.scss +18 -6
- package/scss/_card.scss +55 -37
- package/scss/_carousel.scss +6 -6
- package/scss/_close.scss +4 -4
- package/scss/_containers.scss +1 -1
- package/scss/_dropdown.scss +86 -64
- package/scss/_footer.scss +15 -5
- package/scss/_functions.scss +11 -24
- package/scss/_grid.scss +3 -3
- package/scss/_header.scss +59 -34
- package/scss/_helpers.scss +1 -0
- package/scss/_images.scss +3 -3
- package/scss/_list-group.scss +47 -29
- package/scss/_maps.scss +54 -0
- package/scss/_modal.scss +70 -43
- package/scss/_nav.scss +53 -20
- package/scss/_navbar.scss +84 -94
- package/scss/_offcanvas.scss +120 -60
- package/scss/_pagination.scss +66 -21
- package/scss/_popover.scss +90 -52
- package/scss/_progress.scss +20 -9
- package/scss/_reboot.scss +31 -58
- package/scss/_root.scss +41 -19
- package/scss/_spinners.scss +37 -21
- package/scss/_subheader.scss +9 -9
- package/scss/_tables.scss +34 -36
- package/scss/_toasts.scss +35 -19
- package/scss/_tooltip.scss +61 -56
- package/scss/_utilities.scss +42 -25
- package/scss/_variables.scss +169 -148
- package/scss/coreui-grid.rtl.scss +1 -1
- package/scss/coreui-grid.scss +2 -1
- package/scss/coreui-reboot.rtl.scss +1 -1
- package/scss/coreui-reboot.scss +1 -1
- package/scss/coreui-utilities.rtl.scss +1 -1
- package/scss/coreui-utilities.scss +2 -1
- package/scss/coreui.rtl.scss +1 -1
- package/scss/coreui.scss +2 -1
- package/scss/forms/_floating-labels.scss +14 -3
- package/scss/forms/_form-check.scss +41 -18
- package/scss/forms/_form-control.scss +25 -50
- package/scss/forms/_form-range.scss +8 -8
- package/scss/forms/_form-select.scss +8 -8
- package/scss/forms/_form-text.scss +1 -1
- package/scss/forms/_input-group.scss +3 -3
- package/scss/forms/_labels.scss +2 -2
- package/scss/helpers/_color-bg.scss +10 -0
- package/scss/helpers/_colored-links.scss +2 -2
- package/scss/helpers/_position.scss +7 -1
- package/scss/helpers/_ratio.scss +2 -2
- package/scss/helpers/_vr.scss +1 -0
- package/scss/mixins/_alert.scss +10 -10
- package/scss/mixins/_breakpoints.scss +8 -8
- package/scss/mixins/_buttons.scss +45 -47
- package/scss/mixins/_container.scss +4 -2
- package/scss/mixins/_css-vars.scss +47 -47
- package/scss/mixins/_forms.scss +8 -0
- package/scss/mixins/_gradients.scss +1 -1
- package/scss/mixins/_grid.scss +11 -11
- package/scss/mixins/_list-group.scss +7 -9
- package/scss/mixins/_pagination.scss +4 -25
- package/scss/mixins/_table-variants.scss +20 -12
- package/scss/mixins/_utilities.scss +8 -3
- package/scss/sidebar/_sidebar-narrow.scss +10 -10
- package/scss/sidebar/_sidebar-nav.scss +37 -32
- package/scss/sidebar/_sidebar.scss +110 -56
package/js/src/collapse.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.2): collapse.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's collapse.js
|
|
@@ -11,21 +11,16 @@
|
|
|
11
11
|
import {
|
|
12
12
|
defineJQueryPlugin,
|
|
13
13
|
getElement,
|
|
14
|
-
getSelectorFromElement,
|
|
15
14
|
getElementFromSelector,
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
getSelectorFromElement,
|
|
16
|
+
reflow
|
|
18
17
|
} from './util/index'
|
|
19
|
-
import Data from './dom/data'
|
|
20
18
|
import EventHandler from './dom/event-handler'
|
|
21
|
-
import Manipulator from './dom/manipulator'
|
|
22
19
|
import SelectorEngine from './dom/selector-engine'
|
|
23
20
|
import BaseComponent from './base-component'
|
|
24
21
|
|
|
25
22
|
/**
|
|
26
|
-
* ------------------------------------------------------------------------
|
|
27
23
|
* Constants
|
|
28
|
-
* ------------------------------------------------------------------------
|
|
29
24
|
*/
|
|
30
25
|
|
|
31
26
|
const NAME = 'collapse'
|
|
@@ -33,16 +28,6 @@ const DATA_KEY = 'coreui.collapse'
|
|
|
33
28
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
34
29
|
const DATA_API_KEY = '.data-api'
|
|
35
30
|
|
|
36
|
-
const Default = {
|
|
37
|
-
toggle: true,
|
|
38
|
-
parent: null
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const DefaultType = {
|
|
42
|
-
toggle: 'boolean',
|
|
43
|
-
parent: '(null|element)'
|
|
44
|
-
}
|
|
45
|
-
|
|
46
31
|
const EVENT_SHOW = `show${EVENT_KEY}`
|
|
47
32
|
const EVENT_SHOWN = `shown${EVENT_KEY}`
|
|
48
33
|
const EVENT_HIDE = `hide${EVENT_KEY}`
|
|
@@ -62,30 +47,35 @@ const HEIGHT = 'height'
|
|
|
62
47
|
const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'
|
|
63
48
|
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="collapse"]'
|
|
64
49
|
|
|
50
|
+
const Default = {
|
|
51
|
+
parent: null,
|
|
52
|
+
toggle: true
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const DefaultType = {
|
|
56
|
+
parent: '(null|element)',
|
|
57
|
+
toggle: 'boolean'
|
|
58
|
+
}
|
|
59
|
+
|
|
65
60
|
/**
|
|
66
|
-
*
|
|
67
|
-
* Class Definition
|
|
68
|
-
* ------------------------------------------------------------------------
|
|
61
|
+
* Class definition
|
|
69
62
|
*/
|
|
70
63
|
|
|
71
64
|
class Collapse extends BaseComponent {
|
|
72
65
|
constructor(element, config) {
|
|
73
|
-
super(element)
|
|
66
|
+
super(element, config)
|
|
74
67
|
|
|
75
68
|
this._isTransitioning = false
|
|
76
|
-
this._config = this._getConfig(config)
|
|
77
69
|
this._triggerArray = []
|
|
78
70
|
|
|
79
71
|
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
|
|
80
72
|
|
|
81
|
-
for (
|
|
82
|
-
const elem = toggleList[i]
|
|
73
|
+
for (const elem of toggleList) {
|
|
83
74
|
const selector = getSelectorFromElement(elem)
|
|
84
75
|
const filterElement = SelectorEngine.find(selector)
|
|
85
|
-
.filter(
|
|
76
|
+
.filter(foundElement => foundElement === this._element)
|
|
86
77
|
|
|
87
78
|
if (selector !== null && filterElement.length) {
|
|
88
|
-
this._selector = selector
|
|
89
79
|
this._triggerArray.push(elem)
|
|
90
80
|
}
|
|
91
81
|
}
|
|
@@ -102,17 +92,19 @@ class Collapse extends BaseComponent {
|
|
|
102
92
|
}
|
|
103
93
|
|
|
104
94
|
// Getters
|
|
105
|
-
|
|
106
95
|
static get Default() {
|
|
107
96
|
return Default
|
|
108
97
|
}
|
|
109
98
|
|
|
99
|
+
static get DefaultType() {
|
|
100
|
+
return DefaultType
|
|
101
|
+
}
|
|
102
|
+
|
|
110
103
|
static get NAME() {
|
|
111
104
|
return NAME
|
|
112
105
|
}
|
|
113
106
|
|
|
114
107
|
// Public
|
|
115
|
-
|
|
116
108
|
toggle() {
|
|
117
109
|
if (this._isShown()) {
|
|
118
110
|
this.hide()
|
|
@@ -126,22 +118,17 @@ class Collapse extends BaseComponent {
|
|
|
126
118
|
return
|
|
127
119
|
}
|
|
128
120
|
|
|
129
|
-
let
|
|
130
|
-
let activesData
|
|
121
|
+
let activeChildren = []
|
|
131
122
|
|
|
123
|
+
// find active children
|
|
132
124
|
if (this._config.parent) {
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)
|
|
126
|
+
.filter(element => element !== this._element)
|
|
127
|
+
.map(element => Collapse.getOrCreateInstance(element, { toggle: false }))
|
|
135
128
|
}
|
|
136
129
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const tempActiveData = actives.find(elem => container !== elem)
|
|
140
|
-
activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null
|
|
141
|
-
|
|
142
|
-
if (activesData && activesData._isTransitioning) {
|
|
143
|
-
return
|
|
144
|
-
}
|
|
130
|
+
if (activeChildren.length && activeChildren[0]._isTransitioning) {
|
|
131
|
+
return
|
|
145
132
|
}
|
|
146
133
|
|
|
147
134
|
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)
|
|
@@ -149,15 +136,9 @@ class Collapse extends BaseComponent {
|
|
|
149
136
|
return
|
|
150
137
|
}
|
|
151
138
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (!activesData) {
|
|
158
|
-
Data.set(elemActive, DATA_KEY, null)
|
|
159
|
-
}
|
|
160
|
-
})
|
|
139
|
+
for (const activeInstance of activeChildren) {
|
|
140
|
+
activeInstance.hide()
|
|
141
|
+
}
|
|
161
142
|
|
|
162
143
|
const dimension = this._getDimension()
|
|
163
144
|
|
|
@@ -206,12 +187,10 @@ class Collapse extends BaseComponent {
|
|
|
206
187
|
this._element.classList.add(CLASS_NAME_COLLAPSING)
|
|
207
188
|
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
|
|
208
189
|
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
const trigger = this._triggerArray[i]
|
|
212
|
-
const elem = getElementFromSelector(trigger)
|
|
190
|
+
for (const trigger of this._triggerArray) {
|
|
191
|
+
const element = getElementFromSelector(trigger)
|
|
213
192
|
|
|
214
|
-
if (
|
|
193
|
+
if (element && !this._isShown(element)) {
|
|
215
194
|
this._addAriaAndCollapsedClass([trigger], false)
|
|
216
195
|
}
|
|
217
196
|
}
|
|
@@ -235,16 +214,9 @@ class Collapse extends BaseComponent {
|
|
|
235
214
|
}
|
|
236
215
|
|
|
237
216
|
// Private
|
|
238
|
-
|
|
239
|
-
_getConfig(config) {
|
|
240
|
-
config = {
|
|
241
|
-
...Default,
|
|
242
|
-
...Manipulator.getDataAttributes(this._element),
|
|
243
|
-
...config
|
|
244
|
-
}
|
|
217
|
+
_configAfterMerge(config) {
|
|
245
218
|
config.toggle = Boolean(config.toggle) // Coerce string values
|
|
246
219
|
config.parent = getElement(config.parent)
|
|
247
|
-
typeCheckConfig(NAME, config, DefaultType)
|
|
248
220
|
return config
|
|
249
221
|
}
|
|
250
222
|
|
|
@@ -257,15 +229,21 @@ class Collapse extends BaseComponent {
|
|
|
257
229
|
return
|
|
258
230
|
}
|
|
259
231
|
|
|
260
|
-
const children =
|
|
261
|
-
SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))
|
|
262
|
-
.forEach(element => {
|
|
263
|
-
const selected = getElementFromSelector(element)
|
|
232
|
+
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)
|
|
264
233
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
234
|
+
for (const element of children) {
|
|
235
|
+
const selected = getElementFromSelector(element)
|
|
236
|
+
|
|
237
|
+
if (selected) {
|
|
238
|
+
this._addAriaAndCollapsedClass([element], this._isShown(selected))
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
_getFirstLevelChildren(selector) {
|
|
244
|
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)
|
|
245
|
+
// remove children if greater depth
|
|
246
|
+
return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))
|
|
269
247
|
}
|
|
270
248
|
|
|
271
249
|
_addAriaAndCollapsedClass(triggerArray, isOpen) {
|
|
@@ -273,26 +251,20 @@ class Collapse extends BaseComponent {
|
|
|
273
251
|
return
|
|
274
252
|
}
|
|
275
253
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
elem.classList.add(CLASS_NAME_COLLAPSED)
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
elem.setAttribute('aria-expanded', isOpen)
|
|
284
|
-
})
|
|
254
|
+
for (const element of triggerArray) {
|
|
255
|
+
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)
|
|
256
|
+
element.setAttribute('aria-expanded', isOpen)
|
|
257
|
+
}
|
|
285
258
|
}
|
|
286
259
|
|
|
287
260
|
// Static
|
|
288
|
-
|
|
289
261
|
static jQueryInterface(config) {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
262
|
+
const _config = {}
|
|
263
|
+
if (typeof config === 'string' && /show|hide/.test(config)) {
|
|
264
|
+
_config.toggle = false
|
|
265
|
+
}
|
|
295
266
|
|
|
267
|
+
return this.each(function () {
|
|
296
268
|
const data = Collapse.getOrCreateInstance(this, _config)
|
|
297
269
|
|
|
298
270
|
if (typeof config === 'string') {
|
|
@@ -307,9 +279,7 @@ class Collapse extends BaseComponent {
|
|
|
307
279
|
}
|
|
308
280
|
|
|
309
281
|
/**
|
|
310
|
-
*
|
|
311
|
-
* Data Api implementation
|
|
312
|
-
* ------------------------------------------------------------------------
|
|
282
|
+
* Data API implementation
|
|
313
283
|
*/
|
|
314
284
|
|
|
315
285
|
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
@@ -321,16 +291,13 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|
|
321
291
|
const selector = getSelectorFromElement(this)
|
|
322
292
|
const selectorElements = SelectorEngine.find(selector)
|
|
323
293
|
|
|
324
|
-
|
|
294
|
+
for (const element of selectorElements) {
|
|
325
295
|
Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
|
|
326
|
-
}
|
|
296
|
+
}
|
|
327
297
|
})
|
|
328
298
|
|
|
329
299
|
/**
|
|
330
|
-
* ------------------------------------------------------------------------
|
|
331
300
|
* jQuery
|
|
332
|
-
* ------------------------------------------------------------------------
|
|
333
|
-
* add .Collapse to jQuery only if jQuery is present
|
|
334
301
|
*/
|
|
335
302
|
|
|
336
303
|
defineJQueryPlugin(Collapse)
|
package/js/src/dom/data.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.2): dom/data.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's dom/data.js
|
|
@@ -9,9 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* ------------------------------------------------------------------------
|
|
13
12
|
* Constants
|
|
14
|
-
* ------------------------------------------------------------------------
|
|
15
13
|
*/
|
|
16
14
|
|
|
17
15
|
const elementMap = new Map()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.2): dom/event-handler.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's dom/event-handler.js
|
|
@@ -11,9 +11,7 @@
|
|
|
11
11
|
import { getjQuery } from '../util/index'
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* ------------------------------------------------------------------------
|
|
15
14
|
* Constants
|
|
16
|
-
* ------------------------------------------------------------------------
|
|
17
15
|
*/
|
|
18
16
|
|
|
19
17
|
const namespaceRegex = /[^.]*(?=\..*)\.|.*/
|
|
@@ -25,7 +23,7 @@ const customEvents = {
|
|
|
25
23
|
mouseenter: 'mouseover',
|
|
26
24
|
mouseleave: 'mouseout'
|
|
27
25
|
}
|
|
28
|
-
|
|
26
|
+
|
|
29
27
|
const nativeEvents = new Set([
|
|
30
28
|
'click',
|
|
31
29
|
'dblclick',
|
|
@@ -76,17 +74,15 @@ const nativeEvents = new Set([
|
|
|
76
74
|
])
|
|
77
75
|
|
|
78
76
|
/**
|
|
79
|
-
* ------------------------------------------------------------------------
|
|
80
77
|
* Private methods
|
|
81
|
-
* ------------------------------------------------------------------------
|
|
82
78
|
*/
|
|
83
79
|
|
|
84
|
-
function
|
|
80
|
+
function makeEventUid(element, uid) {
|
|
85
81
|
return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++
|
|
86
82
|
}
|
|
87
83
|
|
|
88
|
-
function
|
|
89
|
-
const uid =
|
|
84
|
+
function getElementEvents(element) {
|
|
85
|
+
const uid = makeEventUid(element)
|
|
90
86
|
|
|
91
87
|
element.uidEvent = uid
|
|
92
88
|
eventRegistry[uid] = eventRegistry[uid] || {}
|
|
@@ -111,66 +107,52 @@ function bootstrapDelegationHandler(element, selector, fn) {
|
|
|
111
107
|
const domElements = element.querySelectorAll(selector)
|
|
112
108
|
|
|
113
109
|
for (let { target } = event; target && target !== this; target = target.parentNode) {
|
|
114
|
-
for (
|
|
115
|
-
if (
|
|
116
|
-
|
|
110
|
+
for (const domElement of domElements) {
|
|
111
|
+
if (domElement !== target) {
|
|
112
|
+
continue
|
|
113
|
+
}
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
EventHandler.off(element, event.type, selector, fn)
|
|
120
|
-
}
|
|
115
|
+
event.delegateTarget = target
|
|
121
116
|
|
|
122
|
-
|
|
117
|
+
if (handler.oneOff) {
|
|
118
|
+
EventHandler.off(element, event.type, selector, fn)
|
|
123
119
|
}
|
|
120
|
+
|
|
121
|
+
return fn.apply(target, [event])
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
|
-
|
|
127
|
-
// To please ESLint
|
|
128
|
-
return null
|
|
129
124
|
}
|
|
130
125
|
}
|
|
131
126
|
|
|
132
|
-
function findHandler(events,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
for (let i = 0, len = uidEventList.length; i < len; i++) {
|
|
136
|
-
const event = events[uidEventList[i]]
|
|
137
|
-
|
|
138
|
-
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
|
|
139
|
-
return event
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return null
|
|
127
|
+
function findHandler(events, callable, delegationSelector = null) {
|
|
128
|
+
return Object.values(events)
|
|
129
|
+
.find(event => event.callable === callable && event.delegationSelector === delegationSelector)
|
|
144
130
|
}
|
|
145
131
|
|
|
146
|
-
function
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
132
|
+
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
|
|
133
|
+
const isDelegated = typeof handler === 'string'
|
|
134
|
+
// todo: tooltip passes `false` instead of selector, so we need to check
|
|
135
|
+
const callable = isDelegated ? delegationFunction : (handler || delegationFunction)
|
|
150
136
|
let typeEvent = getTypeEvent(originalTypeEvent)
|
|
151
|
-
const isNative = nativeEvents.has(typeEvent)
|
|
152
137
|
|
|
153
|
-
if (!
|
|
138
|
+
if (!nativeEvents.has(typeEvent)) {
|
|
154
139
|
typeEvent = originalTypeEvent
|
|
155
140
|
}
|
|
156
141
|
|
|
157
|
-
return [
|
|
142
|
+
return [isDelegated, callable, typeEvent]
|
|
158
143
|
}
|
|
159
144
|
|
|
160
|
-
function addHandler(element, originalTypeEvent, handler,
|
|
145
|
+
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
|
|
161
146
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
|
162
147
|
return
|
|
163
148
|
}
|
|
164
149
|
|
|
165
|
-
|
|
166
|
-
handler = delegationFn
|
|
167
|
-
delegationFn = null
|
|
168
|
-
}
|
|
150
|
+
let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)
|
|
169
151
|
|
|
170
152
|
// in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
|
|
171
153
|
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
|
|
172
|
-
if (
|
|
173
|
-
const
|
|
154
|
+
if (originalTypeEvent in customEvents) {
|
|
155
|
+
const wrapFunction = fn => {
|
|
174
156
|
return function (event) {
|
|
175
157
|
if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {
|
|
176
158
|
return fn.call(this, event)
|
|
@@ -178,36 +160,31 @@ function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
|
|
|
178
160
|
}
|
|
179
161
|
}
|
|
180
162
|
|
|
181
|
-
|
|
182
|
-
delegationFn = wrapFn(delegationFn)
|
|
183
|
-
} else {
|
|
184
|
-
handler = wrapFn(handler)
|
|
185
|
-
}
|
|
163
|
+
callable = wrapFunction(callable)
|
|
186
164
|
}
|
|
187
165
|
|
|
188
|
-
const
|
|
189
|
-
const events = getEvent(element)
|
|
166
|
+
const events = getElementEvents(element)
|
|
190
167
|
const handlers = events[typeEvent] || (events[typeEvent] = {})
|
|
191
|
-
const
|
|
168
|
+
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)
|
|
192
169
|
|
|
193
|
-
if (
|
|
194
|
-
|
|
170
|
+
if (previousFunction) {
|
|
171
|
+
previousFunction.oneOff = previousFunction.oneOff && oneOff
|
|
195
172
|
|
|
196
173
|
return
|
|
197
174
|
}
|
|
198
175
|
|
|
199
|
-
const uid =
|
|
200
|
-
const fn =
|
|
201
|
-
bootstrapDelegationHandler(element, handler,
|
|
202
|
-
bootstrapHandler(element,
|
|
176
|
+
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))
|
|
177
|
+
const fn = isDelegated ?
|
|
178
|
+
bootstrapDelegationHandler(element, handler, callable) :
|
|
179
|
+
bootstrapHandler(element, callable)
|
|
203
180
|
|
|
204
|
-
fn.delegationSelector =
|
|
205
|
-
fn.
|
|
181
|
+
fn.delegationSelector = isDelegated ? handler : null
|
|
182
|
+
fn.callable = callable
|
|
206
183
|
fn.oneOff = oneOff
|
|
207
184
|
fn.uidEvent = uid
|
|
208
185
|
handlers[uid] = fn
|
|
209
186
|
|
|
210
|
-
element.addEventListener(typeEvent, fn,
|
|
187
|
+
element.addEventListener(typeEvent, fn, isDelegated)
|
|
211
188
|
}
|
|
212
189
|
|
|
213
190
|
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
|
|
@@ -224,13 +201,12 @@ function removeHandler(element, events, typeEvent, handler, delegationSelector)
|
|
|
224
201
|
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
|
225
202
|
const storeElementEvent = events[typeEvent] || {}
|
|
226
203
|
|
|
227
|
-
Object.keys(storeElementEvent)
|
|
204
|
+
for (const handlerKey of Object.keys(storeElementEvent)) {
|
|
228
205
|
if (handlerKey.includes(namespace)) {
|
|
229
206
|
const event = storeElementEvent[handlerKey]
|
|
230
|
-
|
|
231
|
-
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)
|
|
207
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
|
|
232
208
|
}
|
|
233
|
-
}
|
|
209
|
+
}
|
|
234
210
|
}
|
|
235
211
|
|
|
236
212
|
function getTypeEvent(event) {
|
|
@@ -240,50 +216,49 @@ function getTypeEvent(event) {
|
|
|
240
216
|
}
|
|
241
217
|
|
|
242
218
|
const EventHandler = {
|
|
243
|
-
on(element, event, handler,
|
|
244
|
-
addHandler(element, event, handler,
|
|
219
|
+
on(element, event, handler, delegationFunction) {
|
|
220
|
+
addHandler(element, event, handler, delegationFunction, false)
|
|
245
221
|
},
|
|
246
222
|
|
|
247
|
-
one(element, event, handler,
|
|
248
|
-
addHandler(element, event, handler,
|
|
223
|
+
one(element, event, handler, delegationFunction) {
|
|
224
|
+
addHandler(element, event, handler, delegationFunction, true)
|
|
249
225
|
},
|
|
250
226
|
|
|
251
|
-
off(element, originalTypeEvent, handler,
|
|
227
|
+
off(element, originalTypeEvent, handler, delegationFunction) {
|
|
252
228
|
if (typeof originalTypeEvent !== 'string' || !element) {
|
|
253
229
|
return
|
|
254
230
|
}
|
|
255
231
|
|
|
256
|
-
const [
|
|
232
|
+
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)
|
|
257
233
|
const inNamespace = typeEvent !== originalTypeEvent
|
|
258
|
-
const events =
|
|
234
|
+
const events = getElementEvents(element)
|
|
235
|
+
const storeElementEvent = events[typeEvent] || {}
|
|
259
236
|
const isNamespace = originalTypeEvent.startsWith('.')
|
|
260
237
|
|
|
261
|
-
if (typeof
|
|
238
|
+
if (typeof callable !== 'undefined') {
|
|
262
239
|
// Simplest case: handler is passed, remove that listener ONLY.
|
|
263
|
-
if (!
|
|
240
|
+
if (!Object.keys(storeElementEvent).length) {
|
|
264
241
|
return
|
|
265
242
|
}
|
|
266
243
|
|
|
267
|
-
removeHandler(element, events, typeEvent,
|
|
244
|
+
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)
|
|
268
245
|
return
|
|
269
246
|
}
|
|
270
247
|
|
|
271
248
|
if (isNamespace) {
|
|
272
|
-
Object.keys(events)
|
|
249
|
+
for (const elementEvent of Object.keys(events)) {
|
|
273
250
|
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))
|
|
274
|
-
}
|
|
251
|
+
}
|
|
275
252
|
}
|
|
276
253
|
|
|
277
|
-
const
|
|
278
|
-
Object.keys(storeElementEvent).forEach(keyHandlers => {
|
|
254
|
+
for (const keyHandlers of Object.keys(storeElementEvent)) {
|
|
279
255
|
const handlerKey = keyHandlers.replace(stripUidRegex, '')
|
|
280
256
|
|
|
281
257
|
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
|
|
282
258
|
const event = storeElementEvent[keyHandlers]
|
|
283
|
-
|
|
284
|
-
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)
|
|
259
|
+
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
|
|
285
260
|
}
|
|
286
|
-
}
|
|
261
|
+
}
|
|
287
262
|
},
|
|
288
263
|
|
|
289
264
|
trigger(element, event, args) {
|
|
@@ -294,13 +269,11 @@ const EventHandler = {
|
|
|
294
269
|
const $ = getjQuery()
|
|
295
270
|
const typeEvent = getTypeEvent(event)
|
|
296
271
|
const inNamespace = event !== typeEvent
|
|
297
|
-
const isNative = nativeEvents.has(typeEvent)
|
|
298
272
|
|
|
299
|
-
let jQueryEvent
|
|
273
|
+
let jQueryEvent = null
|
|
300
274
|
let bubbles = true
|
|
301
275
|
let nativeDispatch = true
|
|
302
276
|
let defaultPrevented = false
|
|
303
|
-
let evt = null
|
|
304
277
|
|
|
305
278
|
if (inNamespace && $) {
|
|
306
279
|
jQueryEvent = $.Event(event, args)
|
|
@@ -311,26 +284,8 @@ const EventHandler = {
|
|
|
311
284
|
defaultPrevented = jQueryEvent.isDefaultPrevented()
|
|
312
285
|
}
|
|
313
286
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
evt.initEvent(typeEvent, bubbles, true)
|
|
317
|
-
} else {
|
|
318
|
-
evt = new CustomEvent(event, {
|
|
319
|
-
bubbles,
|
|
320
|
-
cancelable: true
|
|
321
|
-
})
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// merge custom information in our event
|
|
325
|
-
if (typeof args !== 'undefined') {
|
|
326
|
-
Object.keys(args).forEach(key => {
|
|
327
|
-
Object.defineProperty(evt, key, {
|
|
328
|
-
get() {
|
|
329
|
-
return args[key]
|
|
330
|
-
}
|
|
331
|
-
})
|
|
332
|
-
})
|
|
333
|
-
}
|
|
287
|
+
let evt = new Event(event, { bubbles, cancelable: true })
|
|
288
|
+
evt = hydrateObj(evt, args)
|
|
334
289
|
|
|
335
290
|
if (defaultPrevented) {
|
|
336
291
|
evt.preventDefault()
|
|
@@ -340,7 +295,7 @@ const EventHandler = {
|
|
|
340
295
|
element.dispatchEvent(evt)
|
|
341
296
|
}
|
|
342
297
|
|
|
343
|
-
if (evt.defaultPrevented &&
|
|
298
|
+
if (evt.defaultPrevented && jQueryEvent) {
|
|
344
299
|
jQueryEvent.preventDefault()
|
|
345
300
|
}
|
|
346
301
|
|
|
@@ -348,4 +303,16 @@ const EventHandler = {
|
|
|
348
303
|
}
|
|
349
304
|
}
|
|
350
305
|
|
|
306
|
+
function hydrateObj(obj, meta) {
|
|
307
|
+
for (const [key, value] of Object.entries(meta || {})) {
|
|
308
|
+
Object.defineProperty(obj, key, {
|
|
309
|
+
get() {
|
|
310
|
+
return value
|
|
311
|
+
}
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
return obj
|
|
316
|
+
}
|
|
317
|
+
|
|
351
318
|
export default EventHandler
|