uikit 3.9.5-dev.4be822584 → 3.9.5-dev.59737a9b5

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 (52) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/build/less.js +30 -11
  3. package/build/util.js +1 -20
  4. package/dist/css/uikit-core-rtl.css +7 -7
  5. package/dist/css/uikit-core-rtl.min.css +1 -1
  6. package/dist/css/uikit-core.css +4 -4
  7. package/dist/css/uikit-core.min.css +1 -1
  8. package/dist/css/uikit-rtl.css +7 -7
  9. package/dist/css/uikit-rtl.min.css +1 -1
  10. package/dist/css/uikit.css +4 -4
  11. package/dist/css/uikit.min.css +1 -1
  12. package/dist/js/components/countdown.js +1 -1
  13. package/dist/js/components/countdown.min.js +1 -1
  14. package/dist/js/components/filter.js +1 -1
  15. package/dist/js/components/filter.min.js +1 -1
  16. package/dist/js/components/lightbox-panel.js +1 -1
  17. package/dist/js/components/lightbox-panel.min.js +1 -1
  18. package/dist/js/components/lightbox.js +1 -1
  19. package/dist/js/components/lightbox.min.js +1 -1
  20. package/dist/js/components/notification.js +1 -1
  21. package/dist/js/components/notification.min.js +1 -1
  22. package/dist/js/components/parallax.js +1 -1
  23. package/dist/js/components/parallax.min.js +1 -1
  24. package/dist/js/components/slider-parallax.js +1 -1
  25. package/dist/js/components/slider-parallax.min.js +1 -1
  26. package/dist/js/components/slider.js +1 -1
  27. package/dist/js/components/slider.min.js +1 -1
  28. package/dist/js/components/slideshow-parallax.js +1 -1
  29. package/dist/js/components/slideshow-parallax.min.js +1 -1
  30. package/dist/js/components/slideshow.js +1 -1
  31. package/dist/js/components/slideshow.min.js +1 -1
  32. package/dist/js/components/sortable.js +2 -2
  33. package/dist/js/components/sortable.min.js +1 -1
  34. package/dist/js/components/tooltip.js +1 -1
  35. package/dist/js/components/tooltip.min.js +1 -1
  36. package/dist/js/components/upload.js +1 -1
  37. package/dist/js/components/upload.min.js +1 -1
  38. package/dist/js/uikit-core.js +114 -53
  39. package/dist/js/uikit-core.min.js +1 -1
  40. package/dist/js/uikit-icons.js +1 -1
  41. package/dist/js/uikit-icons.min.js +1 -1
  42. package/dist/js/uikit.js +115 -54
  43. package/dist/js/uikit.min.js +1 -1
  44. package/package.json +5 -7
  45. package/src/js/components/sortable.js +1 -1
  46. package/src/js/core/img.js +93 -49
  47. package/src/js/util/dom.js +2 -5
  48. package/src/less/components/list.less +1 -1
  49. package/src/less/components/utility.less +1 -1
  50. package/src/scss/components/list.scss +1 -1
  51. package/src/scss/components/utility.scss +1 -1
  52. package/tests/image.html +40 -14
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.4be822584",
5
+ "version": "3.9.5-dev.59737a9b5",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -41,8 +41,8 @@
41
41
  "camelcase": "^6.2.1",
42
42
  "clean-css": "^5.2.2",
43
43
  "dateformat": "^5.0.2",
44
- "esbuild": "^0.13.14",
45
- "eslint": "^8.2.0",
44
+ "esbuild": "^0.14.6",
45
+ "eslint": "^8.5.0",
46
46
  "fs-extra": "^10.0.0",
47
47
  "glob": "^7.2.0",
48
48
  "inquirer": "^8.2.0",
@@ -50,10 +50,8 @@
50
50
  "minimist": "^1.2.5",
51
51
  "number-precision": "^1.5.1",
52
52
  "p-limit": "^4.0.0",
53
- "postcss": "^8.3.11",
54
- "prettier": "^2.4.1",
55
- "rollup": "^2.60.0",
56
- "rollup-plugin-esbuild": "^4.7.1",
53
+ "rollup": "^2.61.1",
54
+ "rollup-plugin-esbuild": "^4.7.2",
57
55
  "rollup-plugin-html": "^0.2.1",
58
56
  "rollup-plugin-modify": "^3.0.0",
59
57
  "rtlcss": "^3.5.0",
