uikit 3.16.11-dev.bde560a72 → 3.16.11-dev.cc1aeb568
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/CHANGELOG.md +1 -0
- package/dist/css/uikit-core-rtl.css +1 -1
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +1 -1
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +1 -1
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +1 -1
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +1 -1
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +24 -28
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +85 -562
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +96 -574
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +1 -1
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +1 -1
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +1 -1
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +79 -72
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +1 -1
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +79 -72
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +14 -18
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +1 -1
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +1 -1
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +309 -336
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +1 -1
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +435 -464
- package/dist/js/uikit.min.js +1 -1
- package/package.json +1 -1
- package/src/js/api/computed.js +48 -1
- package/src/js/api/hooks.js +12 -8
- package/src/js/api/observer.js +23 -41
- package/src/js/api/options.js +1 -0
- package/src/js/api/update.js +21 -37
- package/src/js/api/watch.js +21 -24
- package/src/js/components/filter.js +23 -29
- package/src/js/components/lightbox.js +12 -14
- package/src/js/components/sortable.js +13 -19
- package/src/js/core/accordion.js +32 -45
- package/src/js/core/drop.js +1 -1
- package/src/js/core/dropnav.js +46 -60
- package/src/js/core/height-match.js +2 -8
- package/src/js/core/img.js +6 -5
- package/src/js/core/navbar.js +19 -32
- package/src/js/core/scrollspy-nav.js +10 -12
- package/src/js/core/scrollspy.js +16 -17
- package/src/js/core/switcher.js +29 -40
- package/src/js/core/toggle.js +3 -7
- package/src/js/{util → mixin/internal}/scroll.js +1 -5
- package/src/js/mixin/modal.js +1 -1
- package/src/js/mixin/slider-nav.js +80 -76
- package/src/js/mixin/slider.js +10 -8
- package/src/js/util/fastdom.js +2 -2
- package/tests/drop.html +0 -1
- package/tests/dropnav.html +1 -1
- package/tests/icon.html +0 -2
- package/tests/modal.html +0 -1
- package/tests/nav.html +0 -1
- package/tests/navbar.html +0 -1
- package/tests/progress.html +0 -1
- package/tests/scroll.html +0 -1
- package/tests/sticky-navbar.html +6 -6
package/src/js/core/dropnav.js
CHANGED
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
addClass,
|
|
8
8
|
after,
|
|
9
9
|
attr,
|
|
10
|
-
children,
|
|
11
10
|
css,
|
|
12
11
|
findIndex,
|
|
13
12
|
getIndex,
|
|
@@ -70,82 +69,69 @@ export default {
|
|
|
70
69
|
return query(dropbarAnchor, $el) || $el;
|
|
71
70
|
},
|
|
72
71
|
|
|
73
|
-
dropbar
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
dropbar =
|
|
80
|
-
this._dropbar ||
|
|
81
|
-
query(dropbar, this.$el) ||
|
|
82
|
-
$(`+ .${this.clsDropbar}`, this.$el);
|
|
72
|
+
dropbar({ dropbar }) {
|
|
73
|
+
if (!dropbar) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
83
76
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
watch(dropbar) {
|
|
88
|
-
addClass(
|
|
89
|
-
dropbar,
|
|
90
|
-
'uk-dropbar',
|
|
91
|
-
'uk-dropbar-top',
|
|
92
|
-
this.clsDropbar,
|
|
93
|
-
`uk-${this.$options.name}-dropbar`
|
|
94
|
-
);
|
|
95
|
-
},
|
|
77
|
+
dropbar =
|
|
78
|
+
this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);
|
|
96
79
|
|
|
97
|
-
|
|
80
|
+
return dropbar ? dropbar : (this._dropbar = $('<div></div>'));
|
|
98
81
|
},
|
|
99
82
|
|
|
100
83
|
dropContainer(_, $el) {
|
|
101
84
|
return this.container || $el;
|
|
102
85
|
},
|
|
103
86
|
|
|
104
|
-
dropdowns
|
|
105
|
-
|
|
106
|
-
const dropdowns = $$(`.${clsDrop}`, $el);
|
|
87
|
+
dropdowns({ clsDrop }, $el) {
|
|
88
|
+
const dropdowns = $$(`.${clsDrop}`, $el);
|
|
107
89
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
90
|
+
if (this.dropContainer !== $el) {
|
|
91
|
+
for (const el of $$(`.${clsDrop}`, this.dropContainer)) {
|
|
92
|
+
const target = this.getDropdown(el)?.targetEl;
|
|
93
|
+
if (!includes(dropdowns, el) && target && within(target, this.$el)) {
|
|
94
|
+
dropdowns.push(el);
|
|
114
95
|
}
|
|
115
96
|
}
|
|
97
|
+
}
|
|
116
98
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
watch(dropdowns) {
|
|
121
|
-
this.$create(
|
|
122
|
-
'drop',
|
|
123
|
-
dropdowns.filter((el) => !this.getDropdown(el)),
|
|
124
|
-
{
|
|
125
|
-
...this.$props,
|
|
126
|
-
flip: false,
|
|
127
|
-
shift: true,
|
|
128
|
-
pos: `bottom-${this.align}`,
|
|
129
|
-
boundary: this.boundary === true ? this.$el : this.boundary,
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
},
|
|
99
|
+
return dropdowns;
|
|
100
|
+
},
|
|
133
101
|
|
|
134
|
-
|
|
102
|
+
items({ selNavItem }, $el) {
|
|
103
|
+
return $$(selNavItem, $el);
|
|
135
104
|
},
|
|
105
|
+
},
|
|
136
106
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
107
|
+
watch: {
|
|
108
|
+
dropbar(dropbar) {
|
|
109
|
+
addClass(
|
|
110
|
+
dropbar,
|
|
111
|
+
'uk-dropbar',
|
|
112
|
+
'uk-dropbar-top',
|
|
113
|
+
this.clsDropbar,
|
|
114
|
+
`uk-${this.$options.name}-dropbar`
|
|
115
|
+
);
|
|
116
|
+
},
|
|
141
117
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
118
|
+
dropdowns(dropdowns) {
|
|
119
|
+
this.$create(
|
|
120
|
+
'drop',
|
|
121
|
+
dropdowns.filter((el) => !this.getDropdown(el)),
|
|
122
|
+
{
|
|
123
|
+
...this.$props,
|
|
124
|
+
flip: false,
|
|
125
|
+
shift: true,
|
|
126
|
+
pos: `bottom-${this.align}`,
|
|
127
|
+
boundary: this.boundary === true ? this.$el : this.boundary,
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
},
|
|
147
131
|
|
|
148
|
-
|
|
132
|
+
items(items) {
|
|
133
|
+
attr(items, 'tabindex', -1);
|
|
134
|
+
attr(items[0], 'tabindex', 0);
|
|
149
135
|
},
|
|
150
136
|
},
|
|
151
137
|
|
package/src/js/core/img.js
CHANGED
|
@@ -58,9 +58,10 @@ export default {
|
|
|
58
58
|
},
|
|
59
59
|
|
|
60
60
|
disconnected() {
|
|
61
|
-
if (this.
|
|
62
|
-
this.
|
|
61
|
+
if (this.img) {
|
|
62
|
+
this.img.onload = '';
|
|
63
63
|
}
|
|
64
|
+
delete this.img;
|
|
64
65
|
},
|
|
65
66
|
|
|
66
67
|
observe: intersection({
|
|
@@ -75,8 +76,8 @@ export default {
|
|
|
75
76
|
|
|
76
77
|
methods: {
|
|
77
78
|
load() {
|
|
78
|
-
if (this.
|
|
79
|
-
return this.
|
|
79
|
+
if (this.img) {
|
|
80
|
+
return this.img;
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
const image = isImg(this.$el)
|
|
@@ -85,7 +86,7 @@ export default {
|
|
|
85
86
|
|
|
86
87
|
removeAttr(image, 'loading');
|
|
87
88
|
setSrcAttrs(this.$el, image.currentSrc);
|
|
88
|
-
return (this.
|
|
89
|
+
return (this.img = image);
|
|
89
90
|
},
|
|
90
91
|
},
|
|
91
92
|
};
|
package/src/js/core/navbar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Dropnav from './dropnav';
|
|
2
|
-
import { $$,
|
|
2
|
+
import { $$, css, hasClass } from 'uikit-util';
|
|
3
3
|
|
|
4
4
|
export default {
|
|
5
5
|
extends: Dropnav,
|
|
@@ -10,37 +10,24 @@ export default {
|
|
|
10
10
|
'.uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle', // Simplify with :where() selector once browser target is Safari 14+
|
|
11
11
|
},
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
items
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
container
|
|
32
|
-
).length
|
|
33
|
-
: ''
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
attr($$('.uk-navbar-nav', this.$el), 'role', 'group');
|
|
38
|
-
attr($$('.uk-navbar-nav > *', this.$el), 'role', 'presentation');
|
|
39
|
-
attr(items, 'tabindex', -1);
|
|
40
|
-
attr(items[0], 'tabindex', 0);
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
immediate: true,
|
|
13
|
+
watch: {
|
|
14
|
+
items() {
|
|
15
|
+
const justify = hasClass(this.$el, 'uk-navbar-justify');
|
|
16
|
+
for (const container of $$(
|
|
17
|
+
'.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
|
|
18
|
+
this.$el
|
|
19
|
+
)) {
|
|
20
|
+
css(
|
|
21
|
+
container,
|
|
22
|
+
'flexGrow',
|
|
23
|
+
justify
|
|
24
|
+
? $$(
|
|
25
|
+
'.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
|
|
26
|
+
container
|
|
27
|
+
).length
|
|
28
|
+
: ''
|
|
29
|
+
);
|
|
30
|
+
}
|
|
44
31
|
},
|
|
45
32
|
},
|
|
46
33
|
};
|
|
@@ -31,18 +31,8 @@ export default {
|
|
|
31
31
|
},
|
|
32
32
|
|
|
33
33
|
computed: {
|
|
34
|
-
links
|
|
35
|
-
|
|
36
|
-
return $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
watch(links) {
|
|
40
|
-
if (this.scroll) {
|
|
41
|
-
this.$create('scroll', links, { offset: this.offset || 0 });
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
immediate: true,
|
|
34
|
+
links(_, $el) {
|
|
35
|
+
return $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));
|
|
46
36
|
},
|
|
47
37
|
|
|
48
38
|
elements({ closest: selector }) {
|
|
@@ -50,6 +40,14 @@ export default {
|
|
|
50
40
|
},
|
|
51
41
|
},
|
|
52
42
|
|
|
43
|
+
watch: {
|
|
44
|
+
links(links) {
|
|
45
|
+
if (this.scroll) {
|
|
46
|
+
this.$create('scroll', links, { offset: this.offset || 0 });
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
|
|
53
51
|
observe: scroll(),
|
|
54
52
|
|
|
55
53
|
update: [
|
package/src/js/core/scrollspy.js
CHANGED
|
@@ -34,36 +34,35 @@ export default {
|
|
|
34
34
|
}),
|
|
35
35
|
|
|
36
36
|
computed: {
|
|
37
|
-
elements
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
watch(elements) {
|
|
43
|
-
if (this.hidden) {
|
|
44
|
-
// use `opacity:0` instead of `visibility:hidden` to make content focusable with keyboard
|
|
45
|
-
css(filter(elements, `:not(.${this.inViewClass})`), 'opacity', 0);
|
|
46
|
-
}
|
|
47
|
-
},
|
|
37
|
+
elements({ target }, $el) {
|
|
38
|
+
return target ? $$(target, $el) : [$el];
|
|
39
|
+
},
|
|
40
|
+
},
|
|
48
41
|
|
|
49
|
-
|
|
42
|
+
watch: {
|
|
43
|
+
elements(elements) {
|
|
44
|
+
if (this.hidden) {
|
|
45
|
+
// use `opacity:0` instead of `visibility:hidden` to make content focusable with keyboard
|
|
46
|
+
css(filter(elements, `:not(.${this.inViewClass})`), 'opacity', 0);
|
|
47
|
+
}
|
|
50
48
|
},
|
|
51
49
|
},
|
|
52
50
|
|
|
53
51
|
connected() {
|
|
54
|
-
this.
|
|
52
|
+
this.elementData = new Map();
|
|
55
53
|
},
|
|
56
54
|
|
|
57
55
|
disconnected() {
|
|
58
|
-
for (const [el, state] of this.
|
|
56
|
+
for (const [el, state] of this.elementData.entries()) {
|
|
59
57
|
removeClass(el, this.inViewClass, state?.cls || '');
|
|
60
58
|
}
|
|
59
|
+
delete this.elementData;
|
|
61
60
|
},
|
|
62
61
|
|
|
63
62
|
observe: intersection({
|
|
64
63
|
target: ({ elements }) => elements,
|
|
65
64
|
handler(records) {
|
|
66
|
-
const elements = this.
|
|
65
|
+
const elements = this.elementData;
|
|
67
66
|
for (const { target: el, isIntersecting } of records) {
|
|
68
67
|
if (!elements.has(el)) {
|
|
69
68
|
elements.set(el, {
|
|
@@ -88,7 +87,7 @@ export default {
|
|
|
88
87
|
update: [
|
|
89
88
|
{
|
|
90
89
|
write(data) {
|
|
91
|
-
for (const [el, state] of
|
|
90
|
+
for (const [el, state] of this.elementData.entries()) {
|
|
92
91
|
if (state.show && !state.inview && !state.queued) {
|
|
93
92
|
state.queued = true;
|
|
94
93
|
|
|
@@ -111,7 +110,7 @@ export default {
|
|
|
111
110
|
|
|
112
111
|
methods: {
|
|
113
112
|
toggle(el, inview) {
|
|
114
|
-
const state = this.
|
|
113
|
+
const state = this.elementData.get(el);
|
|
115
114
|
|
|
116
115
|
if (!state) {
|
|
117
116
|
return;
|
package/src/js/core/switcher.js
CHANGED
|
@@ -51,50 +51,16 @@ export default {
|
|
|
51
51
|
},
|
|
52
52
|
|
|
53
53
|
computed: {
|
|
54
|
-
connects
|
|
55
|
-
|
|
56
|
-
return queryAll(connect, $el);
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
watch(connects) {
|
|
60
|
-
if (this.swiping) {
|
|
61
|
-
css(connects, 'touchAction', 'pan-y pinch-zoom');
|
|
62
|
-
}
|
|
63
|
-
this.$emit();
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
document: true,
|
|
67
|
-
immediate: true,
|
|
54
|
+
connects({ connect }, $el) {
|
|
55
|
+
return queryAll(connect, $el);
|
|
68
56
|
},
|
|
69
57
|
|
|
70
|
-
connectChildren
|
|
71
|
-
|
|
72
|
-
return this.connects.map((el) => children(el)).flat();
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
watch() {
|
|
76
|
-
const index = this.index();
|
|
77
|
-
for (const el of this.connects) {
|
|
78
|
-
children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));
|
|
79
|
-
}
|
|
80
|
-
this.$emit();
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
immediate: true,
|
|
58
|
+
connectChildren() {
|
|
59
|
+
return this.connects.map((el) => children(el)).flat();
|
|
84
60
|
},
|
|
85
61
|
|
|
86
|
-
toggles
|
|
87
|
-
|
|
88
|
-
return $$(toggle, $el);
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
watch(toggles) {
|
|
92
|
-
this.$emit();
|
|
93
|
-
const active = this.index();
|
|
94
|
-
this.show(~active ? active : toggles[this.active] || toggles[0]);
|
|
95
|
-
},
|
|
96
|
-
|
|
97
|
-
immediate: true,
|
|
62
|
+
toggles({ toggle }, $el) {
|
|
63
|
+
return $$(toggle, $el);
|
|
98
64
|
},
|
|
99
65
|
|
|
100
66
|
children() {
|
|
@@ -104,6 +70,29 @@ export default {
|
|
|
104
70
|
},
|
|
105
71
|
},
|
|
106
72
|
|
|
73
|
+
watch: {
|
|
74
|
+
connects(connects) {
|
|
75
|
+
if (this.swiping) {
|
|
76
|
+
css(connects, 'touchAction', 'pan-y pinch-zoom');
|
|
77
|
+
}
|
|
78
|
+
this.$emit();
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
connectChildren() {
|
|
82
|
+
const index = this.index();
|
|
83
|
+
for (const el of this.connects) {
|
|
84
|
+
children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));
|
|
85
|
+
}
|
|
86
|
+
this.$emit();
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
toggles(toggles) {
|
|
90
|
+
this.$emit();
|
|
91
|
+
const active = this.index();
|
|
92
|
+
this.show(~active ? active : toggles[this.active] || toggles[0]);
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
|
|
107
96
|
connected() {
|
|
108
97
|
attr(this.$el, 'role', 'tablist');
|
|
109
98
|
},
|
package/src/js/core/toggle.js
CHANGED
|
@@ -42,13 +42,9 @@ export default {
|
|
|
42
42
|
},
|
|
43
43
|
|
|
44
44
|
computed: {
|
|
45
|
-
target
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return (target.length && target) || [$el];
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
document: true,
|
|
45
|
+
target({ href, target }, $el) {
|
|
46
|
+
target = queryAll(target || href, $el);
|
|
47
|
+
return (target.length && target) || [$el];
|
|
52
48
|
},
|
|
53
49
|
},
|
|
54
50
|
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import { width } from '
|
|
2
|
-
import { on } from './event';
|
|
3
|
-
import { matches } from './filter';
|
|
4
|
-
import { css } from './style';
|
|
5
|
-
import { scrollParents } from './viewport';
|
|
1
|
+
import { css, matches, on, scrollParents, width } from 'uikit-util';
|
|
6
2
|
|
|
7
3
|
let prevented;
|
|
8
4
|
export function preventBackgroundScroll(el) {
|
package/src/js/mixin/modal.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
$,
|
|
3
3
|
$$,
|
|
4
|
+
append,
|
|
4
5
|
attr,
|
|
5
6
|
children,
|
|
6
7
|
closest,
|
|
7
8
|
data,
|
|
8
|
-
|
|
9
|
+
empty,
|
|
9
10
|
isNumeric,
|
|
10
11
|
matches,
|
|
11
12
|
toFloat,
|
|
@@ -30,106 +31,109 @@ export default {
|
|
|
30
31
|
},
|
|
31
32
|
|
|
32
33
|
computed: {
|
|
33
|
-
nav
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
watch(nav, prev) {
|
|
39
|
-
attr(nav, 'role', 'tablist');
|
|
40
|
-
|
|
41
|
-
if (prev) {
|
|
42
|
-
this.$emit();
|
|
43
|
-
}
|
|
44
|
-
},
|
|
34
|
+
nav({ selNav }, $el) {
|
|
35
|
+
return $(selNav, $el);
|
|
36
|
+
},
|
|
45
37
|
|
|
46
|
-
|
|
38
|
+
navChildren() {
|
|
39
|
+
return children(this.nav);
|
|
47
40
|
},
|
|
48
41
|
|
|
49
42
|
selNavItem({ attrItem }) {
|
|
50
43
|
return `[${attrItem}],[data-${attrItem}]`;
|
|
51
44
|
},
|
|
52
45
|
|
|
53
|
-
navItems
|
|
54
|
-
|
|
55
|
-
return $$(this.selNavItem, $el);
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
watch() {
|
|
59
|
-
this.$emit();
|
|
60
|
-
},
|
|
46
|
+
navItems(_, $el) {
|
|
47
|
+
return $$(this.selNavItem, $el);
|
|
61
48
|
},
|
|
62
49
|
},
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
ariaRoleDescription: 'carousel',
|
|
68
|
-
});
|
|
69
|
-
},
|
|
51
|
+
watch: {
|
|
52
|
+
nav(nav, prev) {
|
|
53
|
+
attr(nav, 'role', 'tablist');
|
|
70
54
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
attr(slide, {
|
|
76
|
-
role: this.nav ? 'tabpanel' : 'group',
|
|
77
|
-
'aria-label': this.t('slideLabel', i + 1, this.length),
|
|
78
|
-
'aria-roledescription': this.nav ? null : 'slide',
|
|
79
|
-
})
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
if (this.nav && this.length !== this.nav.children.length) {
|
|
83
|
-
html(
|
|
84
|
-
this.nav,
|
|
85
|
-
this.slides
|
|
86
|
-
.map((_, i) => `<li ${this.attrItem}="${i}"><a href></a></li>`)
|
|
87
|
-
.join('')
|
|
88
|
-
);
|
|
89
|
-
}
|
|
55
|
+
if (prev) {
|
|
56
|
+
this.$emit();
|
|
57
|
+
}
|
|
58
|
+
},
|
|
90
59
|
|
|
91
|
-
|
|
60
|
+
list(list) {
|
|
61
|
+
attr(list, 'role', 'presentation');
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
navChildren(children) {
|
|
65
|
+
attr(children, 'role', 'presentation');
|
|
66
|
+
},
|
|
92
67
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
68
|
+
navItems(items) {
|
|
69
|
+
for (const el of items) {
|
|
70
|
+
const cmd = data(el, this.attrItem);
|
|
71
|
+
const button = $('a,button', el) || el;
|
|
96
72
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
73
|
+
let ariaLabel;
|
|
74
|
+
let ariaControls = null;
|
|
75
|
+
if (isNumeric(cmd)) {
|
|
76
|
+
const item = toNumber(cmd);
|
|
77
|
+
const slide = this.slides[item];
|
|
102
78
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
ariaControls = slide.id;
|
|
79
|
+
if (slide) {
|
|
80
|
+
if (!slide.id) {
|
|
81
|
+
slide.id = generateId(this, slide, `-item-${cmd}`);
|
|
108
82
|
}
|
|
83
|
+
ariaControls = slide.id;
|
|
84
|
+
}
|
|
109
85
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
attr(button, 'role', 'tab');
|
|
113
|
-
} else {
|
|
114
|
-
if (this.list) {
|
|
115
|
-
if (!this.list.id) {
|
|
116
|
-
this.list.id = generateId(this, this.list, '-items');
|
|
117
|
-
}
|
|
86
|
+
ariaLabel = this.t('slideX', toFloat(cmd) + 1);
|
|
118
87
|
|
|
119
|
-
|
|
88
|
+
attr(button, 'role', 'tab');
|
|
89
|
+
} else {
|
|
90
|
+
if (this.list) {
|
|
91
|
+
if (!this.list.id) {
|
|
92
|
+
this.list.id = generateId(this, this.list, '-items');
|
|
120
93
|
}
|
|
121
94
|
|
|
122
|
-
|
|
95
|
+
ariaControls = this.list.id;
|
|
123
96
|
}
|
|
124
97
|
|
|
125
|
-
|
|
126
|
-
'aria-controls': ariaControls,
|
|
127
|
-
'aria-label': attr(button, 'aria-label') || ariaLabel,
|
|
128
|
-
});
|
|
98
|
+
ariaLabel = this.t(cmd);
|
|
129
99
|
}
|
|
130
|
-
|
|
100
|
+
|
|
101
|
+
attr(button, {
|
|
102
|
+
'aria-controls': ariaControls,
|
|
103
|
+
'aria-label': attr(button, 'aria-label') || ariaLabel,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
slides(slides) {
|
|
109
|
+
slides.forEach((slide, i) =>
|
|
110
|
+
attr(slide, {
|
|
111
|
+
role: this.nav ? 'tabpanel' : 'group',
|
|
112
|
+
'aria-label': this.t('slideLabel', i + 1, this.length),
|
|
113
|
+
'aria-roledescription': this.nav ? null : 'slide',
|
|
114
|
+
})
|
|
115
|
+
);
|
|
131
116
|
},
|
|
132
117
|
|
|
118
|
+
length(length) {
|
|
119
|
+
const navLength = this.navChildren.length;
|
|
120
|
+
if (this.nav && length !== navLength) {
|
|
121
|
+
empty(this.nav);
|
|
122
|
+
for (let i = 0; i < length; i++) {
|
|
123
|
+
append(this.nav, `<li ${this.attrItem}="${i}"><a href></a></li>`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
connected() {
|
|
130
|
+
attr(this.$el, {
|
|
131
|
+
role: this.role,
|
|
132
|
+
ariaRoleDescription: 'carousel',
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
update: [
|
|
133
137
|
{
|
|
134
138
|
write() {
|
|
135
139
|
this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));
|