uikit 3.11.2-dev.28b7953b9 → 3.11.2-dev.2b60845fb
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 +7 -11
- 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 +42 -17
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +42 -17
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +42 -17
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +42 -17
- 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 +409 -438
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1116 -1305
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1164 -1383
- 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 +294 -345
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +292 -344
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +727 -850
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +292 -344
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +612 -831
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +588 -619
- 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 +5266 -6604
- 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 +8111 -9928
- 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 +23 -27
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +13 -32
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +65 -82
- package/src/js/components/countdown.js +24 -50
- package/src/js/components/filter.js +71 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +11 -23
- package/src/js/components/internal/slider-transitioner.js +66 -45
- package/src/js/components/internal/slideshow-animations.js +42 -61
- package/src/js/components/lightbox-panel.js +135 -109
- package/src/js/components/lightbox.js +18 -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 +75 -64
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +8 -44
- 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 +10 -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 +132 -147
- 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 +50 -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 +60 -79
- package/src/js/core/switcher.js +47 -46
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +64 -66
- 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 +61 -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 +53 -48
- 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 +51 -50
- package/src/js/mixin/slideshow.js +13 -19
- package/src/js/mixin/togglable.js +90 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +27 -43
- package/src/js/util/animation.js +82 -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 +40 -73
- 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 +79 -119
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/options.js +41 -46
- package/src/js/util/player.js +40 -36
- package/src/js/util/position.js +54 -46
- package/src/js/util/selector.js +39 -48
- package/src/js/util/style.js +36 -46
- package/src/js/util/viewport.js +75 -64
- package/src/less/components/flex.less +0 -9
- package/src/less/components/navbar.less +0 -7
- package/src/less/components/utility.less +22 -0
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form.scss +3 -3
- package/src/scss/components/icon.scss +2 -2
- package/src/scss/components/navbar.scss +0 -7
- package/src/scss/components/search.scss +1 -1
- package/src/scss/components/utility.scss +22 -0
- package/src/scss/variables-theme.scss +6 -6
- package/src/scss/variables.scss +6 -6
- package/tests/image.html +41 -31
- package/tests/js/index.js +114 -85
- package/src/js/mixin/flex-bug.js +0 -56
- package/src/js/util/promise.js +0 -191
- package/tests/images/test.avif +0 -0
- package/tests/images/test.webp +0 -0
package/src/js/core/img.js
CHANGED
|
@@ -1,66 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
createEvent,
|
|
3
|
+
css,
|
|
4
|
+
Dimensions,
|
|
5
|
+
escape,
|
|
6
|
+
getImage,
|
|
7
|
+
includes,
|
|
8
|
+
isUndefined,
|
|
9
|
+
queryAll,
|
|
10
|
+
startsWith,
|
|
11
|
+
toFloat,
|
|
12
|
+
toPx,
|
|
13
|
+
trigger,
|
|
14
|
+
} from 'uikit-util';
|
|
5
15
|
|
|
6
16
|
export default {
|
|
7
|
-
|
|
8
17
|
args: 'dataSrc',
|
|
9
18
|
|
|
10
19
|
props: {
|
|
11
20
|
dataSrc: String,
|
|
12
|
-
|
|
21
|
+
dataSrcset: Boolean,
|
|
22
|
+
sizes: String,
|
|
23
|
+
width: Number,
|
|
24
|
+
height: Number,
|
|
13
25
|
offsetTop: String,
|
|
14
26
|
offsetLeft: String,
|
|
15
|
-
target: String
|
|
27
|
+
target: String,
|
|
16
28
|
},
|
|
17
29
|
|
|
18
30
|
data: {
|
|
19
31
|
dataSrc: '',
|
|
20
|
-
|
|
32
|
+
dataSrcset: false,
|
|
33
|
+
sizes: false,
|
|
34
|
+
width: false,
|
|
35
|
+
height: false,
|
|
21
36
|
offsetTop: '50vh',
|
|
22
37
|
offsetLeft: '50vw',
|
|
23
|
-
target: false
|
|
38
|
+
target: false,
|
|
24
39
|
},
|
|
25
40
|
|
|
26
41
|
computed: {
|
|
42
|
+
cacheKey({ dataSrc }) {
|
|
43
|
+
return `${this.$name}.${dataSrc}`;
|
|
44
|
+
},
|
|
27
45
|
|
|
28
|
-
|
|
46
|
+
width({ width, dataWidth }) {
|
|
47
|
+
return width || dataWidth;
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
height({ height, dataHeight }) {
|
|
51
|
+
return height || dataHeight;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
sizes({ sizes, dataSizes }) {
|
|
55
|
+
return sizes || dataSizes;
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
isImg(_, $el) {
|
|
59
|
+
return isImg($el);
|
|
60
|
+
},
|
|
29
61
|
|
|
30
|
-
|
|
62
|
+
target: {
|
|
63
|
+
get({ target }) {
|
|
31
64
|
return [this.$el, ...queryAll(target, this.$el)];
|
|
32
65
|
},
|
|
33
66
|
|
|
34
67
|
watch() {
|
|
35
68
|
this.observe();
|
|
36
|
-
}
|
|
69
|
+
},
|
|
70
|
+
},
|
|
37
71
|
|
|
38
|
-
}
|
|
72
|
+
offsetTop({ offsetTop }) {
|
|
73
|
+
return toPx(offsetTop, 'height');
|
|
74
|
+
},
|
|
39
75
|
|
|
76
|
+
offsetLeft({ offsetLeft }) {
|
|
77
|
+
return toPx(offsetLeft, 'width');
|
|
78
|
+
},
|
|
40
79
|
},
|
|
41
80
|
|
|
42
81
|
connected() {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
setSrcAttrs(this.$el, this.dataSrc);
|
|
82
|
+
if (!window.IntersectionObserver) {
|
|
83
|
+
setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
|
|
46
84
|
return;
|
|
47
85
|
}
|
|
48
86
|
|
|
49
|
-
if (
|
|
50
|
-
this.$el.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (this.target.length === 1) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
87
|
+
if (storage[this.cacheKey]) {
|
|
88
|
+
setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
|
|
89
|
+
} else if (this.isImg && this.width && this.height) {
|
|
90
|
+
setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
|
|
56
91
|
}
|
|
57
92
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.observer = new IntersectionObserver(this.load, {rootMargin});
|
|
62
|
-
this.observe();
|
|
93
|
+
this.observer = new IntersectionObserver(this.load, {
|
|
94
|
+
rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`,
|
|
95
|
+
});
|
|
63
96
|
|
|
97
|
+
requestAnimationFrame(this.observe);
|
|
64
98
|
},
|
|
65
99
|
|
|
66
100
|
disconnected() {
|
|
@@ -68,145 +102,94 @@ export default {
|
|
|
68
102
|
},
|
|
69
103
|
|
|
70
104
|
update: {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (!this.observer || isImg(this.$el)) {
|
|
105
|
+
read({ image }) {
|
|
106
|
+
if (!this.observer) {
|
|
74
107
|
return false;
|
|
75
108
|
}
|
|
76
|
-
const srcset = data(this.$el, 'data-srcset');
|
|
77
|
-
if (srcset && window.devicePixelRatio !== 1) {
|
|
78
109
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
css(this.$el, 'backgroundSize', `${store.bgSize}px`);
|
|
83
|
-
}
|
|
110
|
+
if (!image && document.readyState === 'complete') {
|
|
111
|
+
this.load(this.observer.takeRecords());
|
|
112
|
+
}
|
|
84
113
|
|
|
114
|
+
if (this.isImg) {
|
|
115
|
+
return false;
|
|
85
116
|
}
|
|
86
117
|
|
|
118
|
+
image &&
|
|
119
|
+
image.then(
|
|
120
|
+
(img) => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img))
|
|
121
|
+
);
|
|
87
122
|
},
|
|
88
123
|
|
|
89
|
-
|
|
124
|
+
write(data) {
|
|
125
|
+
if (this.dataSrcset && window.devicePixelRatio !== 1) {
|
|
126
|
+
const bgSize = css(this.$el, 'backgroundSize');
|
|
127
|
+
if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
|
|
128
|
+
data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
|
|
129
|
+
css(this.$el, 'backgroundSize', `${data.bgSize}px`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
90
133
|
|
|
134
|
+
events: ['resize'],
|
|
91
135
|
},
|
|
92
136
|
|
|
93
137
|
methods: {
|
|
94
|
-
|
|
95
138
|
load(entries) {
|
|
96
|
-
|
|
97
|
-
if (
|
|
139
|
+
// Old chromium based browsers (UC Browser) did not implement `isIntersecting`
|
|
140
|
+
if (
|
|
141
|
+
!entries.some((entry) => isUndefined(entry.isIntersecting) || entry.isIntersecting)
|
|
142
|
+
) {
|
|
98
143
|
return;
|
|
99
144
|
}
|
|
100
145
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this.dataSrc,
|
|
110
|
-
this.dataSources
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
this._data.image = image;
|
|
114
|
-
image.loading = 'eager';
|
|
115
|
-
setSrcAttrs(this.$el, image.currentSrc);
|
|
146
|
+
this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(
|
|
147
|
+
(img) => {
|
|
148
|
+
setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
|
|
149
|
+
storage[this.cacheKey] = currentSrc(img);
|
|
150
|
+
return img;
|
|
151
|
+
},
|
|
152
|
+
(e) => trigger(this.$el, new e.constructor(e.type, e))
|
|
153
|
+
);
|
|
116
154
|
|
|
117
155
|
this.observer.disconnect();
|
|
118
156
|
},
|
|
119
157
|
|
|
120
158
|
observe() {
|
|
121
159
|
if (this._connected && !this._data.image) {
|
|
122
|
-
|
|
160
|
+
for (const el of this.target) {
|
|
161
|
+
this.observer.observe(el);
|
|
162
|
+
}
|
|
123
163
|
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
164
|
+
},
|
|
165
|
+
},
|
|
128
166
|
};
|
|
129
167
|
|
|
130
|
-
function setSrcAttrs(el, src) {
|
|
131
|
-
|
|
168
|
+
function setSrcAttrs(el, src, srcset, sizes) {
|
|
132
169
|
if (isImg(el)) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
170
|
+
const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
|
|
171
|
+
set('sizes', sizes);
|
|
172
|
+
set('srcset', srcset);
|
|
173
|
+
set('src', src);
|
|
138
174
|
} else if (src) {
|
|
139
|
-
|
|
140
175
|
const change = !includes(el.style.backgroundImage, src);
|
|
141
176
|
if (change) {
|
|
142
177
|
css(el, 'backgroundImage', `url(${escape(src)})`);
|
|
143
178
|
trigger(el, createEvent('load', false));
|
|
144
179
|
}
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
const srcProps = ['data-src', 'data-srcset', 'sizes'];
|
|
151
|
-
function setSourceProps(sourceEl, targetEl) {
|
|
152
|
-
srcProps.forEach(prop => {
|
|
153
|
-
const value = data(sourceEl, prop);
|
|
154
|
-
if (value) {
|
|
155
|
-
attr(targetEl, prop.replace(/^(data-)+/, ''), value);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function getImageFromElement(el, src, sources) {
|
|
161
|
-
|
|
162
|
-
if (!src) {
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const img = new Image();
|
|
167
|
-
|
|
168
|
-
wrapInPicture(img, sources);
|
|
169
|
-
setSourceProps(el, img);
|
|
170
|
-
img.onload = () => setSrcAttrs(el, img.currentSrc);
|
|
171
|
-
attr(img, 'src', src);
|
|
172
|
-
return img;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
function wrapInPicture(img, sources) {
|
|
176
|
-
|
|
177
|
-
sources = parseSources(sources);
|
|
178
|
-
|
|
179
|
-
if (sources.length) {
|
|
180
|
-
const picture = fragment('<picture>');
|
|
181
|
-
sources.forEach(attrs => {
|
|
182
|
-
const source = fragment('<source>');
|
|
183
|
-
attr(source, attrs);
|
|
184
|
-
append(picture, source);
|
|
185
|
-
});
|
|
186
|
-
append(picture, img);
|
|
187
180
|
}
|
|
188
181
|
}
|
|
189
182
|
|
|
190
|
-
function
|
|
191
|
-
if (
|
|
192
|
-
|
|
183
|
+
function getPlaceholderImage(width, height, sizes) {
|
|
184
|
+
if (sizes) {
|
|
185
|
+
({ width, height } = Dimensions.ratio(
|
|
186
|
+
{ width, height },
|
|
187
|
+
'width',
|
|
188
|
+
toPx(sizesToPixel(sizes))
|
|
189
|
+
));
|
|
193
190
|
}
|
|
194
191
|
|
|
195
|
-
|
|
196
|
-
try {
|
|
197
|
-
sources = JSON.parse(sources);
|
|
198
|
-
} catch (e) {
|
|
199
|
-
sources = [];
|
|
200
|
-
}
|
|
201
|
-
} else {
|
|
202
|
-
sources = parseOptions(sources);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
if (!isArray(sources)) {
|
|
206
|
-
sources = [sources];
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return sources.filter(source => !isEmpty(source));
|
|
192
|
+
return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
|
|
210
193
|
}
|
|
211
194
|
|
|
212
195
|
const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
|
|
@@ -230,11 +213,11 @@ const additionRe = /[+-]?(\d+)/g;
|
|
|
230
213
|
function evaluateSize(size) {
|
|
231
214
|
return startsWith(size, 'calc')
|
|
232
215
|
? size
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
216
|
+
.slice(5, -1)
|
|
217
|
+
.replace(sizeRe, (size) => toPx(size))
|
|
218
|
+
.replace(/ /g, '')
|
|
219
|
+
.match(additionRe)
|
|
220
|
+
.reduce((a, b) => a + +b, 0)
|
|
238
221
|
: size;
|
|
239
222
|
}
|
|
240
223
|
|
|
@@ -243,23 +226,25 @@ function getSourceSize(srcset, sizes) {
|
|
|
243
226
|
const srcSize = toPx(sizesToPixel(sizes));
|
|
244
227
|
const descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort((a, b) => a - b);
|
|
245
228
|
|
|
246
|
-
return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
|
|
229
|
+
return descriptors.filter((size) => size >= srcSize)[0] || descriptors.pop() || '';
|
|
247
230
|
}
|
|
248
231
|
|
|
249
|
-
function
|
|
250
|
-
|
|
251
|
-
attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>');
|
|
252
|
-
}
|
|
232
|
+
function isImg(el) {
|
|
233
|
+
return el.tagName === 'IMG';
|
|
253
234
|
}
|
|
254
235
|
|
|
255
|
-
function
|
|
256
|
-
return
|
|
236
|
+
function currentSrc(el) {
|
|
237
|
+
return el.currentSrc || el.src;
|
|
257
238
|
}
|
|
258
239
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
240
|
+
const key = '__test__';
|
|
241
|
+
let storage;
|
|
262
242
|
|
|
263
|
-
|
|
264
|
-
|
|
243
|
+
// workaround for Safari's private browsing mode and accessing sessionStorage in Blink
|
|
244
|
+
try {
|
|
245
|
+
storage = window.sessionStorage || {};
|
|
246
|
+
storage[key] = 1;
|
|
247
|
+
delete storage[key];
|
|
248
|
+
} catch (e) {
|
|
249
|
+
storage = {};
|
|
265
250
|
}
|
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
|
}
|