uikit 3.9.5-dev.ab814f7fb → 3.9.5-dev.ce77459c6

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/css/uikit-core-rtl.css +1 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +1 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +1 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +1 -1
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -1
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +1 -1
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +1 -1
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +1 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +33 -106
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +33 -106
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/core/img.js +33 -96
  44. package/tests/image.html +14 -40
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.9.5-dev.ab814f7fb",
5
+ "version": "3.9.5-dev.ce77459c6",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -1,4 +1,4 @@
1
- import {$, attr, children, createEvent, css, data, Dimensions, escape, getImage, includes, isUndefined, once, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {attr, children, createEvent, css, data, escape, includes, isUndefined, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
2
2
 
3
3
  export default {
4
4
 
@@ -6,8 +6,6 @@ export default {
6
6
 
7
7
  props: {
8
8
  dataSrc: String,
9
- width: Number,
10
- height: Number,
11
9
  offsetTop: String,
12
10
  offsetLeft: String,
13
11
  target: String
@@ -15,8 +13,6 @@ export default {
15
13
 
16
14
  data: {
17
15
  dataSrc: '',
18
- width: false,
19
- height: false,
20
16
  offsetTop: '50vh',
21
17
  offsetLeft: '50vw',
22
18
  target: false
@@ -24,10 +20,6 @@ export default {
24
20
 
25
21
  computed: {
26
22
 
27
- cacheKey({dataSrc}) {
28
- return `${this.$name}.${dataSrc}`;
29
- },
30
-
31
23
  target: {
32
24
 
33
25
  get({target}) {
@@ -38,14 +30,6 @@ export default {
38
30
  this.observe();
39
31
  }
40
32
 
41
- },
42
-
43
- offsetTop({offsetTop}) {
44
- return toPx(offsetTop, 'height');
45
- },
46
-
47
- offsetLeft({offsetLeft}) {
48
- return toPx(offsetLeft, 'width');
49
33
  }
50
34
 
51
35
  },
@@ -53,21 +37,13 @@ export default {
53
37
  connected() {
54
38
 
55
39
  if (!window.IntersectionObserver) {
56
- setSrcAttrs(this.$el);
40
+ setSrcAttrs(this.$el, this.dataSrc);
57
41
  return;
58
42
  }
59
43
 
60
- if (storage[this.cacheKey]) {
61
- setSrcAttrs(this.$el, storage[this.cacheKey]);
62
- } else if (isImg(this.$el) && this.width && this.height) {
63
- attr(this.$el, 'src', getPlaceholderImage(this.$el));
64
- }
65
-
66
- this.observer = new IntersectionObserver(this.load, {
67
- rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`
68
- });
69
-
70
- requestAnimationFrame(this.observe);
44
+ const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(this.offsetLeft, 'width')}px`;
45
+ this.observer = new IntersectionObserver(this.load, {rootMargin});
46
+ this.observe();
71
47
 
72
48
  },
73
49
 
@@ -79,19 +55,11 @@ export default {
79
55
 
80
56
  read({image}) {
81
57
 
82
- if (!this.observer) {
83
- return false;
84
- }
85
-
86
- if (!image && document.readyState === 'complete') {
87
- this.load(this.observer.takeRecords());
88
- }
89
-
90
- if (isImg(this.$el)) {
58
+ if (!this.observer || isImg(this.$el)) {
91
59
  return false;
92
60
  }
93
61
 
94
- image && image.then(img => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img)));
62
+ setSrcAttrs(this.$el, image && image.currentSrc);
95
63
 
96
64
  },
97
65
 
@@ -123,13 +91,13 @@ export default {
123
91
  return;
124
92
  }
125
93
 
126
- this._data.image = getImageFromElement(this.$el, this.dataSrc).then(img => {
127
-
128
- setSrcAttrs(this.$el, currentSrc(img));
129
- storage[this.cacheKey] = currentSrc(img);
130
- return img;
94
+ if (this._data.image) {
95
+ return this._data.image;
96
+ }
131
97
 
132
- }, e => trigger(this.$el, new e.constructor(e.type, e)));
98
+ const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc);
99
+ this._data.image = image;
100
+ setSrcAttrs(this.$el, image.currentSrc);
133
101
 
134
102
  this.observer.disconnect();
135
103
  },
@@ -144,19 +112,12 @@ export default {
144
112
 
145
113
  };
146
114
 
147
- const srcProps = ['data-src', 'data-srcset', 'sizes'];
148
115
  function setSrcAttrs(el, src) {
149
116
 
150
- const parentNode = parent(el);
151
117
  if (isImg(el)) {
152
- (isPicture(parentNode) ? children(parentNode) : [el]).forEach(el =>
153
- srcProps.forEach(prop => {
154
- const value = data(el, prop);
155
- if (value) {
156
- attr(el, prop.replace(/^(data-)+/, ''), value);
157
- }
158
- })
159
- );
118
+ const parentNode = parent(el);
119
+ const elements = isPicture(parentNode) ? children(parentNode) : [el];
120
+ elements.forEach(setSourceProps);
160
121
  src && attr(el, 'src', src);
161
122
  } else if (src) {
162
123
 
@@ -170,16 +131,26 @@ function setSrcAttrs(el, src) {
170
131
 
171
132
  }
172
133
 
173
- function getPlaceholderImage(el) {
174
- const sizes = data(el, 'sizes');
175
- let width = data(el, 'width');
176
- let height = data(el, 'height');
134
+ const srcProps = ['data-src', 'data-srcset', 'sizes'];
135
+ function setSourceProps(sourceEl, targetEl) {
136
+ srcProps.forEach(prop => {
137
+ const value = data(sourceEl, prop);
138
+ if (value) {
139
+ attr(targetEl || sourceEl, prop.replace(/^(data-)+/, ''), value);
140
+ }
141
+ });
142
+ }
143
+
144
+ function getImageFromElement(el, src) {
177
145
 
178
- if (sizes) {
179
- ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
146
+ if (!src) {
147
+ return false;
180
148
  }
181
149
 
182
- return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
150
+ const img = new Image();
151
+ setSourceProps(el, img);
152
+ attr(img, 'src', src);
153
+ return img;
183
154
  }
184
155
 
185
156
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -198,24 +169,6 @@ function sizesToPixel(sizes) {
198
169
  return matches || '100vw';
199
170
  }
200
171
 
201
- function getImageFromElement(el, src) {
202
- const parentNode = parent(el);
203
-
204
- if (!src) {
205
- return Promise.reject(createEvent('error', false));
206
- }
207
-
208
- if (!isPicture(parentNode)) {
209
- return getImage(src, ...srcProps.slice(1).map(prop => data(el, prop)));
210
- }
211
-
212
- return new Promise((resolve, reject) => {
213
- const picture = parentNode.cloneNode(true);
214
- once(picture, 'load error', e => e.type === 'error' ? reject(e) : resolve(e.target), true);
215
- setSrcAttrs($('img', picture));
216
- });
217
- }
218
-
219
172
  const sizeRe = /\d+(?:\w+|%)/g;
220
173
  const additionRe = /[+-]?(\d+)/g;
221
174
  function evaluateSize(size) {
@@ -248,19 +201,3 @@ function isImg(el) {
248
201
  function isA(el, tagName) {
249
202
  return el && el.tagName === tagName;
250
203
  }
251
-
252
- function currentSrc(el) {
253
- return el.currentSrc || el.src;
254
- }
255
-
256
- const key = '__test__';
257
- let storage;
258
-
259
- // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
260
- try {
261
- storage = window.sessionStorage || {};
262
- storage[key] = 1;
263
- delete storage[key];
264
- } catch (e) {
265
- storage = {};
266
- }
package/tests/image.html CHANGED
@@ -14,8 +14,6 @@
14
14
 
15
15
  <h1>Image</h1>
16
16
 
17
- <p><button class="uk-button uk-button-default" onclick="sessionStorage.clear()">Clear Session Storage</button></p>
18
-
19
17
  <div class="uk-child-width-1-2@m" uk-grid>
20
18
  <div>
21
19
  <img data-src="https://images.unsplash.com/photo-1522201949034-507737bce479?fit=crop&w=900&h=600&q=80" width="900" height="600" alt="" uk-img>
@@ -255,28 +253,28 @@
255
253
 
256
254
  <ul class="uk-slideshow-items">
257
255
  <li>
258
- <img data-src="images/photo.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !.uk-slideshow-items > :last-child, !* +*">
256
+ <img data-src="images/photo.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !.uk-slideshow-items > :last-child, !* +*">
259
257
  <div class="uk-position-center uk-position-small uk-text-center">
260
258
  <h2 uk-slideshow-parallax="x: 100,-100">Heading</h2>
261
259
  <p uk-slideshow-parallax="x: 200,-200">Lorem ipsum dolor sit amet.</p>
262
260
  </div>
263
261
  </li>
264
262
  <li>
265
- <img data-src="images/dark.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !* +*">
263
+ <img data-src="images/dark.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !* +*">
266
264
  <div class="uk-position-center uk-position-small uk-text-center">
267
265
  <h2 uk-slideshow-parallax="x: 100,-100">Heading</h2>
268
266
  <p uk-slideshow-parallax="x: 200,-200">Lorem ipsum dolor sit amet.</p>
269
267
  </div>
270
268
  </li>
271
269
  <li>
272
- <img data-src="images/light.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !* +*">
270
+ <img data-src="images/light.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !* +*">
273
271
  <div class="uk-position-center uk-position-small uk-text-center">
274
272
  <h2 uk-slideshow-parallax="y: -50,0,0; opacity: 1,1,0">Heading</h2>
275
273
  <p uk-slideshow-parallax="y: 50,0,0; opacity: 1,1,0">Lorem ipsum dolor sit amet.</p>
276
274
  </div>
277
275
  </li>
278
276
  <li>
279
- <img data-src="images/photo2.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !.uk-slideshow-items > :first-child">
277
+ <img data-src="images/photo2.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !.uk-slideshow-items > :first-child">
280
278
  <div class="uk-position-center uk-position-small uk-text-center">
281
279
  <h2 uk-slideshow-parallax="x: 200,0,0">Heading</h2>
282
280
  <p uk-slideshow-parallax="x: 0,0,-200">Lorem ipsum dolor sit amet.</p>
@@ -296,43 +294,43 @@
296
294
 
297
295
  <ul class="uk-slider-items uk-child-width-1-2@s uk-child-width-1-3@m">
298
296
  <li>
299
- <img data-src="images/slider1.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
297
+ <img data-src="images/slider1.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
300
298
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">1</h1></div>
301
299
  </li>
302
300
  <li>
303
- <img data-src="images/slider2.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
301
+ <img data-src="images/slider2.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
304
302
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">2</h1></div>
305
303
  </li>
306
304
  <li>
307
- <img data-src="images/slider3.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
305
+ <img data-src="images/slider3.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
308
306
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">3</h1></div>
309
307
  </li>
310
308
  <li>
311
- <img data-src="images/slider4.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
309
+ <img data-src="images/slider4.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
312
310
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">4</h1></div>
313
311
  </li>
314
312
  <li>
315
- <img data-src="images/slider5.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
313
+ <img data-src="images/slider5.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
316
314
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">5</h1></div>
317
315
  </li>
318
316
  <li>
319
- <img data-src="images/slider1.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
317
+ <img data-src="images/slider1.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
320
318
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">6</h1></div>
321
319
  </li>
322
320
  <li>
323
- <img data-src="images/slider2.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
321
+ <img data-src="images/slider2.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
324
322
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">7</h1></div>
325
323
  </li>
326
324
  <li>
327
- <img data-src="images/slider3.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
325
+ <img data-src="images/slider3.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
328
326
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">8</h1></div>
329
327
  </li>
330
328
  <li>
331
- <img data-src="images/slider4.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
329
+ <img data-src="images/slider4.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
332
330
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">9</h1></div>
333
331
  </li>
334
332
  <li>
335
- <img data-src="images/slider5.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
333
+ <img data-src="images/slider5.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
336
334
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">10</h1></div>
337
335
  </li>
338
336
  </ul>
@@ -364,30 +362,6 @@
364
362
  <td>''</td>
365
363
  <td>The image's `src` attribute.</td>
366
364
  </tr>
367
- <tr>
368
- <td><code>dataSrcset</code></td>
369
- <td>String</td>
370
- <td>false</td>
371
- <td>The image's `srcset` attribute.</td>
372
- </tr>
373
- <tr>
374
- <td><code>sizes</code></td>
375
- <td>String</td>
376
- <td>false</td>
377
- <td>The image's `sizes` attribute.</td>
378
- </tr>
379
- <tr>
380
- <td><code>width</code></td>
381
- <td>String</td>
382
- <td>false</td>
383
- <td>The image's `width` attribute. It will be used to determine the placeholder's width and the images position in the document.</td>
384
- </tr>
385
- <tr>
386
- <td><code>height</code></td>
387
- <td>String</td>
388
- <td>false</td>
389
- <td>The image's `height` attribute. It will be used to determine the placeholder's height and the images position in the document.</td>
390
- </tr>
391
365
  <tr>
392
366
  <td><code>offsetTop</code></td>
393
367
  <td>String</td>