uikit 3.11.2-dev.31cd2ba38 → 3.11.2-dev.4274bc35b
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 +38 -28
- 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 +121 -202
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +121 -202
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +123 -208
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +123 -208
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +88 -133
- 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 +1098 -1316
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1144 -1393
- 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 +326 -358
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +324 -357
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +768 -843
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +324 -357
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +645 -793
- 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 +155 -167
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5405 -6716
- 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 +7997 -9703
- 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 +79 -100
- package/src/js/components/countdown.js +24 -50
- 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 +37 -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 +95 -64
- 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 +52 -63
- package/src/js/core/accordion.js +53 -48
- package/src/js/core/alert.js +9 -17
- package/src/js/core/core.js +74 -53
- package/src/js/core/cover.js +11 -15
- package/src/js/core/drop.js +106 -92
- package/src/js/core/form-custom.js +20 -25
- 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 +28 -35
- package/src/js/core/icon.js +38 -50
- package/src/js/core/img.js +127 -87
- 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 +112 -88
- package/src/js/core/offcanvas.js +49 -53
- 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 +130 -91
- package/src/js/core/svg.js +68 -83
- package/src/js/core/switcher.js +47 -46
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +66 -67
- package/src/js/core/video.js +11 -22
- 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/media.js +5 -10
- package/src/js/mixin/modal.js +89 -66
- package/src/js/mixin/parallax.js +130 -106
- 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 +48 -55
- package/src/js/mixin/slideshow.js +13 -19
- 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 +20 -39
- 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 +56 -43
- package/src/js/util/dom.js +44 -80
- 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 +17 -34
- package/src/js/util/index.js +0 -1
- package/src/js/util/lang.js +82 -121
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/options.js +33 -47
- 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 +52 -97
- package/src/less/components/form.less +0 -1
- package/src/less/components/leader.less +0 -1
- package/src/less/components/lightbox.less +0 -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 +0 -3
- package/src/less/components/slideshow.less +0 -3
- package/src/less/components/text.less +16 -32
- package/src/less/components/utility.less +22 -0
- package/src/scss/components/base.scss +10 -33
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form-range.scss +52 -97
- package/src/scss/components/form.scss +3 -4
- 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/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 +0 -3
- package/src/scss/components/slideshow.scss +0 -3
- package/src/scss/components/text.scss +16 -32
- package/src/scss/components/utility.scss +22 -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/dotnav.html +3 -3
- package/tests/image.html +296 -48
- 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 +14 -5
- 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 +47 -62
- 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 +33 -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/tests/images/test.avif +0 -0
- package/tests/images/test.webp +0 -0
package/src/js/core/img.js
CHANGED
|
@@ -1,146 +1,165 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
append,
|
|
3
|
+
attr,
|
|
4
|
+
children,
|
|
5
|
+
createEvent,
|
|
6
|
+
css,
|
|
7
|
+
data,
|
|
8
|
+
escape,
|
|
9
|
+
fragment,
|
|
10
|
+
hasAttr,
|
|
11
|
+
includes,
|
|
12
|
+
isArray,
|
|
13
|
+
isEmpty,
|
|
14
|
+
isTag,
|
|
15
|
+
parent,
|
|
16
|
+
parseOptions,
|
|
17
|
+
queryAll,
|
|
18
|
+
removeAttr,
|
|
19
|
+
startsWith,
|
|
20
|
+
toFloat,
|
|
21
|
+
toPx,
|
|
22
|
+
trigger,
|
|
23
|
+
} from 'uikit-util';
|
|
24
|
+
|
|
25
|
+
const nativeLazyLoad = 'loading' in HTMLImageElement.prototype;
|
|
26
|
+
const nativeIsIntersecting = 'isIntersecting' in IntersectionObserverEntry.prototype; // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
|
|
2
27
|
|
|
3
28
|
export default {
|
|
4
|
-
|
|
5
29
|
args: 'dataSrc',
|
|
6
30
|
|
|
7
31
|
props: {
|
|
8
32
|
dataSrc: String,
|
|
9
|
-
|
|
33
|
+
sources: String,
|
|
10
34
|
offsetTop: String,
|
|
11
35
|
offsetLeft: String,
|
|
12
|
-
target: String
|
|
36
|
+
target: String,
|
|
37
|
+
loading: String,
|
|
13
38
|
},
|
|
14
39
|
|
|
15
40
|
data: {
|
|
16
41
|
dataSrc: '',
|
|
17
|
-
|
|
42
|
+
sources: false,
|
|
18
43
|
offsetTop: '50vh',
|
|
19
44
|
offsetLeft: '50vw',
|
|
20
|
-
target: false
|
|
45
|
+
target: false,
|
|
46
|
+
loading: 'lazy',
|
|
21
47
|
},
|
|
22
48
|
|
|
23
49
|
computed: {
|
|
24
|
-
|
|
25
50
|
target: {
|
|
26
|
-
|
|
27
|
-
get({target}) {
|
|
51
|
+
get({ target }) {
|
|
28
52
|
return [this.$el, ...queryAll(target, this.$el)];
|
|
29
53
|
},
|
|
30
54
|
|
|
31
55
|
watch() {
|
|
32
56
|
this.observe();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
57
|
+
},
|
|
58
|
+
},
|
|
37
59
|
},
|
|
38
60
|
|
|
39
61
|
connected() {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
setSrcAttrs(this.$el, this.dataSrc);
|
|
62
|
+
if (this.loading !== 'lazy' || !window.IntersectionObserver || !nativeIsIntersecting) {
|
|
63
|
+
this.load();
|
|
43
64
|
return;
|
|
44
65
|
}
|
|
45
66
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
67
|
+
if (nativeLazyLoad && isImg(this.$el)) {
|
|
68
|
+
this.$el.loading = 'lazy';
|
|
69
|
+
setSrcAttrs(this.$el);
|
|
70
|
+
|
|
71
|
+
if (this.target.length === 1) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
49
75
|
|
|
76
|
+
ensureSrcAttribute(this.$el);
|
|
77
|
+
|
|
78
|
+
const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(
|
|
79
|
+
this.offsetLeft,
|
|
80
|
+
'width'
|
|
81
|
+
)}px`;
|
|
82
|
+
this.observer = new IntersectionObserver(
|
|
83
|
+
(entries) => {
|
|
84
|
+
if (entries.some((entry) => entry.isIntersecting)) {
|
|
85
|
+
this.load();
|
|
86
|
+
this.observer.disconnect();
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{ rootMargin }
|
|
90
|
+
);
|
|
91
|
+
this.observe();
|
|
50
92
|
},
|
|
51
93
|
|
|
52
94
|
disconnected() {
|
|
53
|
-
|
|
95
|
+
if (this._data.image) {
|
|
96
|
+
this._data.image.onload = '';
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.observer?.disconnect();
|
|
54
100
|
},
|
|
55
101
|
|
|
56
102
|
update: {
|
|
57
|
-
|
|
58
|
-
read({image}) {
|
|
59
|
-
|
|
103
|
+
write(store) {
|
|
60
104
|
if (!this.observer || isImg(this.$el)) {
|
|
61
105
|
return false;
|
|
62
106
|
}
|
|
63
107
|
|
|
64
|
-
setSrcAttrs(this.$el, image && image.currentSrc);
|
|
65
|
-
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
write(store) {
|
|
69
|
-
|
|
70
108
|
const srcset = data(this.$el, 'data-srcset');
|
|
71
109
|
if (srcset && window.devicePixelRatio !== 1) {
|
|
72
|
-
|
|
73
110
|
const bgSize = css(this.$el, 'backgroundSize');
|
|
74
111
|
if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
|
|
75
112
|
store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
|
|
76
113
|
css(this.$el, 'backgroundSize', `${store.bgSize}px`);
|
|
77
114
|
}
|
|
78
|
-
|
|
79
115
|
}
|
|
80
|
-
|
|
81
116
|
},
|
|
82
117
|
|
|
83
|
-
events: ['resize']
|
|
84
|
-
|
|
118
|
+
events: ['resize'],
|
|
85
119
|
},
|
|
86
120
|
|
|
87
121
|
methods: {
|
|
88
|
-
|
|
89
|
-
load(entries) {
|
|
90
|
-
|
|
91
|
-
// Old chromium based browsers (UC Browser) did not implement `isIntersecting`
|
|
92
|
-
if (!entries.some(entry => isUndefined(entry.isIntersecting) || entry.isIntersecting)) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
|
|
122
|
+
load() {
|
|
96
123
|
if (this._data.image) {
|
|
97
124
|
return this._data.image;
|
|
98
125
|
}
|
|
99
126
|
|
|
100
127
|
const image = isImg(this.$el)
|
|
101
128
|
? this.$el
|
|
102
|
-
: getImageFromElement(this.$el, this.dataSrc,
|
|
103
|
-
|
|
104
|
-
this._data.image = image;
|
|
105
|
-
setSrcAttrs(this.$el, image.currentSrc || this.dataSrc);
|
|
129
|
+
: getImageFromElement(this.$el, this.dataSrc, this.sources);
|
|
106
130
|
|
|
107
|
-
|
|
131
|
+
removeAttr(image, 'loading');
|
|
132
|
+
setSrcAttrs(this.$el, image.currentSrc);
|
|
133
|
+
return (this._data.image = image);
|
|
108
134
|
},
|
|
109
135
|
|
|
110
136
|
observe() {
|
|
111
137
|
if (this._connected && !this._data.image) {
|
|
112
|
-
|
|
138
|
+
for (const el of this.target) {
|
|
139
|
+
this.observer.observe(el);
|
|
140
|
+
}
|
|
113
141
|
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
142
|
+
},
|
|
143
|
+
},
|
|
118
144
|
};
|
|
119
145
|
|
|
120
146
|
function setSrcAttrs(el, src) {
|
|
121
|
-
|
|
122
147
|
if (isImg(el)) {
|
|
123
|
-
|
|
124
148
|
const parentNode = parent(el);
|
|
125
149
|
const elements = isPicture(parentNode) ? children(parentNode) : [el];
|
|
126
|
-
elements.forEach(el => setSourceProps(el, el));
|
|
127
|
-
src && attr(el, 'src', src);
|
|
128
|
-
|
|
150
|
+
elements.forEach((el) => setSourceProps(el, el));
|
|
129
151
|
} else if (src) {
|
|
130
|
-
|
|
131
152
|
const change = !includes(el.style.backgroundImage, src);
|
|
132
153
|
if (change) {
|
|
133
154
|
css(el, 'backgroundImage', `url(${escape(src)})`);
|
|
134
155
|
trigger(el, createEvent('load', false));
|
|
135
156
|
}
|
|
136
|
-
|
|
137
157
|
}
|
|
138
|
-
|
|
139
158
|
}
|
|
140
159
|
|
|
141
160
|
const srcProps = ['data-src', 'data-srcset', 'sizes'];
|
|
142
161
|
function setSourceProps(sourceEl, targetEl) {
|
|
143
|
-
srcProps.forEach(prop => {
|
|
162
|
+
srcProps.forEach((prop) => {
|
|
144
163
|
const value = data(sourceEl, prop);
|
|
145
164
|
if (value) {
|
|
146
165
|
attr(targetEl, prop.replace(/^(data-)+/, ''), value);
|
|
@@ -148,31 +167,50 @@ function setSourceProps(sourceEl, targetEl) {
|
|
|
148
167
|
});
|
|
149
168
|
}
|
|
150
169
|
|
|
151
|
-
function getImageFromElement(el, src, sources
|
|
152
|
-
|
|
153
|
-
if (!src) {
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
|
|
170
|
+
function getImageFromElement(el, src, sources) {
|
|
157
171
|
const img = new Image();
|
|
158
172
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
173
|
+
wrapInPicture(img, sources);
|
|
174
|
+
setSourceProps(el, img);
|
|
175
|
+
img.onload = () => setSrcAttrs(el, img.currentSrc);
|
|
176
|
+
attr(img, 'src', src);
|
|
177
|
+
return img;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function wrapInPicture(img, sources) {
|
|
181
|
+
sources = parseSources(sources);
|
|
162
182
|
|
|
163
183
|
if (sources.length) {
|
|
164
184
|
const picture = fragment('<picture>');
|
|
165
|
-
|
|
185
|
+
for (const attrs of sources) {
|
|
166
186
|
const source = fragment('<source>');
|
|
167
187
|
attr(source, attrs);
|
|
168
188
|
append(picture, source);
|
|
169
|
-
}
|
|
189
|
+
}
|
|
170
190
|
append(picture, img);
|
|
171
191
|
}
|
|
192
|
+
}
|
|
172
193
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
194
|
+
function parseSources(sources) {
|
|
195
|
+
if (!sources) {
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (startsWith(sources, '[')) {
|
|
200
|
+
try {
|
|
201
|
+
sources = JSON.parse(sources);
|
|
202
|
+
} catch (e) {
|
|
203
|
+
sources = [];
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
sources = parseOptions(sources);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (!isArray(sources)) {
|
|
210
|
+
sources = [sources];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return sources.filter((source) => !isEmpty(source));
|
|
176
214
|
}
|
|
177
215
|
|
|
178
216
|
const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
|
|
@@ -196,11 +234,11 @@ const additionRe = /[+-]?(\d+)/g;
|
|
|
196
234
|
function evaluateSize(size) {
|
|
197
235
|
return startsWith(size, 'calc')
|
|
198
236
|
? size
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
237
|
+
.slice(5, -1)
|
|
238
|
+
.replace(sizeRe, (size) => toPx(size))
|
|
239
|
+
.replace(/ /g, '')
|
|
240
|
+
.match(additionRe)
|
|
241
|
+
.reduce((a, b) => a + +b, 0)
|
|
204
242
|
: size;
|
|
205
243
|
}
|
|
206
244
|
|
|
@@ -209,17 +247,19 @@ function getSourceSize(srcset, sizes) {
|
|
|
209
247
|
const srcSize = toPx(sizesToPixel(sizes));
|
|
210
248
|
const descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort((a, b) => a - b);
|
|
211
249
|
|
|
212
|
-
return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
|
|
250
|
+
return descriptors.filter((size) => size >= srcSize)[0] || descriptors.pop() || '';
|
|
213
251
|
}
|
|
214
252
|
|
|
215
|
-
function
|
|
216
|
-
|
|
253
|
+
function ensureSrcAttribute(el) {
|
|
254
|
+
if (isImg(el) && !hasAttr(el, 'src')) {
|
|
255
|
+
attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>');
|
|
256
|
+
}
|
|
217
257
|
}
|
|
218
258
|
|
|
219
|
-
function
|
|
220
|
-
return
|
|
259
|
+
function isPicture(el) {
|
|
260
|
+
return isTag(el, 'picture');
|
|
221
261
|
}
|
|
222
262
|
|
|
223
|
-
function
|
|
224
|
-
return el
|
|
263
|
+
function isImg(el) {
|
|
264
|
+
return isTag(el, 'img');
|
|
225
265
|
}
|
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
|
}
|