@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/tab.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.2): tab.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's tab.js
|
|
@@ -8,198 +8,285 @@
|
|
|
8
8
|
* --------------------------------------------------------------------------
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
defineJQueryPlugin,
|
|
13
|
-
getElementFromSelector,
|
|
14
|
-
isDisabled,
|
|
15
|
-
reflow
|
|
16
|
-
} from './util/index'
|
|
11
|
+
import { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'
|
|
17
12
|
import EventHandler from './dom/event-handler'
|
|
18
13
|
import SelectorEngine from './dom/selector-engine'
|
|
19
14
|
import BaseComponent from './base-component'
|
|
20
15
|
|
|
21
16
|
/**
|
|
22
|
-
* ------------------------------------------------------------------------
|
|
23
17
|
* Constants
|
|
24
|
-
* ------------------------------------------------------------------------
|
|
25
18
|
*/
|
|
26
19
|
|
|
27
20
|
const NAME = 'tab'
|
|
28
21
|
const DATA_KEY = 'coreui.tab'
|
|
29
22
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
30
|
-
const DATA_API_KEY = '.data-api'
|
|
31
23
|
|
|
32
24
|
const EVENT_HIDE = `hide${EVENT_KEY}`
|
|
33
25
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`
|
|
34
26
|
const EVENT_SHOW = `show${EVENT_KEY}`
|
|
35
27
|
const EVENT_SHOWN = `shown${EVENT_KEY}`
|
|
36
|
-
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}
|
|
28
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}`
|
|
29
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY}`
|
|
30
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`
|
|
31
|
+
|
|
32
|
+
const ARROW_LEFT_KEY = 'ArrowLeft'
|
|
33
|
+
const ARROW_RIGHT_KEY = 'ArrowRight'
|
|
34
|
+
const ARROW_UP_KEY = 'ArrowUp'
|
|
35
|
+
const ARROW_DOWN_KEY = 'ArrowDown'
|
|
37
36
|
|
|
38
|
-
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'
|
|
39
37
|
const CLASS_NAME_ACTIVE = 'active'
|
|
40
38
|
const CLASS_NAME_FADE = 'fade'
|
|
41
39
|
const CLASS_NAME_SHOW = 'show'
|
|
40
|
+
const CLASS_DROPDOWN = 'dropdown'
|
|
42
41
|
|
|
43
|
-
const SELECTOR_DROPDOWN = '.dropdown'
|
|
44
|
-
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
|
|
45
|
-
const SELECTOR_ACTIVE = '.active'
|
|
46
|
-
const SELECTOR_ACTIVE_UL = ':scope > li > .active'
|
|
47
|
-
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="tab"], [data-coreui-toggle="pill"], [data-coreui-toggle="list"]'
|
|
48
42
|
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
|
|
49
|
-
const
|
|
43
|
+
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'
|
|
44
|
+
const SELECTOR_DROPDOWN_ITEM = '.dropdown-item'
|
|
45
|
+
const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'
|
|
46
|
+
|
|
47
|
+
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'
|
|
48
|
+
const SELECTOR_OUTER = '.nav-item, .list-group-item'
|
|
49
|
+
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`
|
|
50
|
+
const SELECTOR_DATA_TOGGLE = '[data-coreui-toggle="tab"], [data-coreui-toggle="pill"], [data-coreui-toggle="list"]' // todo:v6: could be only `tab`
|
|
51
|
+
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`
|
|
52
|
+
|
|
53
|
+
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-coreui-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-coreui-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-coreui-toggle="list"]`
|
|
50
54
|
|
|
51
55
|
/**
|
|
52
|
-
*
|
|
53
|
-
* Class Definition
|
|
54
|
-
* ------------------------------------------------------------------------
|
|
56
|
+
* Class definition
|
|
55
57
|
*/
|
|
56
58
|
|
|
57
59
|
class Tab extends BaseComponent {
|
|
58
|
-
|
|
60
|
+
constructor(element) {
|
|
61
|
+
super(element)
|
|
62
|
+
this._parent = this._element.closest(SELECTOR_TAB_PANEL)
|
|
63
|
+
|
|
64
|
+
if (!this._parent) {
|
|
65
|
+
return
|
|
66
|
+
// todo: should Throw exception on v6
|
|
67
|
+
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Set up initial aria attributes
|
|
71
|
+
this._setInitialAttributes(this._parent, this._getChildren())
|
|
72
|
+
|
|
73
|
+
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))
|
|
74
|
+
}
|
|
59
75
|
|
|
76
|
+
// Getters
|
|
60
77
|
static get NAME() {
|
|
61
78
|
return NAME
|
|
62
79
|
}
|
|
63
80
|
|
|
64
81
|
// Public
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
this._element.parentNode.nodeType === Node.ELEMENT_NODE &&
|
|
69
|
-
this._element.classList.contains(CLASS_NAME_ACTIVE))) {
|
|
82
|
+
show() { // Shows this elem and deactivate the active sibling if exists
|
|
83
|
+
const innerElem = this._element
|
|
84
|
+
if (this._elemIsActive(innerElem)) {
|
|
70
85
|
return
|
|
71
86
|
}
|
|
72
87
|
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP)
|
|
88
|
+
// Search for active tab on same parent to deactivate it
|
|
89
|
+
const active = this._getActiveElem()
|
|
76
90
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
previous = SelectorEngine.find(itemSelector, listElement)
|
|
80
|
-
previous = previous[previous.length - 1]
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const hideEvent = previous ?
|
|
84
|
-
EventHandler.trigger(previous, EVENT_HIDE, {
|
|
85
|
-
relatedTarget: this._element
|
|
86
|
-
}) :
|
|
91
|
+
const hideEvent = active ?
|
|
92
|
+
EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :
|
|
87
93
|
null
|
|
88
94
|
|
|
89
|
-
const showEvent = EventHandler.trigger(
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })
|
|
96
|
+
|
|
97
|
+
if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
this._deactivate(active, innerElem)
|
|
102
|
+
this._activate(innerElem, active)
|
|
103
|
+
}
|
|
92
104
|
|
|
93
|
-
|
|
105
|
+
// Private
|
|
106
|
+
_activate(element, relatedElem) {
|
|
107
|
+
if (!element) {
|
|
94
108
|
return
|
|
95
109
|
}
|
|
96
110
|
|
|
97
|
-
|
|
111
|
+
element.classList.add(CLASS_NAME_ACTIVE)
|
|
112
|
+
|
|
113
|
+
this._activate(getElementFromSelector(element)) // Search and activate/show the proper section
|
|
98
114
|
|
|
115
|
+
const isAnimated = element.classList.contains(CLASS_NAME_FADE)
|
|
99
116
|
const complete = () => {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
if (isAnimated) { // todo: maybe is redundant
|
|
118
|
+
element.classList.add(CLASS_NAME_SHOW)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
element.focus()
|
|
126
|
+
element.removeAttribute('tabindex')
|
|
127
|
+
element.setAttribute('aria-selected', true)
|
|
128
|
+
this._toggleDropDown(element, true)
|
|
129
|
+
EventHandler.trigger(element, EVENT_SHOWN, {
|
|
130
|
+
relatedTarget: relatedElem
|
|
105
131
|
})
|
|
106
132
|
}
|
|
107
133
|
|
|
108
|
-
|
|
109
|
-
this._activate(target, target.parentNode, complete)
|
|
110
|
-
} else {
|
|
111
|
-
complete()
|
|
112
|
-
}
|
|
134
|
+
this._queueCallback(complete, element, isAnimated)
|
|
113
135
|
}
|
|
114
136
|
|
|
115
|
-
|
|
137
|
+
_deactivate(element, relatedElem) {
|
|
138
|
+
if (!element) {
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
element.classList.remove(CLASS_NAME_ACTIVE)
|
|
143
|
+
element.blur()
|
|
144
|
+
|
|
145
|
+
this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too
|
|
146
|
+
|
|
147
|
+
const isAnimated = element.classList.contains(CLASS_NAME_FADE)
|
|
148
|
+
const complete = () => {
|
|
149
|
+
if (isAnimated) { // todo maybe is redundant
|
|
150
|
+
element.classList.remove(CLASS_NAME_SHOW)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
154
|
+
return
|
|
155
|
+
}
|
|
116
156
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
157
|
+
element.setAttribute('aria-selected', false)
|
|
158
|
+
element.setAttribute('tabindex', '-1')
|
|
159
|
+
this._toggleDropDown(element, false)
|
|
160
|
+
EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this._queueCallback(complete, element, isAnimated)
|
|
164
|
+
}
|
|
121
165
|
|
|
122
|
-
|
|
123
|
-
|
|
166
|
+
_keydown(event) {
|
|
167
|
+
if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {
|
|
168
|
+
return
|
|
169
|
+
}
|
|
124
170
|
|
|
125
|
-
|
|
171
|
+
event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page
|
|
172
|
+
event.preventDefault()
|
|
173
|
+
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)
|
|
174
|
+
const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)
|
|
126
175
|
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
this._queueCallback(complete, element, true)
|
|
130
|
-
} else {
|
|
131
|
-
complete()
|
|
176
|
+
if (nextActiveElement) {
|
|
177
|
+
Tab.getOrCreateInstance(nextActiveElement).show()
|
|
132
178
|
}
|
|
133
179
|
}
|
|
134
180
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
181
|
+
_getChildren() { // collection of inner elements
|
|
182
|
+
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)
|
|
183
|
+
}
|
|
138
184
|
|
|
139
|
-
|
|
185
|
+
_getActiveElem() {
|
|
186
|
+
return this._getChildren().find(child => this._elemIsActive(child)) || null
|
|
187
|
+
}
|
|
140
188
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
189
|
+
_setInitialAttributes(parent, children) {
|
|
190
|
+
this._setAttributeIfNotExists(parent, 'role', 'tablist')
|
|
144
191
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
192
|
+
for (const child of children) {
|
|
193
|
+
this._setInitialAttributesOnChild(child)
|
|
148
194
|
}
|
|
195
|
+
}
|
|
149
196
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
197
|
+
_setInitialAttributesOnChild(child) {
|
|
198
|
+
child = this._getInnerElement(child)
|
|
199
|
+
const isActive = this._elemIsActive(child)
|
|
200
|
+
const outerElem = this._getOuterElement(child)
|
|
201
|
+
child.setAttribute('aria-selected', isActive)
|
|
202
|
+
|
|
203
|
+
if (outerElem !== child) {
|
|
204
|
+
this._setAttributeIfNotExists(outerElem, 'role', 'presentation')
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (!isActive) {
|
|
208
|
+
child.setAttribute('tabindex', '-1')
|
|
153
209
|
}
|
|
154
210
|
|
|
155
|
-
|
|
211
|
+
this._setAttributeIfNotExists(child, 'role', 'tab')
|
|
212
|
+
|
|
213
|
+
// set attributes to the related panel too
|
|
214
|
+
this._setInitialAttributesOnTargetPanel(child)
|
|
215
|
+
}
|
|
156
216
|
|
|
157
|
-
|
|
158
|
-
|
|
217
|
+
_setInitialAttributesOnTargetPanel(child) {
|
|
218
|
+
const target = getElementFromSelector(child)
|
|
219
|
+
|
|
220
|
+
if (!target) {
|
|
221
|
+
return
|
|
159
222
|
}
|
|
160
223
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
224
|
+
this._setAttributeIfNotExists(target, 'role', 'tabpanel')
|
|
225
|
+
|
|
226
|
+
if (child.id) {
|
|
227
|
+
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)
|
|
164
228
|
}
|
|
229
|
+
}
|
|
165
230
|
|
|
166
|
-
|
|
167
|
-
|
|
231
|
+
_toggleDropDown(element, open) {
|
|
232
|
+
const outerElem = this._getOuterElement(element)
|
|
233
|
+
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
|
|
234
|
+
return
|
|
235
|
+
}
|
|
168
236
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
237
|
+
const toggle = (selector, className) => {
|
|
238
|
+
const element = SelectorEngine.findOne(selector, outerElem)
|
|
239
|
+
if (element) {
|
|
240
|
+
element.classList.toggle(className, open)
|
|
172
241
|
}
|
|
173
|
-
|
|
174
|
-
element.setAttribute('aria-expanded', true)
|
|
175
242
|
}
|
|
176
243
|
|
|
177
|
-
|
|
178
|
-
|
|
244
|
+
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)
|
|
245
|
+
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)
|
|
246
|
+
toggle(SELECTOR_DROPDOWN_ITEM, CLASS_NAME_ACTIVE)
|
|
247
|
+
outerElem.setAttribute('aria-expanded', open)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
_setAttributeIfNotExists(element, attribute, value) {
|
|
251
|
+
if (!element.hasAttribute(attribute)) {
|
|
252
|
+
element.setAttribute(attribute, value)
|
|
179
253
|
}
|
|
180
254
|
}
|
|
181
255
|
|
|
182
|
-
|
|
256
|
+
_elemIsActive(elem) {
|
|
257
|
+
return elem.classList.contains(CLASS_NAME_ACTIVE)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Try to get the inner element (usually the .nav-link)
|
|
261
|
+
_getInnerElement(elem) {
|
|
262
|
+
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Try to get the outer element (usually the .nav-item)
|
|
266
|
+
_getOuterElement(elem) {
|
|
267
|
+
return elem.closest(SELECTOR_OUTER) || elem
|
|
268
|
+
}
|
|
183
269
|
|
|
270
|
+
// Static
|
|
184
271
|
static jQueryInterface(config) {
|
|
185
272
|
return this.each(function () {
|
|
186
273
|
const data = Tab.getOrCreateInstance(this)
|
|
187
274
|
|
|
188
|
-
if (typeof config
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
275
|
+
if (typeof config !== 'string') {
|
|
276
|
+
return
|
|
277
|
+
}
|
|
192
278
|
|
|
193
|
-
|
|
279
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
280
|
+
throw new TypeError(`No method named "${config}"`)
|
|
194
281
|
}
|
|
282
|
+
|
|
283
|
+
data[config]()
|
|
195
284
|
})
|
|
196
285
|
}
|
|
197
286
|
}
|
|
198
287
|
|
|
199
288
|
/**
|
|
200
|
-
*
|
|
201
|
-
* Data Api implementation
|
|
202
|
-
* ------------------------------------------------------------------------
|
|
289
|
+
* Data API implementation
|
|
203
290
|
*/
|
|
204
291
|
|
|
205
292
|
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
@@ -211,15 +298,19 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
|
|
|
211
298
|
return
|
|
212
299
|
}
|
|
213
300
|
|
|
214
|
-
|
|
215
|
-
data.show()
|
|
301
|
+
Tab.getOrCreateInstance(this).show()
|
|
216
302
|
})
|
|
217
303
|
|
|
218
304
|
/**
|
|
219
|
-
*
|
|
305
|
+
* Initialize on focus
|
|
306
|
+
*/
|
|
307
|
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
308
|
+
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
|
|
309
|
+
Tab.getOrCreateInstance(element)
|
|
310
|
+
}
|
|
311
|
+
})
|
|
312
|
+
/**
|
|
220
313
|
* jQuery
|
|
221
|
-
* ------------------------------------------------------------------------
|
|
222
|
-
* add .Tab to jQuery only if jQuery is present
|
|
223
314
|
*/
|
|
224
315
|
|
|
225
316
|
defineJQueryPlugin(Tab)
|
package/js/src/toast.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* --------------------------------------------------------------------------
|
|
3
|
-
* CoreUI (v4.
|
|
3
|
+
* CoreUI (v4.2.2): toast.js
|
|
4
4
|
* Licensed under MIT (https://coreui.io/license)
|
|
5
5
|
*
|
|
6
6
|
* This component is a modified version of the Bootstrap's toast.js
|
|
@@ -8,20 +8,13 @@
|
|
|
8
8
|
* --------------------------------------------------------------------------
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
defineJQueryPlugin,
|
|
13
|
-
reflow,
|
|
14
|
-
typeCheckConfig
|
|
15
|
-
} from './util/index'
|
|
11
|
+
import { defineJQueryPlugin, reflow } from './util/index'
|
|
16
12
|
import EventHandler from './dom/event-handler'
|
|
17
|
-
import Manipulator from './dom/manipulator'
|
|
18
13
|
import BaseComponent from './base-component'
|
|
19
14
|
import { enableDismissTrigger } from './util/component-functions'
|
|
20
15
|
|
|
21
16
|
/**
|
|
22
|
-
* ------------------------------------------------------------------------
|
|
23
17
|
* Constants
|
|
24
|
-
* ------------------------------------------------------------------------
|
|
25
18
|
*/
|
|
26
19
|
|
|
27
20
|
const NAME = 'toast'
|
|
@@ -55,16 +48,13 @@ const Default = {
|
|
|
55
48
|
}
|
|
56
49
|
|
|
57
50
|
/**
|
|
58
|
-
*
|
|
59
|
-
* Class Definition
|
|
60
|
-
* ------------------------------------------------------------------------
|
|
51
|
+
* Class definition
|
|
61
52
|
*/
|
|
62
53
|
|
|
63
54
|
class Toast extends BaseComponent {
|
|
64
55
|
constructor(element, config) {
|
|
65
|
-
super(element)
|
|
56
|
+
super(element, config)
|
|
66
57
|
|
|
67
|
-
this._config = this._getConfig(config)
|
|
68
58
|
this._timeout = null
|
|
69
59
|
this._hasMouseInteraction = false
|
|
70
60
|
this._hasKeyboardInteraction = false
|
|
@@ -72,21 +62,19 @@ class Toast extends BaseComponent {
|
|
|
72
62
|
}
|
|
73
63
|
|
|
74
64
|
// Getters
|
|
65
|
+
static get Default() {
|
|
66
|
+
return Default
|
|
67
|
+
}
|
|
75
68
|
|
|
76
69
|
static get DefaultType() {
|
|
77
70
|
return DefaultType
|
|
78
71
|
}
|
|
79
72
|
|
|
80
|
-
static get Default() {
|
|
81
|
-
return Default
|
|
82
|
-
}
|
|
83
|
-
|
|
84
73
|
static get NAME() {
|
|
85
74
|
return NAME
|
|
86
75
|
}
|
|
87
76
|
|
|
88
77
|
// Public
|
|
89
|
-
|
|
90
78
|
show() {
|
|
91
79
|
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)
|
|
92
80
|
|
|
@@ -109,14 +97,13 @@ class Toast extends BaseComponent {
|
|
|
109
97
|
|
|
110
98
|
this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated
|
|
111
99
|
reflow(this._element)
|
|
112
|
-
this._element.classList.add(CLASS_NAME_SHOW)
|
|
113
|
-
this._element.classList.add(CLASS_NAME_SHOWING)
|
|
100
|
+
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)
|
|
114
101
|
|
|
115
102
|
this._queueCallback(complete, this._element, this._config.animation)
|
|
116
103
|
}
|
|
117
104
|
|
|
118
105
|
hide() {
|
|
119
|
-
if (!this.
|
|
106
|
+
if (!this.isShown()) {
|
|
120
107
|
return
|
|
121
108
|
}
|
|
122
109
|
|
|
@@ -128,8 +115,7 @@ class Toast extends BaseComponent {
|
|
|
128
115
|
|
|
129
116
|
const complete = () => {
|
|
130
117
|
this._element.classList.add(CLASS_NAME_HIDE) // @deprecated
|
|
131
|
-
this._element.classList.remove(CLASS_NAME_SHOWING)
|
|
132
|
-
this._element.classList.remove(CLASS_NAME_SHOW)
|
|
118
|
+
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)
|
|
133
119
|
EventHandler.trigger(this._element, EVENT_HIDDEN)
|
|
134
120
|
}
|
|
135
121
|
|
|
@@ -140,27 +126,19 @@ class Toast extends BaseComponent {
|
|
|
140
126
|
dispose() {
|
|
141
127
|
this._clearTimeout()
|
|
142
128
|
|
|
143
|
-
if (this.
|
|
129
|
+
if (this.isShown()) {
|
|
144
130
|
this._element.classList.remove(CLASS_NAME_SHOW)
|
|
145
131
|
}
|
|
146
132
|
|
|
147
133
|
super.dispose()
|
|
148
134
|
}
|
|
149
135
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
_getConfig(config) {
|
|
153
|
-
config = {
|
|
154
|
-
...Default,
|
|
155
|
-
...Manipulator.getDataAttributes(this._element),
|
|
156
|
-
...(typeof config === 'object' && config ? config : {})
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
typeCheckConfig(NAME, config, this.constructor.DefaultType)
|
|
160
|
-
|
|
161
|
-
return config
|
|
136
|
+
isShown() {
|
|
137
|
+
return this._element.classList.contains(CLASS_NAME_SHOW)
|
|
162
138
|
}
|
|
163
139
|
|
|
140
|
+
// Private
|
|
141
|
+
|
|
164
142
|
_maybeScheduleHide() {
|
|
165
143
|
if (!this._config.autohide) {
|
|
166
144
|
return
|
|
@@ -215,7 +193,6 @@ class Toast extends BaseComponent {
|
|
|
215
193
|
}
|
|
216
194
|
|
|
217
195
|
// Static
|
|
218
|
-
|
|
219
196
|
static jQueryInterface(config) {
|
|
220
197
|
return this.each(function () {
|
|
221
198
|
const data = Toast.getOrCreateInstance(this, config)
|
|
@@ -231,13 +208,14 @@ class Toast extends BaseComponent {
|
|
|
231
208
|
}
|
|
232
209
|
}
|
|
233
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Data API implementation
|
|
213
|
+
*/
|
|
214
|
+
|
|
234
215
|
enableDismissTrigger(Toast)
|
|
235
216
|
|
|
236
217
|
/**
|
|
237
|
-
* ------------------------------------------------------------------------
|
|
238
218
|
* jQuery
|
|
239
|
-
* ------------------------------------------------------------------------
|
|
240
|
-
* add .Toast to jQuery only if jQuery is present
|
|
241
219
|
*/
|
|
242
220
|
|
|
243
221
|
defineJQueryPlugin(Toast)
|