uikit 3.21.13 → 3.21.14-dev.2e8a07c7e
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 +34 -0
- package/dist/css/uikit-core-rtl.css +233 -85
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +233 -85
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +237 -81
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +237 -81
- 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 +2 -11
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +432 -127
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +449 -132
- 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 +2 -2
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +2 -2
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +20 -28
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +2 -2
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +25 -34
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +4 -2
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +8 -12
- 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 +242 -241
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +20 -17
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +668 -549
- package/dist/js/uikit.min.js +1 -1
- package/package.json +3 -3
- package/src/images/icons/arrow-down-arrow-up.svg +6 -0
- package/src/images/icons/arrow-down.svg +3 -3
- package/src/images/icons/arrow-left.svg +3 -3
- package/src/images/icons/arrow-right.svg +3 -3
- package/src/images/icons/arrow-up-right.svg +3 -3
- package/src/images/icons/arrow-up.svg +3 -3
- package/src/images/icons/close-circle.svg +5 -0
- package/src/images/icons/cloud-download.svg +4 -4
- package/src/images/icons/cloud-upload.svg +4 -4
- package/src/images/icons/download.svg +4 -4
- package/src/images/icons/expand.svg +5 -5
- package/src/images/icons/link-external.svg +4 -4
- package/src/images/icons/pull.svg +4 -4
- package/src/images/icons/push.svg +3 -3
- package/src/images/icons/shrink.svg +5 -5
- package/src/images/icons/sign-in.svg +4 -3
- package/src/images/icons/sign-out.svg +4 -3
- package/src/images/icons/sorting.svg +6 -0
- package/src/images/icons/upload.svg +4 -4
- package/src/js/api/boot.js +16 -20
- package/src/js/api/events.js +12 -13
- package/src/js/api/instance.js +1 -1
- package/src/js/components/internal/lightbox-animations.js +2 -1
- package/src/js/components/internal/slideshow-animations.js +5 -5
- package/src/js/components/lightbox-panel.js +184 -45
- package/src/js/components/lightbox.js +59 -6
- package/src/js/components/slideshow.js +1 -2
- package/src/js/components/sortable.js +3 -1
- package/src/js/core/drop.js +3 -1
- package/src/js/core/grid.js +1 -1
- package/src/js/core/icon.js +2 -2
- package/src/js/core/img.js +3 -5
- package/src/js/core/navbar.js +6 -2
- package/src/js/core/scrollspy-nav.js +1 -1
- package/src/js/core/svg.js +8 -10
- package/src/js/core/video.js +4 -3
- package/src/js/mixin/internal/slideshow-animations.js +1 -6
- package/src/js/mixin/modal.js +1 -4
- package/src/js/mixin/slider-drag.js +5 -6
- package/src/js/mixin/slider-nav.js +4 -2
- package/src/js/mixin/slider.js +11 -13
- package/src/js/mixin/slideshow.js +1 -1
- package/src/js/mixin/togglable.js +7 -2
- package/src/js/util/dom.js +3 -1
- package/src/js/util/filter.js +3 -1
- package/src/js/util/player.js +0 -4
- package/src/less/components/background.less +1 -9
- package/src/less/components/breadcrumb.less +6 -2
- package/src/less/components/button.less +1 -1
- package/src/less/components/form-range.less +52 -0
- package/src/less/components/form.less +1 -1
- package/src/less/components/lightbox.less +57 -89
- package/src/less/components/margin.less +14 -0
- package/src/less/components/search.less +49 -23
- package/src/less/components/sticky.less +1 -10
- package/src/less/components/totop.less +1 -1
- package/src/less/components/transition.less +4 -4
- package/src/less/components/visibility.less +3 -2
- package/src/less/theme/form-range.less +12 -0
- package/src/less/theme/lightbox.less +2 -20
- package/src/less/theme/search.less +24 -10
- package/src/scss/components/background.scss +1 -9
- package/src/scss/components/breadcrumb.scss +6 -2
- package/src/scss/components/button.scss +1 -1
- package/src/scss/components/form-range.scss +12 -0
- package/src/scss/components/form.scss +1 -1
- package/src/scss/components/lightbox.scss +50 -77
- package/src/scss/components/margin.scss +13 -0
- package/src/scss/components/search.scss +30 -12
- package/src/scss/components/sticky.scss +1 -10
- package/src/scss/components/totop.scss +1 -1
- package/src/scss/components/transition.scss +4 -4
- package/src/scss/components/visibility.scss +3 -2
- package/src/scss/mixins-theme.scss +51 -12
- package/src/scss/mixins.scss +45 -6
- package/src/scss/theme/form-range.scss +10 -0
- package/src/scss/theme/lightbox.scss +2 -20
- package/src/scss/theme/search.scss +10 -6
- package/src/scss/variables-theme.scss +32 -20
- package/src/scss/variables.scss +29 -24
- package/tests/badge.html +2 -2
- package/tests/base.html +1 -1
- package/tests/breadcrumb.html +23 -5
- package/tests/card.html +24 -24
- package/tests/dropbar.html +15 -15
- package/tests/dropdown.html +6 -6
- package/tests/dropnav.html +100 -100
- package/tests/icon.html +8 -0
- package/tests/index.html +15 -15
- package/tests/lightbox.html +379 -28
- package/tests/margin.html +19 -0
- package/tests/nav.html +21 -21
- package/tests/navbar.html +292 -292
- package/tests/offcanvas.html +27 -27
- package/tests/placeholder.html +2 -2
- package/tests/slider.html +0 -1
- package/tests/slideshow.html +1 -1
- package/tests/sortable.html +5 -5
- package/tests/sticky-navbar.html +114 -114
- package/tests/transition.html +2 -1
|
@@ -1,64 +1,123 @@
|
|
|
1
1
|
import {
|
|
2
2
|
$,
|
|
3
|
+
$$,
|
|
4
|
+
Transition,
|
|
3
5
|
addClass,
|
|
4
6
|
append,
|
|
5
7
|
attr,
|
|
6
8
|
fragment,
|
|
7
9
|
getIndex,
|
|
8
10
|
html,
|
|
11
|
+
isTag,
|
|
12
|
+
matches,
|
|
9
13
|
on,
|
|
14
|
+
parent,
|
|
15
|
+
pick,
|
|
10
16
|
pointerDown,
|
|
11
17
|
pointerMove,
|
|
18
|
+
remove,
|
|
12
19
|
removeClass,
|
|
13
|
-
|
|
20
|
+
toggleClass,
|
|
14
21
|
trigger,
|
|
22
|
+
wrapAll,
|
|
15
23
|
} from 'uikit-util';
|
|
24
|
+
import { wrapInPicture } from '../core/img';
|
|
16
25
|
import Modal from '../mixin/modal';
|
|
17
26
|
import Slideshow from '../mixin/slideshow';
|
|
18
27
|
import { keyMap } from '../util/keys';
|
|
19
28
|
import Animations from './internal/lightbox-animations';
|
|
20
29
|
|
|
21
30
|
export default {
|
|
31
|
+
i18n: {
|
|
32
|
+
counter: '%s / %s',
|
|
33
|
+
},
|
|
34
|
+
|
|
22
35
|
mixins: [Modal, Slideshow],
|
|
23
36
|
|
|
24
37
|
functional: true,
|
|
25
38
|
|
|
26
39
|
props: {
|
|
27
|
-
|
|
40
|
+
counter: Boolean,
|
|
28
41
|
preload: Number,
|
|
42
|
+
nav: Boolean,
|
|
43
|
+
slidenav: Boolean,
|
|
44
|
+
delayControls: Number,
|
|
29
45
|
videoAutoplay: Boolean,
|
|
30
46
|
template: String,
|
|
31
47
|
},
|
|
32
48
|
|
|
33
49
|
data: () => ({
|
|
50
|
+
counter: false,
|
|
34
51
|
preload: 1,
|
|
35
|
-
|
|
52
|
+
nav: false,
|
|
53
|
+
slidenav: true,
|
|
36
54
|
delayControls: 3000,
|
|
55
|
+
videoAutoplay: false,
|
|
37
56
|
items: [],
|
|
38
57
|
cls: 'uk-open',
|
|
39
58
|
clsPage: 'uk-lightbox-page',
|
|
40
|
-
|
|
59
|
+
clsFit: 'uk-lightbox-items-fit',
|
|
60
|
+
clsZoom: 'uk-lightbox-zoom',
|
|
41
61
|
attrItem: 'uk-lightbox-item',
|
|
62
|
+
selList: '.uk-lightbox-items',
|
|
42
63
|
selClose: '.uk-close-large',
|
|
64
|
+
selNav: '.uk-lightbox-thumbnav, .uk-lightbox-dotnav',
|
|
43
65
|
selCaption: '.uk-lightbox-caption',
|
|
66
|
+
selCounter: '.uk-lightbox-counter',
|
|
44
67
|
pauseOnHover: false,
|
|
45
68
|
velocity: 2,
|
|
46
69
|
Animations,
|
|
47
70
|
template: `<div class="uk-lightbox uk-overflow-hidden">
|
|
48
71
|
<div class="uk-lightbox-items"></div>
|
|
49
|
-
<div class="uk-
|
|
50
|
-
<button class="uk-lightbox-
|
|
51
|
-
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
72
|
+
<div class="uk-position-top-right uk-position-small uk-transition-fade" uk-inverse>
|
|
73
|
+
<button class="uk-lightbox-close uk-close-large" type="button" uk-close></button>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="uk-lightbox-slidenav uk-position-center-left uk-position-medium uk-transition-fade" uk-inverse>
|
|
76
|
+
<a href uk-slidenav-previous uk-lightbox-item="previous"></a>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="uk-lightbox-slidenav uk-position-center-right uk-position-medium uk-transition-fade" uk-inverse>
|
|
79
|
+
<a href uk-slidenav-next uk-lightbox-item="next"></a>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="uk-position-center-right uk-position-medium uk-transition-fade" uk-inverse style="max-height: 90vh; overflow: auto;">
|
|
82
|
+
<ul class="uk-lightbox-thumbnav uk-lightbox-thumbnav-vertical uk-thumbnav uk-thumbnav-vertical"></ul>
|
|
83
|
+
<ul class="uk-lightbox-dotnav uk-dotnav uk-dotnav-vertical"></ul>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="uk-lightbox-counter uk-text-large uk-position-top-left uk-position-small uk-transition-fade" uk-inverse></div>
|
|
86
|
+
<div class="uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque"></div>
|
|
55
87
|
</div>`,
|
|
56
88
|
}),
|
|
57
89
|
|
|
58
90
|
created() {
|
|
59
|
-
|
|
91
|
+
let $el = $(this.template);
|
|
92
|
+
|
|
93
|
+
if (isTag($el, 'template')) {
|
|
94
|
+
$el = fragment(html($el));
|
|
95
|
+
}
|
|
96
|
+
|
|
60
97
|
const list = $(this.selList, $el);
|
|
61
|
-
|
|
98
|
+
const navType = this.$props.nav;
|
|
99
|
+
|
|
100
|
+
remove($$(this.selNav, $el).filter((el) => !matches(el, `.uk-${navType}`)));
|
|
101
|
+
|
|
102
|
+
for (const [i, item] of this.items.entries()) {
|
|
103
|
+
append(list, '<div>');
|
|
104
|
+
if (navType === 'thumbnav') {
|
|
105
|
+
wrapAll(
|
|
106
|
+
toThumbnavItem(item, this.videoAutoplay),
|
|
107
|
+
append($(this.selNav, $el), `<li uk-lightbox-item="${i}"><a href></a></li>`),
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!this.slidenav) {
|
|
113
|
+
remove($$('.uk-lightbox-slidenav', $el));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!this.counter) {
|
|
117
|
+
remove($(this.selCounter, $el));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
addClass(list, this.clsFit);
|
|
62
121
|
|
|
63
122
|
const close = $('[uk-close]', $el);
|
|
64
123
|
const closeLabel = this.t('close');
|
|
@@ -71,9 +130,19 @@ export default {
|
|
|
71
130
|
|
|
72
131
|
events: [
|
|
73
132
|
{
|
|
74
|
-
name:
|
|
133
|
+
name: 'click',
|
|
134
|
+
|
|
135
|
+
self: true,
|
|
136
|
+
|
|
137
|
+
filter: ({ bgClose }) => bgClose,
|
|
75
138
|
|
|
76
|
-
|
|
139
|
+
delegate: ({ selList }) => `${selList} > *`,
|
|
140
|
+
|
|
141
|
+
handler(e) {
|
|
142
|
+
if (!e.defaultPrevented) {
|
|
143
|
+
this.hide();
|
|
144
|
+
}
|
|
145
|
+
},
|
|
77
146
|
},
|
|
78
147
|
|
|
79
148
|
{
|
|
@@ -81,21 +150,33 @@ export default {
|
|
|
81
150
|
|
|
82
151
|
self: true,
|
|
83
152
|
|
|
84
|
-
delegate: ({
|
|
153
|
+
delegate: ({ clsZoom }) => `.${clsZoom}`,
|
|
85
154
|
|
|
86
155
|
handler(e) {
|
|
87
156
|
if (!e.defaultPrevented) {
|
|
88
|
-
this.
|
|
157
|
+
toggleClass(this.list, this.clsFit);
|
|
89
158
|
}
|
|
90
159
|
},
|
|
91
160
|
},
|
|
92
161
|
|
|
162
|
+
{
|
|
163
|
+
name: `${pointerMove} ${pointerDown} keydown`,
|
|
164
|
+
|
|
165
|
+
filter: ({ delayControls }) => delayControls,
|
|
166
|
+
|
|
167
|
+
handler() {
|
|
168
|
+
this.showControls();
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
|
|
93
172
|
{
|
|
94
173
|
name: 'shown',
|
|
95
174
|
|
|
96
175
|
self: true,
|
|
97
176
|
|
|
98
|
-
handler
|
|
177
|
+
handler() {
|
|
178
|
+
this.showControls();
|
|
179
|
+
},
|
|
99
180
|
},
|
|
100
181
|
|
|
101
182
|
{
|
|
@@ -153,6 +234,16 @@ export default {
|
|
|
153
234
|
name: 'beforeitemshow',
|
|
154
235
|
|
|
155
236
|
handler(e) {
|
|
237
|
+
html($(this.selCaption, this.$el), this.getItem().caption || '');
|
|
238
|
+
html(
|
|
239
|
+
$(this.selCounter, this.$el),
|
|
240
|
+
this.t('counter', this.index + 1, this.slides.length),
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
for (let j = -this.preload; j <= this.preload; j++) {
|
|
244
|
+
this.loadItem(this.index + j);
|
|
245
|
+
}
|
|
246
|
+
|
|
156
247
|
if (this.isToggled()) {
|
|
157
248
|
return;
|
|
158
249
|
}
|
|
@@ -163,24 +254,12 @@ export default {
|
|
|
163
254
|
|
|
164
255
|
this.toggleElement(this.$el, true, false);
|
|
165
256
|
|
|
166
|
-
this.animation = Animations
|
|
257
|
+
this.animation = Animations.scale;
|
|
167
258
|
removeClass(e.target, this.clsActive);
|
|
168
259
|
this.stack.splice(1, 0, this.index);
|
|
169
260
|
},
|
|
170
261
|
},
|
|
171
262
|
|
|
172
|
-
{
|
|
173
|
-
name: 'itemshow',
|
|
174
|
-
|
|
175
|
-
handler() {
|
|
176
|
-
html($(this.selCaption, this.$el), this.getItem().caption || '');
|
|
177
|
-
|
|
178
|
-
for (let j = -this.preload; j <= this.preload; j++) {
|
|
179
|
-
this.loadItem(this.index + j);
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
|
|
184
263
|
{
|
|
185
264
|
name: 'itemshown',
|
|
186
265
|
|
|
@@ -193,9 +272,9 @@ export default {
|
|
|
193
272
|
name: 'itemload',
|
|
194
273
|
|
|
195
274
|
async handler(_, item) {
|
|
196
|
-
const { source: src, type,
|
|
275
|
+
const { source: src, type, attrs = {} } = item;
|
|
197
276
|
|
|
198
|
-
this.setItem(item, '<span uk-spinner></span>');
|
|
277
|
+
this.setItem(item, '<span uk-spinner uk-inverse></span>');
|
|
199
278
|
|
|
200
279
|
if (!src) {
|
|
201
280
|
return;
|
|
@@ -206,26 +285,32 @@ export default {
|
|
|
206
285
|
allowfullscreen: '',
|
|
207
286
|
style: 'max-width: 100%; box-sizing: border-box;',
|
|
208
287
|
'uk-responsive': '',
|
|
209
|
-
'uk-video': `${this.videoAutoplay}`,
|
|
288
|
+
'uk-video': `${Boolean(this.videoAutoplay)}`,
|
|
210
289
|
};
|
|
211
290
|
|
|
212
291
|
// Image
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
292
|
+
if (type === 'image' || isImage(src)) {
|
|
293
|
+
const img = createEl('img');
|
|
294
|
+
|
|
295
|
+
wrapInPicture(img, item.sources);
|
|
296
|
+
attr(img, {
|
|
297
|
+
src,
|
|
298
|
+
...pick(item, ['alt', 'srcset', 'sizes']),
|
|
299
|
+
...attrs,
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
on(img, 'load', () => this.setItem(item, parent(img) || img));
|
|
219
303
|
on(img, 'error', () => this.setError(item));
|
|
220
304
|
|
|
221
305
|
// Video
|
|
222
|
-
} else if (type === 'video' || src
|
|
306
|
+
} else if (type === 'video' || isVideo(src)) {
|
|
307
|
+
const inline = this.videoAutoplay === 'inline';
|
|
223
308
|
const video = createEl('video', {
|
|
224
309
|
src,
|
|
225
|
-
poster,
|
|
226
|
-
controls: '',
|
|
227
310
|
playsinline: '',
|
|
228
|
-
'
|
|
311
|
+
controls: inline ? null : '',
|
|
312
|
+
poster: this.videoAutoplay ? null : item.poster,
|
|
313
|
+
'uk-video': inline ? 'automute: true' : Boolean(this.videoAutoplay),
|
|
229
314
|
...attrs,
|
|
230
315
|
});
|
|
231
316
|
|
|
@@ -293,8 +378,33 @@ export default {
|
|
|
293
378
|
}
|
|
294
379
|
},
|
|
295
380
|
},
|
|
381
|
+
|
|
382
|
+
{
|
|
383
|
+
name: 'itemloaded',
|
|
384
|
+
handler() {
|
|
385
|
+
this.$emit('resize');
|
|
386
|
+
},
|
|
387
|
+
},
|
|
296
388
|
],
|
|
297
389
|
|
|
390
|
+
update: {
|
|
391
|
+
read() {
|
|
392
|
+
for (const media of $$(`${this.selList} :not([controls]):is(img,video)`, this.$el)) {
|
|
393
|
+
toggleClass(
|
|
394
|
+
media,
|
|
395
|
+
this.clsZoom,
|
|
396
|
+
(media.naturalHeight || media.videoHeight) - this.$el.offsetHeight >
|
|
397
|
+
Math.max(
|
|
398
|
+
0,
|
|
399
|
+
(media.naturalWidth || media.videoWidth) - this.$el.offsetWidth,
|
|
400
|
+
),
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
|
|
405
|
+
events: ['resize'],
|
|
406
|
+
},
|
|
407
|
+
|
|
298
408
|
methods: {
|
|
299
409
|
loadItem(index = this.index) {
|
|
300
410
|
const item = this.getItem(index);
|
|
@@ -317,12 +427,13 @@ export default {
|
|
|
317
427
|
},
|
|
318
428
|
|
|
319
429
|
setError(item) {
|
|
320
|
-
this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>');
|
|
430
|
+
this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2" uk-inverse></span>');
|
|
321
431
|
},
|
|
322
432
|
|
|
323
433
|
showControls() {
|
|
324
434
|
clearTimeout(this.controlsTimer);
|
|
325
|
-
this.controlsTimer =
|
|
435
|
+
this.controlsTimer =
|
|
436
|
+
this.delayControls && setTimeout(this.hideControls, this.delayControls);
|
|
326
437
|
|
|
327
438
|
addClass(this.$el, 'uk-active', 'uk-transition-active');
|
|
328
439
|
},
|
|
@@ -338,3 +449,31 @@ function createEl(tag, attrs) {
|
|
|
338
449
|
attr(el, attrs);
|
|
339
450
|
return el;
|
|
340
451
|
}
|
|
452
|
+
|
|
453
|
+
function toThumbnavItem(item, videoAutoplay) {
|
|
454
|
+
const el =
|
|
455
|
+
item.poster || (item.thumb && (item.type === 'image' || isImage(item.thumb)))
|
|
456
|
+
? createEl('img', { src: item.poster || item.thumb, alt: '' })
|
|
457
|
+
: item.thumb && (item.type === 'video' || isVideo(item.thumb))
|
|
458
|
+
? createEl('video', {
|
|
459
|
+
src: item.thumb,
|
|
460
|
+
loop: '',
|
|
461
|
+
playsinline: '',
|
|
462
|
+
'uk-video': `autoplay: ${Boolean(videoAutoplay)}; automute: true`,
|
|
463
|
+
})
|
|
464
|
+
: createEl('canvas');
|
|
465
|
+
|
|
466
|
+
if (item.thumbRatio) {
|
|
467
|
+
el.style.aspectRatio = item.thumbRatio;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
return el;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
function isImage(src) {
|
|
474
|
+
return src?.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
function isVideo(src) {
|
|
478
|
+
return src?.match(/\.(mp4|webm|ogv)($|\?)/i);
|
|
479
|
+
}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
$,
|
|
3
|
+
$$,
|
|
4
|
+
assign,
|
|
5
|
+
attr,
|
|
6
|
+
findIndex,
|
|
7
|
+
isElement,
|
|
8
|
+
isTag,
|
|
9
|
+
matches,
|
|
10
|
+
on,
|
|
11
|
+
parents,
|
|
12
|
+
uniqueBy,
|
|
13
|
+
} from 'uikit-util';
|
|
2
14
|
import { parseOptions } from '../api/options';
|
|
3
15
|
import LightboxPanel from './lightbox-panel';
|
|
4
16
|
|
|
17
|
+
const selDisabled = '.uk-disabled *, .uk-disabled, [disabled]';
|
|
18
|
+
|
|
5
19
|
export default {
|
|
6
20
|
install,
|
|
7
21
|
|
|
@@ -31,19 +45,27 @@ export default {
|
|
|
31
45
|
events: {
|
|
32
46
|
name: 'click',
|
|
33
47
|
|
|
34
|
-
delegate: ({ toggle }) =>
|
|
48
|
+
delegate: ({ toggle }) => toggle,
|
|
35
49
|
|
|
36
50
|
handler(e) {
|
|
37
51
|
if (!e.defaultPrevented) {
|
|
38
52
|
e.preventDefault();
|
|
39
|
-
|
|
53
|
+
if (!matches(e.current, selDisabled)) {
|
|
54
|
+
this.show(e.current);
|
|
55
|
+
}
|
|
40
56
|
}
|
|
41
57
|
},
|
|
42
58
|
},
|
|
43
59
|
|
|
44
60
|
methods: {
|
|
45
61
|
show(index) {
|
|
46
|
-
|
|
62
|
+
let items = this.toggles.map(toItem);
|
|
63
|
+
|
|
64
|
+
if (this.nav === 'thumbnav') {
|
|
65
|
+
ensureThumb.call(this, this.toggles, items);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
items = uniqueBy(items, 'source');
|
|
47
69
|
|
|
48
70
|
if (isElement(index)) {
|
|
49
71
|
const { source } = toItem(index);
|
|
@@ -71,11 +93,42 @@ function install(UIkit, Lightbox) {
|
|
|
71
93
|
assign(Lightbox.props, UIkit.component('lightboxPanel').options.props);
|
|
72
94
|
}
|
|
73
95
|
|
|
96
|
+
function ensureThumb(toggles, items) {
|
|
97
|
+
for (const [i, toggle] of Object.entries(toggles)) {
|
|
98
|
+
if (items[i].thumb) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const parent = parents(toggle)
|
|
103
|
+
.reverse()
|
|
104
|
+
.concat(toggle)
|
|
105
|
+
.find(
|
|
106
|
+
(parent) =>
|
|
107
|
+
this.$el.contains(parent) &&
|
|
108
|
+
(parent === toggle || $$(this.toggle, parent).length === 1),
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
if (!parent) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const media = $('img,video', parent);
|
|
116
|
+
|
|
117
|
+
if (media) {
|
|
118
|
+
items[i].thumb = media.currentSrc || media.poster || media.src;
|
|
119
|
+
items[i].thumbRatio =
|
|
120
|
+
(media.naturalWidth || media.videoWidth) /
|
|
121
|
+
(media.naturalHeight || media.videoHeight);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
74
126
|
function toItem(el) {
|
|
75
127
|
const item = {};
|
|
76
128
|
|
|
77
|
-
for (const
|
|
78
|
-
|
|
129
|
+
for (const attribute of el.getAttributeNames()) {
|
|
130
|
+
const key = attribute.replace(/^data-/, '');
|
|
131
|
+
item[key === 'href' ? 'source' : key] = el.getAttribute(attribute);
|
|
79
132
|
}
|
|
80
133
|
|
|
81
134
|
item.attrs = parseOptions(item.attrs);
|
package/src/js/core/drop.js
CHANGED
package/src/js/core/grid.js
CHANGED
package/src/js/core/icon.js
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
attr,
|
|
6
6
|
css,
|
|
7
7
|
each,
|
|
8
|
+
fragment,
|
|
8
9
|
hasAttr,
|
|
9
10
|
hasClass,
|
|
10
11
|
hyphenate,
|
|
@@ -35,7 +36,6 @@ import spinner from '../../images/components/spinner.svg';
|
|
|
35
36
|
import totop from '../../images/components/totop.svg';
|
|
36
37
|
import I18n from '../mixin/i18n';
|
|
37
38
|
import Svg from '../mixin/svg';
|
|
38
|
-
import { stringToSvg } from './svg';
|
|
39
39
|
|
|
40
40
|
const icons = {
|
|
41
41
|
spinner,
|
|
@@ -262,7 +262,7 @@ function getIcon(icon) {
|
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
if (!parsed[icon]) {
|
|
265
|
-
parsed[icon] =
|
|
265
|
+
parsed[icon] = fragment(icons[applyRtl(icon)] || icons[icon]);
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
return parsed[icon].cloneNode(true);
|
package/src/js/core/img.js
CHANGED
|
@@ -101,7 +101,7 @@ function setSourceProps(sourceEl, targetEl) {
|
|
|
101
101
|
for (const prop of srcProps) {
|
|
102
102
|
const value = data(sourceEl, prop);
|
|
103
103
|
if (value) {
|
|
104
|
-
attr(targetEl, prop.replace(
|
|
104
|
+
attr(targetEl, prop.replace(/data-/g, ''), value);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -111,14 +111,12 @@ function getImageFromElement(el, src, sources) {
|
|
|
111
111
|
|
|
112
112
|
wrapInPicture(img, sources);
|
|
113
113
|
setSourceProps(el, img);
|
|
114
|
-
img.onload = () =>
|
|
115
|
-
setSrcAttrs(el, img.currentSrc);
|
|
116
|
-
};
|
|
114
|
+
img.onload = () => setSrcAttrs(el, img.currentSrc);
|
|
117
115
|
attr(img, 'src', src);
|
|
118
116
|
return img;
|
|
119
117
|
}
|
|
120
118
|
|
|
121
|
-
function wrapInPicture(img, sources) {
|
|
119
|
+
export function wrapInPicture(img, sources) {
|
|
122
120
|
sources = parseSources(sources);
|
|
123
121
|
|
|
124
122
|
if (sources.length) {
|
package/src/js/core/navbar.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $$, addClass, css, hasClass, offset, removeClass } from 'uikit-util';
|
|
1
|
+
import { $$, addClass, css, hasClass, offset, parent, removeClass } from 'uikit-util';
|
|
2
2
|
import Dropnav from './dropnav';
|
|
3
3
|
|
|
4
4
|
const clsNavbarTransparent = 'uk-navbar-transparent';
|
|
@@ -56,7 +56,11 @@ export default {
|
|
|
56
56
|
|
|
57
57
|
el: ({ dropContainer }) => dropContainer,
|
|
58
58
|
|
|
59
|
-
async handler() {
|
|
59
|
+
async handler(e) {
|
|
60
|
+
if (parent(e.target) !== this.dropContainer) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
60
64
|
await awaitMacroTask();
|
|
61
65
|
|
|
62
66
|
if (!this.getActive() && this._transparent) {
|
package/src/js/core/svg.js
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
addClass,
|
|
3
3
|
attr,
|
|
4
4
|
css,
|
|
5
|
+
fragment,
|
|
5
6
|
includes,
|
|
6
7
|
isTag,
|
|
7
8
|
memoize,
|
|
@@ -94,11 +95,14 @@ const loadSVG = memoize(async (src) => {
|
|
|
94
95
|
if (startsWith(src, 'data:')) {
|
|
95
96
|
return decodeURIComponent(src.split(',')[1]);
|
|
96
97
|
} else {
|
|
97
|
-
|
|
98
|
+
const response = await fetch(src);
|
|
99
|
+
if (response.headers.get('Content-Type') === 'image/svg+xml') {
|
|
100
|
+
return response.text();
|
|
101
|
+
}
|
|
98
102
|
}
|
|
99
|
-
} else {
|
|
100
|
-
return Promise.reject();
|
|
101
103
|
}
|
|
104
|
+
|
|
105
|
+
return Promise.reject();
|
|
102
106
|
});
|
|
103
107
|
|
|
104
108
|
function parseSVG(svg, icon) {
|
|
@@ -106,7 +110,7 @@ function parseSVG(svg, icon) {
|
|
|
106
110
|
svg = parseSymbols(svg)[icon] || svg;
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
return
|
|
113
|
+
return fragment(svg);
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
const symbolRe = /<symbol([^]*?id=(['"])(.+?)\2[^]*?<\/)symbol>/g;
|
|
@@ -131,9 +135,3 @@ function applyAnimation(el) {
|
|
|
131
135
|
css(el, '--uk-animation-stroke', length);
|
|
132
136
|
}
|
|
133
137
|
}
|
|
134
|
-
|
|
135
|
-
export function stringToSvg(string) {
|
|
136
|
-
const container = document.createElement('template');
|
|
137
|
-
container.innerHTML = string;
|
|
138
|
-
return container.content.firstElementChild;
|
|
139
|
-
}
|
package/src/js/core/video.js
CHANGED
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
includes,
|
|
4
4
|
isTag,
|
|
5
5
|
isTouch,
|
|
6
|
-
isVideo,
|
|
7
6
|
mute,
|
|
8
7
|
parent,
|
|
9
8
|
pause,
|
|
@@ -78,7 +77,7 @@ export default {
|
|
|
78
77
|
|
|
79
78
|
observe: [
|
|
80
79
|
intersection({
|
|
81
|
-
filter: ({
|
|
80
|
+
filter: ({ autoplay }) => autoplay !== 'hover',
|
|
82
81
|
handler([{ isIntersecting }]) {
|
|
83
82
|
if (!document.fullscreenElement) {
|
|
84
83
|
if (isIntersecting) {
|
|
@@ -91,7 +90,9 @@ export default {
|
|
|
91
90
|
}
|
|
92
91
|
},
|
|
93
92
|
args: { intersecting: false },
|
|
94
|
-
options: ({ $el, autoplay }) => ({
|
|
93
|
+
options: ({ $el, autoplay }) => ({
|
|
94
|
+
root: autoplay === 'inview' ? null : parent($el).closest(':not(a)'),
|
|
95
|
+
}),
|
|
95
96
|
}),
|
|
96
97
|
],
|
|
97
98
|
};
|
|
@@ -24,10 +24,5 @@ export function translated(el) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export function translate(value = 0, unit = '%') {
|
|
27
|
-
value
|
|
28
|
-
return `translate3d(${value}, 0, 0)`;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function scale3d(value) {
|
|
32
|
-
return `scale3d(${value}, ${value}, 1)`;
|
|
27
|
+
return value ? `translate3d(${value + unit}, 0, 0)` : '';
|
|
33
28
|
}
|