uikit 3.11.2-dev.fb043abc2 → 3.12.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/.eslintrc.json +4 -49
- package/.prettierignore +14 -0
- package/.prettierrc.json +13 -0
- package/.webstorm.js +3 -3
- package/CHANGELOG.md +63 -20
- package/build/.eslintrc.json +1 -3
- package/build/build.js +26 -28
- package/build/icons.js +7 -11
- package/build/less.js +48 -36
- package/build/package.json +2 -2
- package/build/prefix.js +21 -18
- package/build/publishDev.js +6 -8
- package/build/release.js +20 -17
- package/build/scope.js +21 -11
- package/build/scss.js +72 -39
- package/build/util.js +71 -62
- package/build/wrapper/icons.js +0 -2
- package/dist/css/uikit-core-rtl.css +144 -202
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +144 -202
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +146 -208
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +146 -208
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +66 -138
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +408 -439
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1091 -1319
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1137 -1396
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +94 -114
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +347 -361
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +345 -360
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +749 -843
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +345 -360
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +628 -798
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +587 -620
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +324 -356
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +156 -167
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5317 -6554
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +7 -9
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +8018 -9698
- package/dist/js/uikit.min.js +1 -1
- package/jsconfig.json +1 -1
- package/package.json +64 -60
- package/src/js/api/boot.js +25 -32
- package/src/js/api/component.js +15 -28
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +14 -33
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +199 -187
- package/src/js/components/countdown.js +32 -85
- package/src/js/components/filter.js +70 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +14 -25
- package/src/js/components/internal/slider-preload.js +9 -0
- package/src/js/components/internal/slider-transitioner.js +66 -45
- package/src/js/components/internal/slideshow-animations.js +46 -64
- package/src/js/components/lightbox-panel.js +107 -105
- package/src/js/components/lightbox.js +17 -39
- package/src/js/components/notification.js +49 -43
- package/src/js/components/parallax.js +16 -30
- package/src/js/components/slider-parallax.js +13 -23
- package/src/js/components/slider.js +117 -89
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +15 -13
- package/src/js/components/sortable.js +125 -106
- package/src/js/components/tooltip.js +41 -31
- package/src/js/components/upload.js +53 -63
- package/src/js/core/accordion.js +58 -48
- package/src/js/core/alert.js +9 -17
- package/src/js/core/core.js +17 -69
- package/src/js/core/cover.js +15 -15
- package/src/js/core/drop.js +110 -94
- package/src/js/core/form-custom.js +22 -27
- package/src/js/core/gif.js +3 -7
- package/src/js/core/grid.js +57 -58
- package/src/js/core/height-match.js +16 -29
- package/src/js/core/height-viewport.js +30 -34
- package/src/js/core/icon.js +47 -52
- package/src/js/core/img.js +153 -143
- package/src/js/core/index.js +39 -39
- package/src/js/core/leader.js +9 -18
- package/src/js/core/margin.js +21 -37
- package/src/js/core/modal.js +49 -36
- package/src/js/core/nav.js +2 -4
- package/src/js/core/navbar.js +113 -85
- package/src/js/core/offcanvas.js +51 -54
- package/src/js/core/overflow-auto.js +13 -17
- package/src/js/core/responsive.js +14 -12
- package/src/js/core/scroll.js +10 -20
- package/src/js/core/scrollspy-nav.js +34 -31
- package/src/js/core/scrollspy.js +37 -54
- package/src/js/core/sticky.js +161 -128
- package/src/js/core/svg.js +68 -83
- package/src/js/core/switcher.js +56 -47
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +69 -68
- package/src/js/core/video.js +22 -21
- package/src/js/mixin/animate.js +19 -20
- package/src/js/mixin/class.js +2 -4
- package/src/js/mixin/container.js +7 -11
- package/src/js/mixin/internal/animate-fade.js +73 -30
- package/src/js/mixin/internal/animate-slide.js +58 -41
- package/src/js/mixin/internal/slideshow-animations.js +7 -14
- package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
- package/src/js/mixin/lazyload.js +20 -0
- package/src/js/mixin/media.js +5 -10
- package/src/js/mixin/modal.js +89 -66
- package/src/js/mixin/parallax.js +149 -107
- package/src/js/mixin/position.js +26 -20
- package/src/js/mixin/slider-autoplay.js +12 -21
- package/src/js/mixin/slider-drag.js +64 -65
- package/src/js/mixin/slider-nav.js +26 -35
- package/src/js/mixin/slider-reactive.js +2 -8
- package/src/js/mixin/slider.js +47 -60
- package/src/js/mixin/slideshow.js +12 -22
- package/src/js/mixin/swipe.js +72 -0
- package/src/js/mixin/togglable.js +89 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +25 -40
- package/src/js/util/animation.js +77 -75
- package/src/js/util/attr.js +17 -21
- package/src/js/util/class.js +14 -52
- package/src/js/util/dimensions.js +58 -45
- package/src/js/util/dom.js +37 -66
- package/src/js/util/env.js +7 -12
- package/src/js/util/event.js +60 -59
- package/src/js/util/fastdom.js +1 -6
- package/src/js/util/filter.js +18 -36
- package/src/js/util/index.js +1 -1
- package/src/js/util/lang.js +82 -121
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/observer.js +36 -0
- package/src/js/util/options.js +35 -49
- package/src/js/util/player.js +41 -36
- package/src/js/util/position.js +54 -46
- package/src/js/util/selector.js +43 -58
- package/src/js/util/style.js +39 -49
- package/src/js/util/viewport.js +75 -64
- package/src/less/components/base.less +10 -33
- package/src/less/components/flex.less +0 -9
- package/src/less/components/form-range.less +48 -95
- package/src/less/components/form.less +0 -1
- package/src/less/components/height.less +3 -0
- package/src/less/components/leader.less +0 -1
- package/src/less/components/lightbox.less +0 -1
- package/src/less/components/list.less +5 -1
- package/src/less/components/modal.less +3 -7
- package/src/less/components/navbar.less +0 -7
- package/src/less/components/progress.less +14 -36
- package/src/less/components/slider.less +3 -3
- package/src/less/components/slideshow.less +3 -3
- package/src/less/components/text.less +16 -32
- package/src/less/components/utility.less +25 -0
- package/src/scss/components/base.scss +10 -33
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form-range.scss +48 -95
- package/src/scss/components/form.scss +3 -4
- package/src/scss/components/height.scss +3 -0
- package/src/scss/components/icon.scss +2 -2
- package/src/scss/components/leader.scss +0 -1
- package/src/scss/components/lightbox.scss +0 -1
- package/src/scss/components/list.scss +5 -1
- package/src/scss/components/modal.scss +3 -7
- package/src/scss/components/navbar.scss +0 -7
- package/src/scss/components/progress.scss +14 -36
- package/src/scss/components/search.scss +1 -1
- package/src/scss/components/slider.scss +3 -3
- package/src/scss/components/slideshow.scss +3 -3
- package/src/scss/components/text.scss +16 -32
- package/src/scss/components/utility.scss +25 -0
- package/src/scss/mixins-theme.scss +1 -1
- package/src/scss/mixins.scss +1 -1
- package/src/scss/variables-theme.scss +9 -9
- package/src/scss/variables.scss +9 -9
- package/tests/align.html +10 -10
- package/tests/animation.html +2 -2
- package/tests/article.html +2 -2
- package/tests/base.html +3 -3
- package/tests/card.html +10 -10
- package/tests/column.html +3 -3
- package/tests/comment.html +9 -9
- package/tests/countdown.html +10 -8
- package/tests/dotnav.html +3 -3
- package/tests/image.html +296 -64
- package/tests/images/image-type.avif +0 -0
- package/tests/images/image-type.jpeg +0 -0
- package/tests/images/image-type.webp +0 -0
- package/tests/index.html +8 -8
- package/tests/js/index.js +114 -85
- package/tests/lightbox.html +10 -10
- package/tests/marker.html +2 -2
- package/tests/modal.html +8 -9
- package/tests/navbar.html +2 -2
- package/tests/overlay.html +7 -7
- package/tests/parallax.html +16 -7
- package/tests/position.html +12 -12
- package/tests/slidenav.html +12 -12
- package/tests/slider.html +20 -20
- package/tests/sortable.html +1 -1
- package/tests/sticky-parallax.html +57 -72
- package/tests/sticky.html +14 -3
- package/tests/svg.html +6 -6
- package/tests/table.html +11 -11
- package/tests/thumbnav.html +12 -12
- package/tests/transition.html +30 -30
- package/tests/utility.html +50 -33
- package/tests/video.html +1 -1
- package/tests/width.html +1 -1
- package/src/js/mixin/flex-bug.js +0 -56
- package/src/js/util/promise.js +0 -191
- package/tests/images/animated.gif +0 -0
package/src/js/core/img.js
CHANGED
|
@@ -1,194 +1,210 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
append,
|
|
3
|
+
attr,
|
|
4
|
+
children,
|
|
5
|
+
createEvent,
|
|
6
|
+
css,
|
|
7
|
+
data,
|
|
8
|
+
escape,
|
|
9
|
+
fragment,
|
|
10
|
+
hasAttr,
|
|
11
|
+
hasIntersectionObserver,
|
|
12
|
+
includes,
|
|
13
|
+
isArray,
|
|
14
|
+
isEmpty,
|
|
15
|
+
isTag,
|
|
16
|
+
observeIntersection,
|
|
17
|
+
parent,
|
|
18
|
+
parseOptions,
|
|
19
|
+
queryAll,
|
|
20
|
+
removeAttr,
|
|
21
|
+
startsWith,
|
|
22
|
+
toFloat,
|
|
23
|
+
toPx,
|
|
24
|
+
trigger,
|
|
25
|
+
} from 'uikit-util';
|
|
26
|
+
|
|
27
|
+
const nativeLazyLoad = 'loading' in HTMLImageElement.prototype;
|
|
2
28
|
|
|
3
29
|
export default {
|
|
4
|
-
|
|
5
30
|
args: 'dataSrc',
|
|
6
31
|
|
|
7
32
|
props: {
|
|
8
33
|
dataSrc: String,
|
|
9
|
-
|
|
10
|
-
sizes: String,
|
|
11
|
-
width: Number,
|
|
12
|
-
height: Number,
|
|
34
|
+
sources: String,
|
|
13
35
|
offsetTop: String,
|
|
14
36
|
offsetLeft: String,
|
|
15
|
-
target: String
|
|
37
|
+
target: String,
|
|
38
|
+
loading: String,
|
|
16
39
|
},
|
|
17
40
|
|
|
18
41
|
data: {
|
|
19
42
|
dataSrc: '',
|
|
20
|
-
|
|
21
|
-
sizes: false,
|
|
22
|
-
width: false,
|
|
23
|
-
height: false,
|
|
43
|
+
sources: false,
|
|
24
44
|
offsetTop: '50vh',
|
|
25
45
|
offsetLeft: '50vw',
|
|
26
|
-
target: false
|
|
46
|
+
target: false,
|
|
47
|
+
loading: 'lazy',
|
|
27
48
|
},
|
|
28
49
|
|
|
29
50
|
computed: {
|
|
30
|
-
|
|
31
|
-
cacheKey({dataSrc}) {
|
|
32
|
-
return `${this.$name}.${dataSrc}`;
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
width({width, dataWidth}) {
|
|
36
|
-
return width || dataWidth;
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
height({height, dataHeight}) {
|
|
40
|
-
return height || dataHeight;
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
sizes({sizes, dataSizes}) {
|
|
44
|
-
return sizes || dataSizes;
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
isImg(_, $el) {
|
|
48
|
-
return isImg($el);
|
|
49
|
-
},
|
|
50
|
-
|
|
51
51
|
target: {
|
|
52
|
-
|
|
53
|
-
get({target}) {
|
|
52
|
+
get({ target }) {
|
|
54
53
|
return [this.$el, ...queryAll(target, this.$el)];
|
|
55
54
|
},
|
|
56
55
|
|
|
57
56
|
watch() {
|
|
58
|
-
this
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
offsetTop({offsetTop}) {
|
|
64
|
-
return toPx(offsetTop, 'height');
|
|
57
|
+
this.$reset();
|
|
58
|
+
},
|
|
65
59
|
},
|
|
66
|
-
|
|
67
|
-
offsetLeft({offsetLeft}) {
|
|
68
|
-
return toPx(offsetLeft, 'width');
|
|
69
|
-
}
|
|
70
|
-
|
|
71
60
|
},
|
|
72
61
|
|
|
73
62
|
connected() {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
|
|
63
|
+
if (this.loading !== 'lazy' || !hasIntersectionObserver) {
|
|
64
|
+
this.load();
|
|
77
65
|
return;
|
|
78
66
|
}
|
|
79
67
|
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
|
|
84
|
-
}
|
|
68
|
+
if (nativeLazyLoad && isImg(this.$el)) {
|
|
69
|
+
this.$el.loading = 'lazy';
|
|
70
|
+
setSrcAttrs(this.$el);
|
|
85
71
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
requestAnimationFrame(this.observe);
|
|
72
|
+
if (this.target.length === 1) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
91
76
|
|
|
77
|
+
ensureSrcAttribute(this.$el);
|
|
78
|
+
|
|
79
|
+
this.registerObserver(
|
|
80
|
+
observeIntersection(
|
|
81
|
+
this.target,
|
|
82
|
+
(entries, observer) => {
|
|
83
|
+
this.load();
|
|
84
|
+
observer.disconnect();
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
rootMargin: `${toPx(this.offsetTop, 'height')}px ${toPx(
|
|
88
|
+
this.offsetLeft,
|
|
89
|
+
'width'
|
|
90
|
+
)}px`,
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
);
|
|
92
94
|
},
|
|
93
95
|
|
|
94
96
|
disconnected() {
|
|
95
|
-
|
|
97
|
+
if (this._data.image) {
|
|
98
|
+
this._data.image.onload = '';
|
|
99
|
+
}
|
|
96
100
|
},
|
|
97
101
|
|
|
98
102
|
update: {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (!this.observer) {
|
|
103
|
+
write(store) {
|
|
104
|
+
if (!this.observer || isImg(this.$el)) {
|
|
103
105
|
return false;
|
|
104
106
|
}
|
|
105
107
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (this.isImg) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
image && image.then(img => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img)));
|
|
115
|
-
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
write(data) {
|
|
119
|
-
|
|
120
|
-
if (this.dataSrcset && window.devicePixelRatio !== 1) {
|
|
121
|
-
|
|
108
|
+
const srcset = data(this.$el, 'data-srcset');
|
|
109
|
+
if (srcset && window.devicePixelRatio !== 1) {
|
|
122
110
|
const bgSize = css(this.$el, 'backgroundSize');
|
|
123
|
-
if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) ===
|
|
124
|
-
|
|
125
|
-
css(this.$el, 'backgroundSize', `${
|
|
111
|
+
if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
|
|
112
|
+
store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
|
|
113
|
+
css(this.$el, 'backgroundSize', `${store.bgSize}px`);
|
|
126
114
|
}
|
|
127
|
-
|
|
128
115
|
}
|
|
129
|
-
|
|
130
116
|
},
|
|
131
117
|
|
|
132
|
-
events: ['resize']
|
|
133
|
-
|
|
118
|
+
events: ['resize'],
|
|
134
119
|
},
|
|
135
120
|
|
|
136
121
|
methods: {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// Old chromium based browsers (UC Browser) did not implement `isIntersecting`
|
|
141
|
-
if (!entries.some(entry => isUndefined(entry.isIntersecting) || entry.isIntersecting)) {
|
|
142
|
-
return;
|
|
122
|
+
load() {
|
|
123
|
+
if (this._data.image) {
|
|
124
|
+
return this._data.image;
|
|
143
125
|
}
|
|
144
126
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
storage[this.cacheKey] = currentSrc(img);
|
|
149
|
-
return img;
|
|
150
|
-
|
|
151
|
-
}, e => trigger(this.$el, new e.constructor(e.type, e)));
|
|
127
|
+
const image = isImg(this.$el)
|
|
128
|
+
? this.$el
|
|
129
|
+
: getImageFromElement(this.$el, this.dataSrc, this.sources);
|
|
152
130
|
|
|
153
|
-
|
|
131
|
+
removeAttr(image, 'loading');
|
|
132
|
+
setSrcAttrs(this.$el, image.currentSrc);
|
|
133
|
+
return (this._data.image = image);
|
|
154
134
|
},
|
|
155
|
-
|
|
156
|
-
observe() {
|
|
157
|
-
if (this._connected && !this._data.image) {
|
|
158
|
-
this.target.forEach(el => this.observer.observe(el));
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
135
|
+
},
|
|
164
136
|
};
|
|
165
137
|
|
|
166
|
-
function setSrcAttrs(el, src
|
|
167
|
-
|
|
138
|
+
function setSrcAttrs(el, src) {
|
|
168
139
|
if (isImg(el)) {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
set('src', src);
|
|
140
|
+
const parentNode = parent(el);
|
|
141
|
+
const elements = isPicture(parentNode) ? children(parentNode) : [el];
|
|
142
|
+
elements.forEach((el) => setSourceProps(el, el));
|
|
173
143
|
} else if (src) {
|
|
174
|
-
|
|
175
144
|
const change = !includes(el.style.backgroundImage, src);
|
|
176
145
|
if (change) {
|
|
177
146
|
css(el, 'backgroundImage', `url(${escape(src)})`);
|
|
178
147
|
trigger(el, createEvent('load', false));
|
|
179
148
|
}
|
|
180
|
-
|
|
181
149
|
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const srcProps = ['data-src', 'data-srcset', 'sizes'];
|
|
153
|
+
function setSourceProps(sourceEl, targetEl) {
|
|
154
|
+
srcProps.forEach((prop) => {
|
|
155
|
+
const value = data(sourceEl, prop);
|
|
156
|
+
if (value) {
|
|
157
|
+
attr(targetEl, prop.replace(/^(data-)+/, ''), value);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
182
161
|
|
|
162
|
+
function getImageFromElement(el, src, sources) {
|
|
163
|
+
const img = new Image();
|
|
164
|
+
|
|
165
|
+
wrapInPicture(img, sources);
|
|
166
|
+
setSourceProps(el, img);
|
|
167
|
+
img.onload = () => {
|
|
168
|
+
setSrcAttrs(el, img.currentSrc);
|
|
169
|
+
};
|
|
170
|
+
attr(img, 'src', src);
|
|
171
|
+
return img;
|
|
183
172
|
}
|
|
184
173
|
|
|
185
|
-
function
|
|
174
|
+
function wrapInPicture(img, sources) {
|
|
175
|
+
sources = parseSources(sources);
|
|
176
|
+
|
|
177
|
+
if (sources.length) {
|
|
178
|
+
const picture = fragment('<picture>');
|
|
179
|
+
for (const attrs of sources) {
|
|
180
|
+
const source = fragment('<source>');
|
|
181
|
+
attr(source, attrs);
|
|
182
|
+
append(picture, source);
|
|
183
|
+
}
|
|
184
|
+
append(picture, img);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
186
187
|
|
|
187
|
-
|
|
188
|
-
|
|
188
|
+
function parseSources(sources) {
|
|
189
|
+
if (!sources) {
|
|
190
|
+
return [];
|
|
189
191
|
}
|
|
190
192
|
|
|
191
|
-
|
|
193
|
+
if (startsWith(sources, '[')) {
|
|
194
|
+
try {
|
|
195
|
+
sources = JSON.parse(sources);
|
|
196
|
+
} catch (e) {
|
|
197
|
+
sources = [];
|
|
198
|
+
}
|
|
199
|
+
} else {
|
|
200
|
+
sources = parseOptions(sources);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (!isArray(sources)) {
|
|
204
|
+
sources = [sources];
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return sources.filter((source) => !isEmpty(source));
|
|
192
208
|
}
|
|
193
209
|
|
|
194
210
|
const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
|
|
@@ -212,11 +228,11 @@ const additionRe = /[+-]?(\d+)/g;
|
|
|
212
228
|
function evaluateSize(size) {
|
|
213
229
|
return startsWith(size, 'calc')
|
|
214
230
|
? size
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
231
|
+
.slice(5, -1)
|
|
232
|
+
.replace(sizeRe, (size) => toPx(size))
|
|
233
|
+
.replace(/ /g, '')
|
|
234
|
+
.match(additionRe)
|
|
235
|
+
.reduce((a, b) => a + +b, 0)
|
|
220
236
|
: size;
|
|
221
237
|
}
|
|
222
238
|
|
|
@@ -225,25 +241,19 @@ function getSourceSize(srcset, sizes) {
|
|
|
225
241
|
const srcSize = toPx(sizesToPixel(sizes));
|
|
226
242
|
const descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort((a, b) => a - b);
|
|
227
243
|
|
|
228
|
-
return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
|
|
244
|
+
return descriptors.filter((size) => size >= srcSize)[0] || descriptors.pop() || '';
|
|
229
245
|
}
|
|
230
246
|
|
|
231
|
-
function
|
|
232
|
-
|
|
247
|
+
function ensureSrcAttribute(el) {
|
|
248
|
+
if (isImg(el) && !hasAttr(el, 'src')) {
|
|
249
|
+
attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>');
|
|
250
|
+
}
|
|
233
251
|
}
|
|
234
252
|
|
|
235
|
-
function
|
|
236
|
-
return el
|
|
253
|
+
function isPicture(el) {
|
|
254
|
+
return isTag(el, 'picture');
|
|
237
255
|
}
|
|
238
256
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
// workaround for Safari's private browsing mode and accessing sessionStorage in Blink
|
|
243
|
-
try {
|
|
244
|
-
storage = window.sessionStorage || {};
|
|
245
|
-
storage[key] = 1;
|
|
246
|
-
delete storage[key];
|
|
247
|
-
} catch (e) {
|
|
248
|
-
storage = {};
|
|
257
|
+
function isImg(el) {
|
|
258
|
+
return isTag(el, 'img');
|
|
249
259
|
}
|
package/src/js/core/index.js
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
export {default as Accordion} from './accordion';
|
|
2
|
-
export {default as Alert} from './alert';
|
|
3
|
-
export {default as Cover} from './cover';
|
|
4
|
-
export {default as Drop, default as Dropdown} from './drop';
|
|
5
|
-
export {default as FormCustom} from './form-custom';
|
|
6
|
-
export {default as Gif} from './gif';
|
|
7
|
-
export {default as Grid} from './grid';
|
|
8
|
-
export {default as HeightMatch} from './height-match';
|
|
9
|
-
export {default as HeightViewport} from './height-viewport';
|
|
10
|
-
export {default as Icon} from './icon';
|
|
11
|
-
export {default as Img} from './img';
|
|
12
|
-
export {default as Leader} from './leader';
|
|
13
|
-
export {default as Margin} from './margin';
|
|
14
|
-
export {default as Modal} from './modal';
|
|
15
|
-
export {default as Nav} from './nav';
|
|
16
|
-
export {default as Navbar} from './navbar';
|
|
17
|
-
export {default as Offcanvas} from './offcanvas';
|
|
18
|
-
export {default as OverflowAuto} from './overflow-auto';
|
|
19
|
-
export {default as Responsive} from './responsive';
|
|
20
|
-
export {default as Scroll} from './scroll';
|
|
21
|
-
export {default as Scrollspy} from './scrollspy';
|
|
22
|
-
export {default as ScrollspyNav} from './scrollspy-nav';
|
|
23
|
-
export {default as Sticky} from './sticky';
|
|
24
|
-
export {default as Svg} from './svg';
|
|
25
|
-
export {default as Switcher} from './switcher';
|
|
26
|
-
export {default as Tab} from './tab';
|
|
27
|
-
export {default as Toggle} from './toggle';
|
|
28
|
-
export {default as Video} from './video';
|
|
1
|
+
export { default as Accordion } from './accordion';
|
|
2
|
+
export { default as Alert } from './alert';
|
|
3
|
+
export { default as Cover } from './cover';
|
|
4
|
+
export { default as Drop, default as Dropdown } from './drop';
|
|
5
|
+
export { default as FormCustom } from './form-custom';
|
|
6
|
+
export { default as Gif } from './gif';
|
|
7
|
+
export { default as Grid } from './grid';
|
|
8
|
+
export { default as HeightMatch } from './height-match';
|
|
9
|
+
export { default as HeightViewport } from './height-viewport';
|
|
10
|
+
export { default as Icon } from './icon';
|
|
11
|
+
export { default as Img } from './img';
|
|
12
|
+
export { default as Leader } from './leader';
|
|
13
|
+
export { default as Margin } from './margin';
|
|
14
|
+
export { default as Modal } from './modal';
|
|
15
|
+
export { default as Nav } from './nav';
|
|
16
|
+
export { default as Navbar } from './navbar';
|
|
17
|
+
export { default as Offcanvas } from './offcanvas';
|
|
18
|
+
export { default as OverflowAuto } from './overflow-auto';
|
|
19
|
+
export { default as Responsive } from './responsive';
|
|
20
|
+
export { default as Scroll } from './scroll';
|
|
21
|
+
export { default as Scrollspy } from './scrollspy';
|
|
22
|
+
export { default as ScrollspyNav } from './scrollspy-nav';
|
|
23
|
+
export { default as Sticky } from './sticky';
|
|
24
|
+
export { default as Svg } from './svg';
|
|
25
|
+
export { default as Switcher } from './switcher';
|
|
26
|
+
export { default as Tab } from './tab';
|
|
27
|
+
export { default as Toggle } from './toggle';
|
|
28
|
+
export { default as Video } from './video';
|
|
29
29
|
|
|
30
30
|
// Icon components
|
|
31
|
-
export {Close} from './icon';
|
|
32
|
-
export {Spinner} from './icon';
|
|
33
|
-
export {Slidenav as SlidenavNext} from './icon';
|
|
34
|
-
export {Slidenav as SlidenavPrevious} from './icon';
|
|
35
|
-
export {Search as SearchIcon} from './icon';
|
|
36
|
-
export {IconComponent as Marker} from './icon';
|
|
37
|
-
export {IconComponent as NavbarToggleIcon} from './icon';
|
|
38
|
-
export {IconComponent as OverlayIcon} from './icon';
|
|
39
|
-
export {IconComponent as PaginationNext} from './icon';
|
|
40
|
-
export {IconComponent as PaginationPrevious} from './icon';
|
|
41
|
-
export {IconComponent as Totop} from './icon';
|
|
31
|
+
export { Close } from './icon';
|
|
32
|
+
export { Spinner } from './icon';
|
|
33
|
+
export { Slidenav as SlidenavNext } from './icon';
|
|
34
|
+
export { Slidenav as SlidenavPrevious } from './icon';
|
|
35
|
+
export { Search as SearchIcon } from './icon';
|
|
36
|
+
export { IconComponent as Marker } from './icon';
|
|
37
|
+
export { IconComponent as NavbarToggleIcon } from './icon';
|
|
38
|
+
export { IconComponent as OverlayIcon } from './icon';
|
|
39
|
+
export { IconComponent as PaginationNext } from './icon';
|
|
40
|
+
export { IconComponent as PaginationPrevious } from './icon';
|
|
41
|
+
export { IconComponent as Totop } from './icon';
|
package/src/js/core/leader.js
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import Class from '../mixin/class';
|
|
2
2
|
import Media from '../mixin/media';
|
|
3
|
-
import {attr, getCssVar, toggleClass, unwrap, wrapInner} from 'uikit-util';
|
|
3
|
+
import { attr, getCssVar, toggleClass, unwrap, wrapInner } from 'uikit-util';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
|
|
7
6
|
mixins: [Class, Media],
|
|
8
7
|
|
|
9
8
|
props: {
|
|
10
|
-
fill: String
|
|
9
|
+
fill: String,
|
|
11
10
|
},
|
|
12
11
|
|
|
13
12
|
data: {
|
|
14
13
|
fill: '',
|
|
15
14
|
clsWrapper: 'uk-leader-fill',
|
|
16
15
|
clsHide: 'uk-leader-hide',
|
|
17
|
-
attrFill: 'data-fill'
|
|
16
|
+
attrFill: 'data-fill',
|
|
18
17
|
},
|
|
19
18
|
|
|
20
19
|
computed: {
|
|
21
|
-
|
|
22
|
-
fill({fill}) {
|
|
20
|
+
fill({ fill }) {
|
|
23
21
|
return fill || getCssVar('leader-fill-content');
|
|
24
|
-
}
|
|
25
|
-
|
|
22
|
+
},
|
|
26
23
|
},
|
|
27
24
|
|
|
28
25
|
connected() {
|
|
@@ -34,9 +31,7 @@ export default {
|
|
|
34
31
|
},
|
|
35
32
|
|
|
36
33
|
update: {
|
|
37
|
-
|
|
38
|
-
read({changed, width}) {
|
|
39
|
-
|
|
34
|
+
read({ changed, width }) {
|
|
40
35
|
const prev = width;
|
|
41
36
|
|
|
42
37
|
width = Math.floor(this.$el.offsetWidth / 2);
|
|
@@ -45,23 +40,19 @@ export default {
|
|
|
45
40
|
width,
|
|
46
41
|
fill: this.fill,
|
|
47
42
|
changed: changed || prev !== width,
|
|
48
|
-
hide: !this.matchMedia
|
|
43
|
+
hide: !this.matchMedia,
|
|
49
44
|
};
|
|
50
45
|
},
|
|
51
46
|
|
|
52
47
|
write(data) {
|
|
53
|
-
|
|
54
48
|
toggleClass(this.wrapper, this.clsHide, data.hide);
|
|
55
49
|
|
|
56
50
|
if (data.changed) {
|
|
57
51
|
data.changed = false;
|
|
58
52
|
attr(this.wrapper, this.attrFill, new Array(data.width).join(data.fill));
|
|
59
53
|
}
|
|
60
|
-
|
|
61
54
|
},
|
|
62
55
|
|
|
63
|
-
events: ['resize']
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
56
|
+
events: ['resize'],
|
|
57
|
+
},
|
|
67
58
|
};
|
package/src/js/core/margin.js
CHANGED
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
import {isRtl, isVisible, offsetPosition, toggleClass} from 'uikit-util';
|
|
1
|
+
import { isRtl, isVisible, offsetPosition, toggleClass } from 'uikit-util';
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
|
|
5
4
|
props: {
|
|
6
5
|
margin: String,
|
|
7
|
-
firstColumn: Boolean
|
|
6
|
+
firstColumn: Boolean,
|
|
8
7
|
},
|
|
9
8
|
|
|
10
9
|
data: {
|
|
11
10
|
margin: 'uk-margin-small-top',
|
|
12
|
-
firstColumn: 'uk-first-column'
|
|
11
|
+
firstColumn: 'uk-first-column',
|
|
13
12
|
},
|
|
14
13
|
|
|
15
14
|
update: {
|
|
16
|
-
|
|
17
15
|
read() {
|
|
18
|
-
|
|
19
16
|
const rows = getRows(this.$el.children);
|
|
20
17
|
|
|
21
18
|
return {
|
|
22
19
|
rows,
|
|
23
|
-
columns: getColumns(rows)
|
|
20
|
+
columns: getColumns(rows),
|
|
24
21
|
};
|
|
25
22
|
},
|
|
26
23
|
|
|
27
|
-
write({columns, rows}) {
|
|
28
|
-
for (
|
|
29
|
-
for (
|
|
30
|
-
toggleClass(
|
|
31
|
-
toggleClass(
|
|
24
|
+
write({ columns, rows }) {
|
|
25
|
+
for (const row of rows) {
|
|
26
|
+
for (const column of row) {
|
|
27
|
+
toggleClass(column, this.margin, rows[0] !== row);
|
|
28
|
+
toggleClass(column, this.firstColumn, !!~columns[0].indexOf(column));
|
|
32
29
|
}
|
|
33
30
|
}
|
|
34
31
|
},
|
|
35
32
|
|
|
36
|
-
events: ['resize']
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
33
|
+
events: ['resize'],
|
|
34
|
+
},
|
|
40
35
|
};
|
|
41
36
|
|
|
42
37
|
export function getRows(items) {
|
|
@@ -44,38 +39,30 @@ export function getRows(items) {
|
|
|
44
39
|
}
|
|
45
40
|
|
|
46
41
|
function getColumns(rows) {
|
|
47
|
-
|
|
48
42
|
const columns = [];
|
|
49
43
|
|
|
50
|
-
for (
|
|
51
|
-
const sorted = sortBy(
|
|
44
|
+
for (const row of rows) {
|
|
45
|
+
const sorted = sortBy(row, 'left', 'right');
|
|
52
46
|
for (let j = 0; j < sorted.length; j++) {
|
|
53
|
-
columns[j] =
|
|
47
|
+
columns[j] = columns[j] ? columns[j].concat(sorted[j]) : sorted[j];
|
|
54
48
|
}
|
|
55
49
|
}
|
|
56
50
|
|
|
57
|
-
return isRtl
|
|
58
|
-
? columns.reverse()
|
|
59
|
-
: columns;
|
|
51
|
+
return isRtl ? columns.reverse() : columns;
|
|
60
52
|
}
|
|
61
53
|
|
|
62
54
|
function sortBy(items, startProp, endProp) {
|
|
63
|
-
|
|
64
55
|
const sorted = [[]];
|
|
65
56
|
|
|
66
|
-
for (
|
|
67
|
-
|
|
68
|
-
const el = items[i];
|
|
69
|
-
|
|
57
|
+
for (const el of items) {
|
|
70
58
|
if (!isVisible(el)) {
|
|
71
59
|
continue;
|
|
72
60
|
}
|
|
73
61
|
|
|
74
62
|
let dim = getOffset(el);
|
|
75
63
|
|
|
76
|
-
for (let
|
|
77
|
-
|
|
78
|
-
const current = sorted[j];
|
|
64
|
+
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
65
|
+
const current = sorted[i];
|
|
79
66
|
|
|
80
67
|
if (!current[0]) {
|
|
81
68
|
current.push(el);
|
|
@@ -100,21 +87,18 @@ function sortBy(items, startProp, endProp) {
|
|
|
100
87
|
break;
|
|
101
88
|
}
|
|
102
89
|
|
|
103
|
-
if (
|
|
90
|
+
if (i === 0) {
|
|
104
91
|
sorted.unshift([el]);
|
|
105
92
|
break;
|
|
106
93
|
}
|
|
107
|
-
|
|
108
94
|
}
|
|
109
|
-
|
|
110
95
|
}
|
|
111
96
|
|
|
112
97
|
return sorted;
|
|
113
98
|
}
|
|
114
99
|
|
|
115
100
|
function getOffset(element, offset = false) {
|
|
116
|
-
|
|
117
|
-
let {offsetTop, offsetLeft, offsetHeight, offsetWidth} = element;
|
|
101
|
+
let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
|
|
118
102
|
|
|
119
103
|
if (offset) {
|
|
120
104
|
[offsetTop, offsetLeft] = offsetPosition(element);
|
|
@@ -124,6 +108,6 @@ function getOffset(element, offset = false) {
|
|
|
124
108
|
top: offsetTop,
|
|
125
109
|
left: offsetLeft,
|
|
126
110
|
bottom: offsetTop + offsetHeight,
|
|
127
|
-
right: offsetLeft + offsetWidth
|
|
111
|
+
right: offsetLeft + offsetWidth,
|
|
128
112
|
};
|
|
129
113
|
}
|