@coreui/coreui 4.1.6 → 4.2.0
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/bootstrap-reboot.css +488 -0
- package/dist/css/bootstrap-reboot.css.map +1 -0
- package/dist/css/bootstrap-reboot.min.css +8 -0
- package/dist/css/bootstrap-reboot.min.css.map +1 -0
- 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 +2168 -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 +2150 -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 +36 -36
- 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 +71 -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/bootstrap-reboot.scss +14 -0
- 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 +33 -32
- package/scss/sidebar/_sidebar.scss +110 -56
package/js/src/modal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.0): modal.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's modal.js
|
|
@@ -8,16 +8,8 @@
|
|
|
8
8
|
* --------------------------------------------------------------------------
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
defineJQueryPlugin,
|
|
13
|
-
getElementFromSelector,
|
|
14
|
-
isRTL,
|
|
15
|
-
isVisible,
|
|
16
|
-
reflow,
|
|
17
|
-
typeCheckConfig
|
|
18
|
-
} from './util/index'
|
|
11
|
+
import { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'
|
|
19
12
|
import EventHandler from './dom/event-handler'
|
|
20
|
-
import Manipulator from './dom/manipulator'
|
|
21
13
|
import SelectorEngine from './dom/selector-engine'
|
|
22
14
|
import ScrollBarHelper from './util/scrollbar'
|
|
23
15
|
import BaseComponent from './base-component'
|
|
@@ -26,9 +18,7 @@ import FocusTrap from './util/focustrap'
|
|
|
26
18
|
import { enableDismissTrigger } from './util/component-functions'
|
|
27
19
|
|
|
28
20
|
/**
|
|
29
|
-
* ------------------------------------------------------------------------
|
|
30
21
|
* Constants
|
|
31
|
-
* ------------------------------------------------------------------------
|
|
32
22
|
*/
|
|
33
23
|
|
|
34
24
|
const NAME = 'modal'
|
|
@@ -37,28 +27,14 @@ const EVENT_KEY = `.${DATA_KEY}`
|
|
|
37
27
|
const DATA_API_KEY = '.data-api'
|
|
38
28
|
const ESCAPE_KEY = 'Escape'
|
|
39
29
|
|
|
40
|
-
const Default = {
|
|
41
|
-
backdrop: true,
|
|
42
|
-
keyboard: true,
|
|
43
|
-
focus: true
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const DefaultType = {
|
|
47
|
-
backdrop: '(boolean|string)',
|
|
48
|
-
keyboard: 'boolean',
|
|
49
|
-
focus: 'boolean'
|
|
50
|
-
}
|
|
51
|
-
|
|
52
30
|
const EVENT_HIDE = `hide${EVENT_KEY}`
|
|
53
31
|
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
|
|
54
32
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
|
|
55
33
|
const EVENT_SHOW = `show${EVENT_KEY}`
|
|
56
34
|
const EVENT_SHOWN = `shown${EVENT_KEY}`
|
|
57
35
|
const EVENT_RESIZE = `resize${EVENT_KEY}`
|
|
58
|
-
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
|
|
59
|
-
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
|
|
60
|
-
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`
|
|
61
36
|
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
|
|
37
|
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
|
|
62
38
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
|
|
63
39
|
|
|
64
40
|
const CLASS_NAME_OPEN = 'modal-open'
|
|
@@ -71,38 +47,50 @@ const SELECTOR_DIALOG = '.modal-dialog'
|
|
|
71
47
|
const SELECTOR_MODAL_BODY = '.modal-body'
|
|
72
48
|
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="modal"]'
|
|
73
49
|
|
|
50
|
+
const Default = {
|
|
51
|
+
backdrop: true,
|
|
52
|
+
focus: true,
|
|
53
|
+
keyboard: true
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const DefaultType = {
|
|
57
|
+
backdrop: '(boolean|string)',
|
|
58
|
+
focus: 'boolean',
|
|
59
|
+
keyboard: 'boolean'
|
|
60
|
+
}
|
|
61
|
+
|
|
74
62
|
/**
|
|
75
|
-
*
|
|
76
|
-
* Class Definition
|
|
77
|
-
* ------------------------------------------------------------------------
|
|
63
|
+
* Class definition
|
|
78
64
|
*/
|
|
79
65
|
|
|
80
66
|
class Modal extends BaseComponent {
|
|
81
67
|
constructor(element, config) {
|
|
82
|
-
super(element)
|
|
68
|
+
super(element, config)
|
|
83
69
|
|
|
84
|
-
this._config = this._getConfig(config)
|
|
85
70
|
this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)
|
|
86
71
|
this._backdrop = this._initializeBackDrop()
|
|
87
72
|
this._focustrap = this._initializeFocusTrap()
|
|
88
73
|
this._isShown = false
|
|
89
|
-
this._ignoreBackdropClick = false
|
|
90
74
|
this._isTransitioning = false
|
|
91
75
|
this._scrollBar = new ScrollBarHelper()
|
|
76
|
+
|
|
77
|
+
this._addEventListeners()
|
|
92
78
|
}
|
|
93
79
|
|
|
94
80
|
// Getters
|
|
95
|
-
|
|
96
81
|
static get Default() {
|
|
97
82
|
return Default
|
|
98
83
|
}
|
|
99
84
|
|
|
85
|
+
static get DefaultType() {
|
|
86
|
+
return DefaultType
|
|
87
|
+
}
|
|
88
|
+
|
|
100
89
|
static get NAME() {
|
|
101
90
|
return NAME
|
|
102
91
|
}
|
|
103
92
|
|
|
104
93
|
// Public
|
|
105
|
-
|
|
106
94
|
toggle(relatedTarget) {
|
|
107
95
|
return this._isShown ? this.hide() : this.show(relatedTarget)
|
|
108
96
|
}
|
|
@@ -121,10 +109,7 @@ class Modal extends BaseComponent {
|
|
|
121
109
|
}
|
|
122
110
|
|
|
123
111
|
this._isShown = true
|
|
124
|
-
|
|
125
|
-
if (this._isAnimated()) {
|
|
126
|
-
this._isTransitioning = true
|
|
127
|
-
}
|
|
112
|
+
this._isTransitioning = true
|
|
128
113
|
|
|
129
114
|
this._scrollBar.hide()
|
|
130
115
|
|
|
@@ -132,18 +117,7 @@ class Modal extends BaseComponent {
|
|
|
132
117
|
|
|
133
118
|
this._adjustDialog()
|
|
134
119
|
|
|
135
|
-
this.
|
|
136
|
-
this._setResizeEvent()
|
|
137
|
-
|
|
138
|
-
EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
|
|
139
|
-
EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
|
|
140
|
-
if (event.target === this._element) {
|
|
141
|
-
this._ignoreBackdropClick = true
|
|
142
|
-
}
|
|
143
|
-
})
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
this._showBackdrop(() => this._showElement(relatedTarget))
|
|
120
|
+
this._backdrop.show(() => this._showElement(relatedTarget))
|
|
147
121
|
}
|
|
148
122
|
|
|
149
123
|
hide() {
|
|
@@ -158,28 +132,18 @@ class Modal extends BaseComponent {
|
|
|
158
132
|
}
|
|
159
133
|
|
|
160
134
|
this._isShown = false
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (isAnimated) {
|
|
164
|
-
this._isTransitioning = true
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
this._setEscapeEvent()
|
|
168
|
-
this._setResizeEvent()
|
|
169
|
-
|
|
135
|
+
this._isTransitioning = true
|
|
170
136
|
this._focustrap.deactivate()
|
|
171
137
|
|
|
172
138
|
this._element.classList.remove(CLASS_NAME_SHOW)
|
|
173
139
|
|
|
174
|
-
|
|
175
|
-
EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)
|
|
176
|
-
|
|
177
|
-
this._queueCallback(() => this._hideModal(), this._element, isAnimated)
|
|
140
|
+
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())
|
|
178
141
|
}
|
|
179
142
|
|
|
180
143
|
dispose() {
|
|
181
|
-
[window, this._dialog]
|
|
182
|
-
|
|
144
|
+
for (const htmlElement of [window, this._dialog]) {
|
|
145
|
+
EventHandler.off(htmlElement, EVENT_KEY)
|
|
146
|
+
}
|
|
183
147
|
|
|
184
148
|
this._backdrop.dispose()
|
|
185
149
|
this._focustrap.deactivate()
|
|
@@ -191,10 +155,9 @@ class Modal extends BaseComponent {
|
|
|
191
155
|
}
|
|
192
156
|
|
|
193
157
|
// Private
|
|
194
|
-
|
|
195
158
|
_initializeBackDrop() {
|
|
196
159
|
return new Backdrop({
|
|
197
|
-
isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value
|
|
160
|
+
isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,
|
|
198
161
|
isAnimated: this._isAnimated()
|
|
199
162
|
})
|
|
200
163
|
}
|
|
@@ -205,22 +168,9 @@ class Modal extends BaseComponent {
|
|
|
205
168
|
})
|
|
206
169
|
}
|
|
207
170
|
|
|
208
|
-
_getConfig(config) {
|
|
209
|
-
config = {
|
|
210
|
-
...Default,
|
|
211
|
-
...Manipulator.getDataAttributes(this._element),
|
|
212
|
-
...(typeof config === 'object' ? config : {})
|
|
213
|
-
}
|
|
214
|
-
typeCheckConfig(NAME, config, DefaultType)
|
|
215
|
-
return config
|
|
216
|
-
}
|
|
217
|
-
|
|
218
171
|
_showElement(relatedTarget) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
|
223
|
-
// Don't move modal's DOM position
|
|
172
|
+
// try to append dynamic modal
|
|
173
|
+
if (!document.body.contains(this._element)) {
|
|
224
174
|
document.body.append(this._element)
|
|
225
175
|
}
|
|
226
176
|
|
|
@@ -230,13 +180,12 @@ class Modal extends BaseComponent {
|
|
|
230
180
|
this._element.setAttribute('role', 'dialog')
|
|
231
181
|
this._element.scrollTop = 0
|
|
232
182
|
|
|
183
|
+
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)
|
|
233
184
|
if (modalBody) {
|
|
234
185
|
modalBody.scrollTop = 0
|
|
235
186
|
}
|
|
236
187
|
|
|
237
|
-
|
|
238
|
-
reflow(this._element)
|
|
239
|
-
}
|
|
188
|
+
reflow(this._element)
|
|
240
189
|
|
|
241
190
|
this._element.classList.add(CLASS_NAME_SHOW)
|
|
242
191
|
|
|
@@ -251,30 +200,44 @@ class Modal extends BaseComponent {
|
|
|
251
200
|
})
|
|
252
201
|
}
|
|
253
202
|
|
|
254
|
-
this._queueCallback(transitionComplete, this._dialog,
|
|
203
|
+
this._queueCallback(transitionComplete, this._dialog, this._isAnimated())
|
|
255
204
|
}
|
|
256
205
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
this.hide()
|
|
263
|
-
} else if (!this._config.keyboard && event.key === ESCAPE_KEY) {
|
|
264
|
-
this._triggerBackdropTransition()
|
|
265
|
-
}
|
|
266
|
-
})
|
|
267
|
-
} else {
|
|
268
|
-
EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)
|
|
269
|
-
}
|
|
270
|
-
}
|
|
206
|
+
_addEventListeners() {
|
|
207
|
+
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
208
|
+
if (event.key !== ESCAPE_KEY) {
|
|
209
|
+
return
|
|
210
|
+
}
|
|
271
211
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
212
|
+
if (this._config.keyboard) {
|
|
213
|
+
event.preventDefault()
|
|
214
|
+
this.hide()
|
|
215
|
+
return
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
this._triggerBackdropTransition()
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
EventHandler.on(window, EVENT_RESIZE, () => {
|
|
222
|
+
if (this._isShown && !this._isTransitioning) {
|
|
223
|
+
this._adjustDialog()
|
|
224
|
+
}
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
|
|
228
|
+
if (event.target !== event.currentTarget) { // click is inside modal-dialog
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (this._config.backdrop === 'static') {
|
|
233
|
+
this._triggerBackdropTransition()
|
|
234
|
+
return
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (this._config.backdrop) {
|
|
238
|
+
this.hide()
|
|
239
|
+
}
|
|
240
|
+
})
|
|
278
241
|
}
|
|
279
242
|
|
|
280
243
|
_hideModal() {
|
|
@@ -283,6 +246,7 @@ class Modal extends BaseComponent {
|
|
|
283
246
|
this._element.removeAttribute('aria-modal')
|
|
284
247
|
this._element.removeAttribute('role')
|
|
285
248
|
this._isTransitioning = false
|
|
249
|
+
|
|
286
250
|
this._backdrop.hide(() => {
|
|
287
251
|
document.body.classList.remove(CLASS_NAME_OPEN)
|
|
288
252
|
this._resetAdjustments()
|
|
@@ -291,27 +255,6 @@ class Modal extends BaseComponent {
|
|
|
291
255
|
})
|
|
292
256
|
}
|
|
293
257
|
|
|
294
|
-
_showBackdrop(callback) {
|
|
295
|
-
EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
|
|
296
|
-
if (this._ignoreBackdropClick) {
|
|
297
|
-
this._ignoreBackdropClick = false
|
|
298
|
-
return
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if (event.target !== event.currentTarget) {
|
|
302
|
-
return
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
if (this._config.backdrop === true) {
|
|
306
|
-
this.hide()
|
|
307
|
-
} else if (this._config.backdrop === 'static') {
|
|
308
|
-
this._triggerBackdropTransition()
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
this._backdrop.show(callback)
|
|
313
|
-
}
|
|
314
|
-
|
|
315
258
|
_isAnimated() {
|
|
316
259
|
return this._element.classList.contains(CLASS_NAME_FADE)
|
|
317
260
|
}
|
|
@@ -322,46 +265,45 @@ class Modal extends BaseComponent {
|
|
|
322
265
|
return
|
|
323
266
|
}
|
|
324
267
|
|
|
325
|
-
const
|
|
326
|
-
const
|
|
327
|
-
|
|
268
|
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
|
|
269
|
+
const initialOverflowY = this._element.style.overflowY
|
|
328
270
|
// return if the following background transition hasn't yet completed
|
|
329
|
-
if (
|
|
271
|
+
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
|
|
330
272
|
return
|
|
331
273
|
}
|
|
332
274
|
|
|
333
275
|
if (!isModalOverflowing) {
|
|
334
|
-
style.overflowY = 'hidden'
|
|
276
|
+
this._element.style.overflowY = 'hidden'
|
|
335
277
|
}
|
|
336
278
|
|
|
337
|
-
classList.add(CLASS_NAME_STATIC)
|
|
279
|
+
this._element.classList.add(CLASS_NAME_STATIC)
|
|
338
280
|
this._queueCallback(() => {
|
|
339
|
-
classList.remove(CLASS_NAME_STATIC)
|
|
340
|
-
|
|
341
|
-
this.
|
|
342
|
-
|
|
343
|
-
}, this._dialog)
|
|
344
|
-
}
|
|
281
|
+
this._element.classList.remove(CLASS_NAME_STATIC)
|
|
282
|
+
this._queueCallback(() => {
|
|
283
|
+
this._element.style.overflowY = initialOverflowY
|
|
284
|
+
}, this._dialog)
|
|
345
285
|
}, this._dialog)
|
|
346
286
|
|
|
347
287
|
this._element.focus()
|
|
348
288
|
}
|
|
349
289
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
290
|
+
/**
|
|
291
|
+
* The following methods are used to handle overflowing modals
|
|
292
|
+
*/
|
|
353
293
|
|
|
354
294
|
_adjustDialog() {
|
|
355
295
|
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
|
|
356
296
|
const scrollbarWidth = this._scrollBar.getWidth()
|
|
357
297
|
const isBodyOverflowing = scrollbarWidth > 0
|
|
358
298
|
|
|
359
|
-
if (
|
|
360
|
-
|
|
299
|
+
if (isBodyOverflowing && !isModalOverflowing) {
|
|
300
|
+
const property = isRTL() ? 'paddingLeft' : 'paddingRight'
|
|
301
|
+
this._element.style[property] = `${scrollbarWidth}px`
|
|
361
302
|
}
|
|
362
303
|
|
|
363
|
-
if (
|
|
364
|
-
|
|
304
|
+
if (!isBodyOverflowing && isModalOverflowing) {
|
|
305
|
+
const property = isRTL() ? 'paddingRight' : 'paddingLeft'
|
|
306
|
+
this._element.style[property] = `${scrollbarWidth}px`
|
|
365
307
|
}
|
|
366
308
|
}
|
|
367
309
|
|
|
@@ -371,7 +313,6 @@ class Modal extends BaseComponent {
|
|
|
371
313
|
}
|
|
372
314
|
|
|
373
315
|
// Static
|
|
374
|
-
|
|
375
316
|
static jQueryInterface(config, relatedTarget) {
|
|
376
317
|
return this.each(function () {
|
|
377
318
|
const data = Modal.getOrCreateInstance(this, config)
|
|
@@ -390,9 +331,7 @@ class Modal extends BaseComponent {
|
|
|
390
331
|
}
|
|
391
332
|
|
|
392
333
|
/**
|
|
393
|
-
*
|
|
394
|
-
* Data Api implementation
|
|
395
|
-
* ------------------------------------------------------------------------
|
|
334
|
+
* Data API implementation
|
|
396
335
|
*/
|
|
397
336
|
|
|
398
337
|
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
@@ -415,10 +354,10 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|
|
415
354
|
})
|
|
416
355
|
})
|
|
417
356
|
|
|
418
|
-
// avoid conflict when clicking
|
|
419
|
-
const
|
|
420
|
-
if (
|
|
421
|
-
Modal.getInstance(
|
|
357
|
+
// avoid conflict when clicking modal toggler while another one is open
|
|
358
|
+
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
|
|
359
|
+
if (alreadyOpen) {
|
|
360
|
+
Modal.getInstance(alreadyOpen).hide()
|
|
422
361
|
}
|
|
423
362
|
|
|
424
363
|
const data = Modal.getOrCreateInstance(target)
|
|
@@ -429,10 +368,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|
|
429
368
|
enableDismissTrigger(Modal)
|
|
430
369
|
|
|
431
370
|
/**
|
|
432
|
-
* ------------------------------------------------------------------------
|
|
433
371
|
* jQuery
|
|
434
|
-
* ------------------------------------------------------------------------
|
|
435
|
-
* add .Modal to jQuery only if jQuery is present
|
|
436
372
|
*/
|
|
437
373
|
|
|
438
374
|
defineJQueryPlugin(Modal)
|
package/js/src/navigation.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.0): navigation.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
* --------------------------------------------------------------------------
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
defineJQueryPlugin,
|
|
10
|
-
typeCheckConfig
|
|
11
|
-
} from './util/index'
|
|
8
|
+
import { defineJQueryPlugin } from './util/index'
|
|
12
9
|
import Data from './dom/data'
|
|
13
10
|
import EventHandler from './dom/event-handler'
|
|
14
11
|
import Manipulator from './dom/manipulator'
|
|
@@ -92,14 +89,14 @@ class Navigation extends BaseComponent {
|
|
|
92
89
|
...Manipulator.getDataAttributes(this._element),
|
|
93
90
|
...(typeof config === 'object' ? config : {})
|
|
94
91
|
}
|
|
95
|
-
|
|
92
|
+
|
|
96
93
|
return config
|
|
97
94
|
}
|
|
98
95
|
|
|
99
96
|
_setActiveLink() {
|
|
100
|
-
Array.from(this._element.querySelectorAll(SELECTOR_NAV_LINK))
|
|
97
|
+
for (const element of Array.from(this._element.querySelectorAll(SELECTOR_NAV_LINK))) {
|
|
101
98
|
if (element.classList.contains(CLASS_NAME_NAV_GROUP_TOGGLE)) {
|
|
102
|
-
|
|
99
|
+
continue
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
let currentUrl = String(window.location)
|
|
@@ -118,6 +115,7 @@ class Navigation extends BaseComponent {
|
|
|
118
115
|
|
|
119
116
|
if (this._config.activeLinksExact && element.href === currentUrl) {
|
|
120
117
|
element.classList.add(CLASS_NAME_ACTIVE)
|
|
118
|
+
// eslint-disable-next-line unicorn/no-array-for-each
|
|
121
119
|
Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
|
|
122
120
|
element.classList.add(CLASS_NAME_SHOW)
|
|
123
121
|
element.setAttribute('aria-expanded', true)
|
|
@@ -126,12 +124,13 @@ class Navigation extends BaseComponent {
|
|
|
126
124
|
|
|
127
125
|
if (!this._config.activeLinksExact && element.href.startsWith(currentUrl)) {
|
|
128
126
|
element.classList.add(CLASS_NAME_ACTIVE)
|
|
127
|
+
// eslint-disable-next-line unicorn/no-array-for-each
|
|
129
128
|
Array.from(this._getParents(element, SELECTOR_NAV_GROUP)).forEach(element => {
|
|
130
129
|
element.classList.add(CLASS_NAME_SHOW)
|
|
131
130
|
element.setAttribute('aria-expanded', true)
|
|
132
131
|
})
|
|
133
132
|
}
|
|
134
|
-
}
|
|
133
|
+
}
|
|
135
134
|
}
|
|
136
135
|
|
|
137
136
|
_getParents(element, selector) {
|
|
@@ -228,12 +227,12 @@ class Navigation extends BaseComponent {
|
|
|
228
227
|
|
|
229
228
|
// Close other groups
|
|
230
229
|
if (this._config.groupsAutoCollapse === true) {
|
|
231
|
-
this._getSiblings(toggler.parentNode, filter)
|
|
230
|
+
for (const element of this._getSiblings(toggler.parentNode, filter)) {
|
|
232
231
|
this._slideUp(SelectorEngine.findOne(SELECTOR_NAV_GROUP_ITEMS, element), () => {
|
|
233
232
|
element.classList.remove(CLASS_NAME_SHOW)
|
|
234
233
|
element.setAttribute('aria-expanded', false)
|
|
235
234
|
})
|
|
236
|
-
}
|
|
235
|
+
}
|
|
237
236
|
}
|
|
238
237
|
|
|
239
238
|
if (toggler.parentNode.classList.contains(CLASS_NAME_SHOW)) {
|
|
@@ -283,9 +282,9 @@ class Navigation extends BaseComponent {
|
|
|
283
282
|
* ------------------------------------------------------------------------
|
|
284
283
|
*/
|
|
285
284
|
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
286
|
-
Array.from(document.querySelectorAll(SELECTOR_DATA_NAVIGATION))
|
|
285
|
+
for (const element of Array.from(document.querySelectorAll(SELECTOR_DATA_NAVIGATION))) {
|
|
287
286
|
Navigation.navigationInterface(element)
|
|
288
|
-
}
|
|
287
|
+
}
|
|
289
288
|
})
|
|
290
289
|
|
|
291
290
|
/**
|