|
5 | 5 | 'use strict';
|
6 | 6 |
|
7 | 7 | var options = $.lazyLoadXT,
|
| 8 | + documentElement = document.documentElement, |
8 | 9 | srcsetSupport = (function () {
|
9 | 10 | return 'srcset' in (new Image());
|
10 | 11 | })(),
|
11 |
| - reUrl = /^\s*(\S*)/, |
| 12 | + reUrl = /^\s*(\S+)/, |
12 | 13 | reWidth = /\S\s+(\d+)w/,
|
13 |
| - reHeight = /\S\s+(\d+)h/, |
14 | 14 | reDpr = /\S\s+([\d\.]+)x/,
|
15 | 15 | infty = [0, Infinity],
|
16 | 16 | one = [0, 1],
|
|
22 | 22 | },
|
23 | 23 | viewport = {
|
24 | 24 | w: 0,
|
25 |
| - h: 0, |
26 | 25 | x: 0
|
27 | 26 | },
|
28 | 27 | property,
|
|
49 | 48 | return item[property] === limit;
|
50 | 49 | }
|
51 | 50 |
|
| 51 | + function splitSrcset(srcset) { |
| 52 | + return srcset.replace(/^\s+|\s+$/g, '').replace(/(\s+[\d\.]+[wx]),\s*|\s*,\s+/g, '$1 @,@ ').split(' @,@ '); |
| 53 | + } |
| 54 | + |
52 | 55 | function parseSrcset($el) {
|
53 | 56 | var srcset = $el.attr(options.srcsetAttr);
|
54 | 57 |
|
55 | 58 | if (!srcset) {
|
56 | 59 | return false;
|
57 | 60 | }
|
58 | 61 |
|
59 |
| - var list = $.map(srcset.replace(/(\s[\d.]+[whx]),/g, '$1 @,@ ').split(' @,@ '), function (item) { |
| 62 | + var list = $.map(splitSrcset(srcset), function (item) { |
60 | 63 | return {
|
61 | 64 | url: reUrl.exec(item)[1],
|
62 | 65 | w: parseFloat((reWidth.exec(item) || infty)[1]),
|
63 |
| - h: parseFloat((reHeight.exec(item) || infty)[1]), |
64 | 66 | x: parseFloat((reDpr.exec(item) || one)[1])
|
65 | 67 | };
|
66 | 68 | });
|
|
69 | 71 | return false;
|
70 | 72 | }
|
71 | 73 |
|
72 |
| - var documentElement = document.documentElement, |
73 |
| - whx, |
74 |
| - src; |
75 |
| - |
76 | 74 | viewport = {
|
77 | 75 | w: window.innerWidth || documentElement.clientWidth,
|
78 |
| - h: window.innerHeight || documentElement.clientHeight, |
79 | 76 | x: window.devicePixelRatio || 1
|
80 | 77 | };
|
81 | 78 |
|
82 |
| - // Notice for DOMtastic users: currently $.grep method is not implemented in DOMtastic |
| 79 | + var wx, |
| 80 | + src; |
83 | 81 |
|
84 |
| - for (whx in viewport) { |
85 |
| - property = whx; |
| 82 | + for (wx in viewport) { |
| 83 | + property = wx; |
86 | 84 | limit = mathFilter(list, 'max');
|
87 | 85 | list = $.grep(list, compareMax);
|
88 | 86 | }
|
89 | 87 |
|
90 |
| - for (whx in viewport) { |
91 |
| - property = whx; |
| 88 | + for (wx in viewport) { |
| 89 | + property = wx; |
92 | 90 | limit = mathFilter(list, 'min');
|
93 | 91 | list = $.grep(list, compareMin);
|
94 | 92 | }
|
|
106 | 104 | var srcset = $el.attr(options.srcsetAttr);
|
107 | 105 |
|
108 | 106 | if (srcset) {
|
109 |
| - if (!options.srcsetExtended && srcsetSupport) { |
| 107 | + if (srcsetSupport) { |
| 108 | + if (options.srcsetExtended) { |
| 109 | + srcset = $.map(splitSrcset(srcset), function (item) { |
| 110 | + var i = item.indexOf(' '); |
| 111 | + if (i < 0) { |
| 112 | + i = item.length; |
| 113 | + } |
| 114 | + return ($el.attr(options.srcsetBaseAttr) || '') + item.substr(0, i) + ($el.attr(options.srcsetExtAttr) || '') + item.substr(i); |
| 115 | + }).join(', '); |
| 116 | + } |
110 | 117 | $el.attr('srcset', srcset);
|
111 | 118 | } else {
|
112 | 119 | $el.lazyLoadXT.srcAttr = parseSrcset;
|
|
0 commit comments