|
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