uikit 3.9.5-dev.e48c5e252 → 3.9.5-dev.ed8f978e8

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 (47) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/css/uikit-core-rtl.css +3 -3
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +3 -3
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +3 -3
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +3 -3
  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 +36 -107
  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 +36 -107
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/core/cover.js +1 -2
  44. package/src/js/core/img.js +35 -96
  45. package/src/less/components/cover.less +1 -2
  46. package/src/scss/components/cover.scss +1 -2
  47. 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.e48c5e252",
5
+ "version": "3.9.5-dev.ed8f978e8",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -1,10 +1,9 @@
1
1
  import Video from './video';
2
- import Class from '../mixin/class';
3
2
  import {css, Dimensions, parent} from 'uikit-util';
4
3
 
5
4
  export default {
6
5
 
7
- mixins: [Class, Video],
6
+ mixins: [Video],
8
7
 
9
8
  props: {
10
9
  width: Number,
@@ -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) {
58
+ if (!this.observer || isImg(this.$el)) {
83
59
  return false;
84
60
  }
85
61
 
86
- if (!image && document.readyState === 'complete') {
87
- this.load(this.observer.takeRecords());
88
- }
89
-
90
- if (isImg(this.$el)) {
91
- return false;
92
- }
93
-
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,20 +112,15 @@ 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
+
119
+ const parentNode = parent(el);
120
+ const elements = isPicture(parentNode) ? children(parentNode) : [el];
121
+ elements.forEach(el => setSourceProps(el, el));
160
122
  src && attr(el, 'src', src);
123
+
161
124
  } else if (src) {
162
125
 
163
126
  const change = !includes(el.style.backgroundImage, src);
@@ -170,16 +133,26 @@ function setSrcAttrs(el, src) {
170
133
 
171
134
  }
172
135
 
173
- function getPlaceholderImage(el) {
174
- const sizes = data(el, 'sizes');
175
- let width = data(el, 'width');
176
- let height = data(el, 'height');
136
+ const srcProps = ['data-src', 'data-srcset', 'sizes'];
137
+ function setSourceProps(sourceEl, targetEl) {
138
+ srcProps.forEach(prop => {
139
+ const value = data(sourceEl, prop);
140
+ if (value) {
141
+ attr(targetEl, prop.replace(/^(data-)+/, ''), value);
142
+ }
143
+ });
144
+ }
145
+
146
+ function getImageFromElement(el, src) {
177
147
 
178
- if (sizes) {
179
- ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
148
+ if (!src) {
149
+ return false;
180
150
  }
181
151
 
182
- return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
152
+ const img = new Image();
153
+ setSourceProps(el, img);
154
+ attr(img, 'src', src);
155
+ return img;
183
156
  }
184
157
 
185
158
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -198,24 +171,6 @@ function sizesToPixel(sizes) {
198
171
  return matches || '100vw';
199
172
  }
200
173
 
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
174
  const sizeRe = /\d+(?:\w+|%)/g;
220
175
  const additionRe = /[+-]?(\d+)/g;
221
176
  function evaluateSize(size) {
@@ -248,19 +203,3 @@ function isImg(el) {
248
203
  function isA(el, tagName) {
249
204
  return el && el.tagName === tagName;
250
205
  }
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
- }
@@ -14,14 +14,13 @@
14
14
 
15
15
  /*
16
16
  * Works with iframes and embedded content
17
- * 1. Apply transform instantly. Needed if transform is transitioned.
17
+ * 1. Use attribute to apply transform instantly. Needed if transform is transitioned.
18
18
  * 2. Reset responsiveness for embedded content
19
19
  * 3. Center object
20
20
  * Note: Percent values on the `top` property only works if this element
21
21
  * is absolute positioned or if the container has a height
22
22
  */
23
23
 
24
- .uk-cover,
25
24
  /* 1 */
26
25
  [uk-cover] {
27
26
  /* 2 */
@@ -14,14 +14,13 @@
14
14
 
15
15
  /*
16
16
  * Works with iframes and embedded content
17
- * 1. Apply transform instantly. Needed if transform is transitioned.
17
+ * 1. Use attribute to apply transform instantly. Needed if transform is transitioned.
18
18
  * 2. Reset responsiveness for embedded content
19
19
  * 3. Center object
20
20
  * Note: Percent values on the `top` property only works if this element
21
21
  * is absolute positioned or if the container has a height
22
22
  */
23
23
 
24
- .uk-cover,
25
24
  /* 1 */
26
25
  [uk-cover] {
27
26
  /* 2 */
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>