@@ -300,7 +300,7 @@ function trackScroll(pos) {
300
300
  const dist = (Date.now() - last) * .3;
301
301
  last = Date.now();
302
302
 
303
- scrollParents(document.elementFromPoint(x, pos.y)).reverse().some(scrollEl => {
303
+ scrollParents(document.elementFromPoint(x, pos.y), /auto|scroll/).reverse().some(scrollEl => {
304
304
 
305
305
  let {scrollTop: scroll, scrollHeight} = scrollEl;
306
306
 
@@ -1,4 +1,4 @@
1
- import {attr, children, createEvent, css, data, escape, includes, isUndefined, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {createEvent, css, Dimensions, escape, getImage, includes, isUndefined, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
2
2
 
3
3
  export default {
4
4
 
@@ -6,6 +6,10 @@ export default {
6
6
 
7
7
  props: {
8
8
  dataSrc: String,
9
+ dataSrcset: Boolean,
10
+ sizes: String,
11
+ width: Number,
12
+ height: Number,
9
13
  offsetTop: String,
10
14
  offsetLeft: String,
11
15
  target: String
@@ -13,6 +17,10 @@ export default {
13
17
 
14
18
  data: {
15
19
  dataSrc: '',
20
+ dataSrcset: false,
21
+ sizes: false,
22
+ width: false,
23
+ height: false,
16
24
  offsetTop: '50vh',
17
25
  offsetLeft: '50vw',
18
26
  target: false
@@ -20,6 +28,26 @@ export default {
20
28
 
21
29
  computed: {
22
30
 
31
+ cacheKey({dataSrc}) {
32
+ return `${this.$name}.${dataSrc}`;
33
+ },
34
+
35
+ width({width, dataWidth}) {
36
+ return width || dataWidth;
37
+ },
38
+
39
+ height({height, dataHeight}) {
40
+ return height || dataHeight;
41
+ },
42
+
43
+ sizes({sizes, dataSizes}) {
44
+ return sizes || dataSizes;
45
+ },
46
+
47
+ isImg(_, $el) {
48
+ return isImg($el);
49
+ },
50
+
23
51
  target: {
24
52
 
25
53
  get({target}) {
@@ -30,6 +58,14 @@ export default {
30
58
  this.observe();
31
59
  }
32
60
 
61
+ },
62
+
63
+ offsetTop({offsetTop}) {
64
+ return toPx(offsetTop, 'height');
65
+ },
66
+
67
+ offsetLeft({offsetLeft}) {
68
+ return toPx(offsetLeft, 'width');
33
69
  }
34
70
 
35
71
  },
@@ -37,13 +73,21 @@ export default {
37
73
  connected() {
38
74
 
39
75
  if (!window.IntersectionObserver) {
40
- setSrcAttrs(this.$el, this.dataSrc);
76
+ setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
41
77
  return;
42
78
  }
43
79
 
44
- const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(this.offsetLeft, 'width')}px`;
45
- this.observer = new IntersectionObserver(this.load, {rootMargin});
46
- this.observe();
80
+ if (storage[this.cacheKey]) {
81
+ setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
82
+ } else if (this.isImg && this.width && this.height) {
83
+ setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
84
+ }
85
+
86
+ this.observer = new IntersectionObserver(this.load, {
87
+ rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`
88
+ });
89
+
90
+ requestAnimationFrame(this.observe);
47
91
 
48
92
  },
49
93
 
@@ -55,23 +99,30 @@ export default {
55
99
 
56
100
  read({image}) {
57
101
 
58
- if (!this.observer || isImg(this.$el)) {
102
+ if (!this.observer) {
103
+ return false;
104
+ }
105
+
106
+ if (!image && document.readyState === 'complete') {
107
+ this.load(this.observer.takeRecords());
108
+ }
109
+
110
+ if (this.isImg) {
59
111
  return false;
60
112
  }
61
113
 
62
- setSrcAttrs(this.$el, image && image.currentSrc);
114
+ image && image.then(img => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img)));
63
115
 
64
116
  },
65
117
 
66
- write(store) {
118
+ write(data) {
67
119
 
68
- const srcset = data(this.$el, 'data-srcset');
69
- if (srcset && window.devicePixelRatio !== 1) {
120
+ if (this.dataSrcset && window.devicePixelRatio !== 1) {
70
121
 
71
122
  const bgSize = css(this.$el, 'backgroundSize');
72
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
73
- store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
74
- css(this.$el, 'backgroundSize', `${store.bgSize}px`);
123
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
124
+ data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
125
+ css(this.$el, 'backgroundSize', `${data.bgSize}px`);
75
126
  }
76
127
 
77
128
  }
@@ -91,13 +142,13 @@ export default {
91
142
  return;
92
143
  }
93
144
 
94
- if (this._data.image) {
95
- return this._data.image;
96
- }
145
+ this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(img => {
146
+
147
+ setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
148
+ storage[this.cacheKey] = currentSrc(img);
149
+ return img;
97
150
 
98
- const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc);
99
- this._data.image = image;
100
- setSrcAttrs(this.$el, image.currentSrc || this.dataSrc);
151
+ }, e => trigger(this.$el, new e.constructor(e.type, e)));
101
152
 
102
153
  this.observer.disconnect();
103
154
  },
@@ -112,15 +163,13 @@ export default {
112
163
 
113
164
  };
114
165
 
115
- function setSrcAttrs(el, src) {
166
+ function setSrcAttrs(el, src, srcset, sizes) {
116
167
 
117
168
  if (isImg(el)) {
118
-
119
- const parentNode = parent(el);
120
- const elements = isPicture(parentNode) ? children(parentNode) : [el];
121
- elements.forEach(el => setSourceProps(el, el));
122
- src && attr(el, 'src', src);
123
-
169
+ const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
170
+ set('sizes', sizes);
171
+ set('srcset', srcset);
172
+ set('src', src);
124
173
  } else if (src) {
125
174
 
126
175
  const change = !includes(el.style.backgroundImage, src);
@@ -133,26 +182,13 @@ function setSrcAttrs(el, src) {
133
182
 
134
183
  }
135
184
 
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) {
185
+ function getPlaceholderImage(width, height, sizes) {
147
186
 
148
- if (!src) {
149
- return false;
187
+ if (sizes) {
188
+ ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
150
189
  }
151
190
 
152
- const img = new Image();
153
- setSourceProps(el, img);
154
- attr(img, 'src', src);
155
- return img;
191
+ return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
156
192
  }
157
193
 
158
194
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -192,14 +228,22 @@ function getSourceSize(srcset, sizes) {
192
228
  return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
193
229
  }
194
230
 
195
- function isPicture(el) {
196
- return isA(el, 'PICTURE');
231
+ function isImg(el) {
232
+ return el.tagName === 'IMG';
197
233
  }
198
234
 
199
- function isImg(el) {
200
- return isA(el, 'IMG');
235
+ function currentSrc(el) {
236
+ return el.currentSrc || el.src;
201
237
  }
202
238
 
203
- function isA(el, tagName) {
204
- return el && el.tagName === tagName;
239
+ const key = '__test__';
240
+ let storage;
241
+
242
+ // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
243
+ try {
244
+ storage = window.sessionStorage || {};
245
+ storage[key] = 1;
246
+ delete storage[key];
247
+ } catch (e) {
248
+ storage = {};
205
249
  }
@@ -1,4 +1,4 @@
1
- import {on} from './event';
1
+ import {once} from './event';
2
2
  import {parent} from './filter';
3
3
  import {find, findAll} from './selector';
4
4
  import {isElement, isString, isUndefined, toNode, toNodes} from './lang';
@@ -10,10 +10,7 @@ export function ready(fn) {
10
10
  return;
11
11
  }
12
12
 
13
- const unbind = on(document, 'DOMContentLoaded', function () {
14
- unbind();
15
- fn();
16
- });
13
+ once(document, 'DOMContentLoaded', fn);
17
14
  }
18
15
 
19
16
  export function empty(element) {
@@ -95,7 +95,7 @@
95
95
  .uk-list-decimal > * { counter-increment: decimal; }
96
96
 
97
97
  [class*='uk-list'] > ::before {
98
- content: '';
98
+ content: "";
99
99
  position: relative;
100
100
  left: -@list-padding-left;
101
101
  width: @list-padding-left;
@@ -303,7 +303,7 @@
303
303
  }
304
304
 
305
305
  .uk-box-shadow-bottom::after {
306
- content: '';
306
+ content: "";
307
307
  /* 1 */
308
308
  position: absolute;
309
309
  bottom: -@box-shadow-bottom-height;
@@ -95,7 +95,7 @@ $internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D
95
95
  .uk-list-decimal > * { counter-increment: decimal; }
96
96
 
97
97
  [class*='uk-list'] > ::before {
98
- content: '';
98
+ content: "";
99
99
  position: relative;
100
100
  left: (-$list-padding-left);
101
101
  width: $list-padding-left;
@@ -303,7 +303,7 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
303
303
  }
304
304
 
305
305
  .uk-box-shadow-bottom::after {
306
- content: '';
306
+ content: "";
307
307
  /* 1 */
308
308
  position: absolute;
309
309
  bottom: (-$box-shadow-bottom-height);
package/tests/image.html CHANGED
@@ -14,6 +14,8 @@
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
+
17
19
  <div class="uk-child-width-1-2@m" uk-grid>
18
20
  <div>
19
21
  <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>
@@ -253,28 +255,28 @@
253
255
 
254
256
  <ul class="uk-slideshow-items">
255
257
  <li>
256
- <img data-src="images/photo.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !.uk-slideshow-items > :last-child, !* +*">
258
+ <img data-src="images/photo.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !.uk-slideshow-items > :last-child, !* +*">
257
259
  <div class="uk-position-center uk-position-small uk-text-center">
258
260
  <h2 uk-slideshow-parallax="x: 100,-100">Heading</h2>
259
261
  <p uk-slideshow-parallax="x: 200,-200">Lorem ipsum dolor sit amet.</p>
260
262
  </div>
261
263
  </li>
262
264
  <li>
263
- <img data-src="images/dark.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !* +*">
265
+ <img data-src="images/dark.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !* +*">
264
266
  <div class="uk-position-center uk-position-small uk-text-center">
265
267
  <h2 uk-slideshow-parallax="x: 100,-100">Heading</h2>
266
268
  <p uk-slideshow-parallax="x: 200,-200">Lorem ipsum dolor sit amet.</p>
267
269
  </div>
268
270
  </li>
269
271
  <li>
270
- <img data-src="images/light.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !* +*">
272
+ <img data-src="images/light.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !* +*">
271
273
  <div class="uk-position-center uk-position-small uk-text-center">
272
274
  <h2 uk-slideshow-parallax="y: -50,0,0; opacity: 1,1,0">Heading</h2>
273
275
  <p uk-slideshow-parallax="y: 50,0,0; opacity: 1,1,0">Lorem ipsum dolor sit amet.</p>
274
276
  </div>
275
277
  </li>
276
278
  <li>
277
- <img data-src="images/photo2.jpg" alt="" uk-cover width="1800" height="1200" uk-img="target: !* -*, !.uk-slideshow-items > :first-child">
279
+ <img data-src="images/photo2.jpg" alt="" uk-cover data-width="1800" data-height="1200" uk-img="target: !* -*, !.uk-slideshow-items > :first-child">
278
280
  <div class="uk-position-center uk-position-small uk-text-center">
279
281
  <h2 uk-slideshow-parallax="x: 200,0,0">Heading</h2>
280
282
  <p uk-slideshow-parallax="x: 0,0,-200">Lorem ipsum dolor sit amet.</p>
@@ -294,43 +296,43 @@
294
296
 
295
297
  <ul class="uk-slider-items uk-child-width-1-2@s uk-child-width-1-3@m">
296
298
  <li>
297
- <img data-src="images/slider1.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
299
+ <img data-src="images/slider1.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
298
300
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">1</h1></div>
299
301
  </li>
300
302
  <li>
301
- <img data-src="images/slider2.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
303
+ <img data-src="images/slider2.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
302
304
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">2</h1></div>
303
305
  </li>
304
306
  <li>
305
- <img data-src="images/slider3.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
307
+ <img data-src="images/slider3.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
306
308
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">3</h1></div>
307
309
  </li>
308
310
  <li>
309
- <img data-src="images/slider4.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
311
+ <img data-src="images/slider4.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
310
312
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">4</h1></div>
311
313
  </li>
312
314
  <li>
313
- <img data-src="images/slider5.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
315
+ <img data-src="images/slider5.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
314
316
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">5</h1></div>
315
317
  </li>
316
318
  <li>
317
- <img data-src="images/slider1.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
319
+ <img data-src="images/slider1.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
318
320
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">6</h1></div>
319
321
  </li>
320
322
  <li>
321
- <img data-src="images/slider2.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
323
+ <img data-src="images/slider2.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
322
324
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">7</h1></div>
323
325
  </li>
324
326
  <li>
325
- <img data-src="images/slider3.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
327
+ <img data-src="images/slider3.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
326
328
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">8</h1></div>
327
329
  </li>
328
330
  <li>
329
- <img data-src="images/slider4.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
331
+ <img data-src="images/slider4.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
330
332
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">9</h1></div>
331
333
  </li>
332
334
  <li>
333
- <img data-src="images/slider5.jpg" alt="" width="400" height="600" uk-img="target: !.uk-slider-items">
335
+ <img data-src="images/slider5.jpg" alt="" data-width="400" data-height="600" uk-img="target: !.uk-slider-items">
334
336
  <div class="uk-position-center uk-panel"><h1 class="uk-transition-slide-bottom-small">10</h1></div>
335
337
  </li>
336
338
  </ul>
@@ -362,6 +364,30 @@
362
364
  <td>''</td>
363
365
  <td>The image's `src` attribute.</td>
364
366
  </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>
365
391
  <tr>
366
392
  <td><code>offsetTop</code></td>
367
393
  <td>String</td>