webshims-rails 1.15.5 → 1.15.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +3 -0
- data/lib/webshims-rails/version.rb +2 -2
- data/readme.textile +2 -5
- data/vendor/assets/javascripts/webshims/polyfiller.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +37 -32
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +36 -31
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +37 -32
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +273 -291
- data/vendor/assets/javascripts/webshims/shims/combos/5.js +38 -33
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +39 -34
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +38 -33
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +35 -30
- data/vendor/assets/javascripts/webshims/shims/form-validation.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/form-validators.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +4 -4
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +47 -47
- data/vendor/assets/javascripts/webshims/shims/picture.js +272 -289
- metadata +3 -2
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! respimage - v1.1
|
1
|
+
/*! respimage - v1.2.1 - 2014-12-23
|
2
2
|
Licensed MIT */
|
3
3
|
!function(window, document, undefined) {
|
4
4
|
"use strict";
|
@@ -7,31 +7,18 @@
|
|
7
7
|
}
|
8
8
|
function updateMetrics() {
|
9
9
|
var dprM;
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
19
|
-
function parseDescriptor(descriptor) {
|
20
|
-
if (!(descriptor in memDescriptor)) {
|
21
|
-
var descriptorObj = {
|
22
|
-
val: 1,
|
23
|
-
type: "x"
|
24
|
-
}, parsedDescriptor = trim(descriptor || "");
|
25
|
-
parsedDescriptor && (parsedDescriptor = parsedDescriptor.replace(regHDesc, ""),
|
26
|
-
parsedDescriptor.match(regDescriptor) ? (descriptorObj.val = 1 * RegExp.$1, descriptorObj.type = RegExp.$2) : descriptorObj = !1),
|
27
|
-
memDescriptor[descriptor] = descriptorObj;
|
28
|
-
}
|
29
|
-
return memDescriptor[descriptor];
|
10
|
+
isVwDirty = !1, DPR = window.devicePixelRatio, cssCache = {}, sizeLengthCache = {},
|
11
|
+
dprM = (DPR || 1) * cfg.xQuant, cfg.uT || (cfg.maxX = Math.max(1.3, cfg.maxX), dprM = Math.min(dprM, cfg.maxX),
|
12
|
+
ri.DPR = dprM), units.width = Math.max(window.innerWidth || 0, docElem.clientWidth),
|
13
|
+
units.height = Math.max(window.innerHeight || 0, docElem.clientHeight), units.vw = units.width / 100,
|
14
|
+
units.vh = units.height / 100, units.em = ri.getEmValue(), units.rem = units.em,
|
15
|
+
lazyFactor = cfg.lazyFactor / 2, lazyFactor = lazyFactor * dprM + lazyFactor, substractCurRes = .1 * dprM,
|
16
|
+
lowTreshHold = .5 + .2 * dprM, partialLowTreshHold = .5 + .25 * dprM, tMemory = dprM + 1.3,
|
17
|
+
(isLandscape = units.width > units.height) || (lazyFactor *= .9), supportAbort && (lazyFactor *= .9);
|
30
18
|
}
|
31
19
|
function chooseLowRes(lowRes, diff, dpr) {
|
32
|
-
var add = diff *
|
33
|
-
return isLandscape || (add /= 1.
|
34
|
-
lowRes > dpr;
|
20
|
+
var add = diff * Math.pow(lowRes, 2);
|
21
|
+
return isLandscape || (add /= 1.3), lowRes += add, lowRes > dpr;
|
35
22
|
}
|
36
23
|
function inView(el) {
|
37
24
|
if (!el.getBoundingClientRect) return !0;
|
@@ -61,20 +48,6 @@
|
|
61
48
|
}
|
62
49
|
return candidate;
|
63
50
|
}
|
64
|
-
function hasOneX(set) {
|
65
|
-
var i, ret, candidates, desc;
|
66
|
-
if (set) for (candidates = ri.parseSet(set), i = 0; i < candidates.length; i++) if (desc = candidates[i].desc,
|
67
|
-
"x" == desc.type && 1 == desc.val) {
|
68
|
-
ret = !0;
|
69
|
-
break;
|
70
|
-
}
|
71
|
-
return ret;
|
72
|
-
}
|
73
|
-
function hasWDescripor(set) {
|
74
|
-
if (!set) return !1;
|
75
|
-
var candidates = ri.parseSet(set);
|
76
|
-
return candidates[0] && "w" == candidates[0].desc.type;
|
77
|
-
}
|
78
51
|
function getAllSourceElements(picture, candidates) {
|
79
52
|
var i, len, source, srcset, sources = picture.getElementsByTagName("source");
|
80
53
|
for (i = 0, len = sources.length; len > i; i++) source = sources[i], source[ri.ns] = !0,
|
@@ -85,57 +58,31 @@
|
|
85
58
|
sizes: source.getAttribute("sizes")
|
86
59
|
});
|
87
60
|
}
|
88
|
-
function setResolution(candidate, sizesattr) {
|
89
|
-
var descriptor = candidate.desc;
|
90
|
-
return "w" == descriptor.type ? (candidate.cWidth = ri.calcListLength(sizesattr || "100vw"),
|
91
|
-
candidate.res = descriptor.val / candidate.cWidth) : candidate.res = descriptor.val,
|
92
|
-
candidate;
|
93
|
-
}
|
94
61
|
document.createElement("picture");
|
95
|
-
var ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
|
62
|
+
var lowTreshHold, partialLowTreshHold, isLandscape, lazyFactor, tMemory, substractCurRes, eminpx, alwaysCheckWDescriptor, resizeThrottle, ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
|
96
63
|
xQuant: 1,
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
}, srcAttr = "data-risrc", srcsetAttr = srcAttr + "set", supportAbort = /rident/.test(navigator.userAgent), curSrcProp = "currentSrc";
|
102
|
-
ri.ns = ("ri" + new Date().getTime()).substr(0, 9), curSrcProp in image || (curSrcProp = "src"),
|
103
|
-
ri.supSrcset = "srcset" in image, ri.supSizes = "sizes" in image, ri.selShort = "picture>img,img[srcset]",
|
104
|
-
ri.sel = ri.selShort, ri.cfg = cfg, ri.supSrcset && (ri.sel += ",img[" + srcsetAttr + "]");
|
105
|
-
var anchor = document.createElement("a");
|
106
|
-
ri.makeUrl = function(src) {
|
107
|
-
return anchor.href = src, anchor.href;
|
108
|
-
}, ri.qsa = function(context, sel) {
|
109
|
-
return context.querySelectorAll(sel);
|
110
|
-
};
|
111
|
-
{
|
112
|
-
var on = function(obj, evt, fn, capture) {
|
113
|
-
obj.addEventListener ? obj.addEventListener(evt, fn, capture || !1) : obj.attachEvent && obj.attachEvent("on" + evt, fn);
|
114
|
-
}, off = function(obj, evt, fn, capture) {
|
115
|
-
obj.removeEventListener ? obj.removeEventListener(evt, fn, capture || !1) : obj.detachEvent && obj.detachEvent("on" + evt, fn);
|
116
|
-
};
|
117
|
-
"https:" == location.protocol;
|
118
|
-
}
|
119
|
-
ri.matchesMedia = function() {
|
120
|
-
return ri.matchesMedia = window.matchMedia && (matchMedia("(min-width: 0.1em)") || {}).matches ? function(media) {
|
121
|
-
return !media || matchMedia(media).matches;
|
122
|
-
} : ri.mMQ, ri.matchesMedia.apply(this, arguments);
|
123
|
-
};
|
124
|
-
var tLow, greed, tHigh, tMemory, isWinComplete, isLandscape, isVwDirty = !0, cssCache = {}, sizeLengthCache = {}, DPR = window.devicePixelRatio, units = {
|
64
|
+
lazyFactor: .4,
|
65
|
+
maxX: 2
|
66
|
+
}, srcAttr = "data-risrc", srcsetAttr = srcAttr + "set", reflowBug = "webkitBackfaceVisibility" in docElem.style, ua = navigator.userAgent, supportNativeLQIP = /AppleWebKit/i.test(ua), supportAbort = /rident/.test(ua) || /ecko/.test(ua) && ua.match(/rv\:(\d+)/) && RegExp.$1 > 35, imgAbortCount = 0, curSrcProp = "currentSrc", regWDesc = /\s+\+?\d+(e\d+)?w/, regSize = /(\([^)]+\))?\s*(.+)/, regDescriptor = /^([\+eE\d\.]+)(w|x)$/, regHDesc = /\s*\d+h\s*/, setOptions = window.respimgCFG, baseStyle = ("https:" == location.protocol,
|
67
|
+
"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)"), fsCss = "font-size:100%!important;", isVwDirty = !0, cssCache = {}, sizeLengthCache = {}, DPR = window.devicePixelRatio, units = {
|
125
68
|
px: 1,
|
126
69
|
"in": 96
|
127
|
-
}
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
var cache = {}
|
70
|
+
}, anchor = document.createElement("a"), alreadyRun = !1, on = function(obj, evt, fn, capture) {
|
71
|
+
obj.addEventListener ? obj.addEventListener(evt, fn, capture || !1) : obj.attachEvent && obj.attachEvent("on" + evt, fn);
|
72
|
+
}, off = function(obj, evt, fn, capture) {
|
73
|
+
obj.removeEventListener ? obj.removeEventListener(evt, fn, capture || !1) : obj.detachEvent && obj.detachEvent("on" + evt, fn);
|
74
|
+
}, memoize = function(fn) {
|
75
|
+
var cache = {};
|
76
|
+
return function(input) {
|
77
|
+
return input in cache || (cache[input] = fn(input)), cache[input];
|
78
|
+
};
|
79
|
+
}, evalCSS = function() {
|
80
|
+
var regLength = /^([\d\.]+)(em|vw|px)$/, replace = function() {
|
133
81
|
for (var args = arguments, index = 0, string = args[0]; ++index in args; ) string = string.replace(args[index], args[++index]);
|
134
82
|
return string;
|
135
|
-
}, buidlStr = function(css) {
|
136
|
-
return
|
137
|
-
|
138
|
-
};
|
83
|
+
}, buidlStr = memoize(function(css) {
|
84
|
+
return "return " + replace((css || "").toLowerCase(), /\band\b/g, "&&", /,/g, "||", /min-([a-z-\s]+):/g, "e.$1>=", /max-([a-z-\s]+):/g, "e.$1<=", /calc([^)]+)/g, "($1)", /(\d+[\.]*[\d]*)([a-z]+)/g, "($1 * e.$2)", /^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi, "");
|
85
|
+
});
|
139
86
|
return function(css, length) {
|
140
87
|
var parsedLength;
|
141
88
|
if (!(css in cssCache)) if (cssCache[css] = !1, length && (parsedLength = css.match(regLength))) cssCache[css] = parsedLength[1] * units[parsedLength[2]]; else try {
|
@@ -143,41 +90,76 @@
|
|
143
90
|
} catch (e) {}
|
144
91
|
return cssCache[css];
|
145
92
|
};
|
146
|
-
}()
|
147
|
-
|
93
|
+
}(), setResolution = function(candidate, sizesattr) {
|
94
|
+
return candidate.w ? (candidate.cWidth = ri.calcListLength(sizesattr || "100vw"),
|
95
|
+
candidate.res = candidate.w / candidate.cWidth) : candidate.res = candidate.x, candidate;
|
96
|
+
}, respimage = function(opt) {
|
97
|
+
var elements, i, plen, options = opt || {};
|
98
|
+
if (options.elements && 1 == options.elements.nodeType && ("IMG" == options.elements.nodeName.toUpperCase() ? options.elements = [ options.elements ] : (options.context = options.elements,
|
99
|
+
options.elements = null)), elements = options.elements || ri.qsa(options.context || document, options.reevaluate || options.reparse ? ri.sel : ri.selShort),
|
100
|
+
plen = elements.length) {
|
101
|
+
for (ri.setupRun(options), alreadyRun = !0, i = 0; plen > i; i++) imgAbortCount++,
|
102
|
+
6 > imgAbortCount && !elements[i].complete && imgAbortCount++, ri.fillImg(elements[i], options);
|
103
|
+
ri.teardownRun(options), imgAbortCount++;
|
104
|
+
}
|
105
|
+
}, reevaluateAfterLoad = function() {
|
106
|
+
var onload = function() {
|
107
|
+
off(this, "load", onload), off(this, "error", onload), ri.fillImgs({
|
108
|
+
elements: [ this ]
|
109
|
+
});
|
110
|
+
};
|
111
|
+
return function(img) {
|
112
|
+
off(img, "load", onload), off(img, "error", onload), on(img, "error", onload), on(img, "load", onload);
|
113
|
+
};
|
114
|
+
}(), parseDescriptor = memoize(function(descriptor) {
|
115
|
+
var descriptorObj = [ 1, "x" ], parsedDescriptor = trim(descriptor || "");
|
116
|
+
return parsedDescriptor && (parsedDescriptor = parsedDescriptor.replace(regHDesc, ""),
|
117
|
+
descriptorObj = parsedDescriptor.match(regDescriptor) ? [ 1 * RegExp.$1, RegExp.$2 ] : !1),
|
118
|
+
descriptorObj;
|
119
|
+
});
|
120
|
+
curSrcProp in image || (curSrcProp = "src"), types["image/jpeg"] = !0, types["image/gif"] = !0,
|
121
|
+
types["image/png"] = !0, types["image/svg+xml"] = document.implementation.hasFeature("http://wwwindow.w3.org/TR/SVG11/feature#Image", "1.1"),
|
122
|
+
ri.ns = ("ri" + new Date().getTime()).substr(0, 9), ri.supSrcset = "srcset" in image,
|
123
|
+
ri.supSizes = "sizes" in image, ri.selShort = "picture>img,img[srcset]", ri.sel = ri.selShort,
|
124
|
+
ri.cfg = cfg, ri.supSrcset && (ri.sel += ",img[" + srcsetAttr + "]"), ri.DPR = DPR || 1,
|
125
|
+
ri.u = units, ri.types = types, alwaysCheckWDescriptor = ri.supSrcset && !ri.supSizes,
|
126
|
+
ri.setSize = noop, ri.makeUrl = memoize(function(src) {
|
127
|
+
return anchor.href = src, anchor.href;
|
128
|
+
}), ri.qsa = function(context, sel) {
|
129
|
+
return context.querySelectorAll(sel);
|
130
|
+
}, ri.matchesMedia = function() {
|
131
|
+
return ri.matchesMedia = window.matchMedia && (matchMedia("(min-width: 0.1em)") || {}).matches ? function(media) {
|
132
|
+
return !media || matchMedia(media).matches;
|
133
|
+
} : ri.mMQ, ri.matchesMedia.apply(this, arguments);
|
134
|
+
}, ri.mMQ = function(media) {
|
135
|
+
return media ? evalCSS(media) : !0;
|
136
|
+
}, ri.calcLength = function(sourceSizeValue) {
|
148
137
|
var value = evalCSS(sourceSizeValue, !0) || !1;
|
149
138
|
return 0 > value && (value = !1), value;
|
150
|
-
}, ri.
|
151
|
-
types[
|
152
|
-
|
153
|
-
|
139
|
+
}, ri.supportsType = function(type) {
|
140
|
+
return type ? types[type] : !0;
|
141
|
+
}, ri.parseSize = memoize(function(sourceSizeStr) {
|
142
|
+
var match = (sourceSizeStr || "").match(regSize);
|
143
|
+
return {
|
144
|
+
media: match && match[1],
|
145
|
+
length: match && match[2]
|
154
146
|
};
|
155
|
-
|
156
|
-
ri.parseSize = function(sourceSizeStr) {
|
157
|
-
var match;
|
158
|
-
return memSize[sourceSizeStr] || (match = (sourceSizeStr || "").match(regSize),
|
159
|
-
memSize[sourceSizeStr] = {
|
160
|
-
media: match && match[1],
|
161
|
-
length: match && match[2]
|
162
|
-
}), memSize[sourceSizeStr];
|
163
|
-
}, ri.parseSet = function(set) {
|
147
|
+
}), ri.parseSet = function(set) {
|
164
148
|
if (!set.cands) {
|
165
|
-
var pos, url, descriptor, last, descpos, srcset = set.srcset;
|
149
|
+
var pos, url, descriptor, last, descpos, can, srcset = set.srcset;
|
166
150
|
for (set.cands = []; srcset; ) srcset = srcset.replace(/^\s+/g, ""), pos = srcset.search(/\s/g),
|
167
151
|
descriptor = null, -1 != pos ? (url = srcset.slice(0, pos), last = url.charAt(url.length - 1),
|
168
152
|
"," != last && url || (url = url.replace(/,+$/, ""), descriptor = ""), srcset = srcset.slice(pos + 1),
|
169
153
|
null == descriptor && (descpos = srcset.indexOf(","), -1 != descpos ? (descriptor = srcset.slice(0, descpos),
|
170
154
|
srcset = srcset.slice(descpos + 1)) : (descriptor = srcset, srcset = ""))) : (url = srcset,
|
171
|
-
srcset = ""), url && (descriptor = parseDescriptor(descriptor)) &&
|
155
|
+
srcset = ""), url && (descriptor = parseDescriptor(descriptor)) && (can = {
|
172
156
|
url: url.replace(/^,+/, ""),
|
173
|
-
desc: descriptor,
|
174
157
|
set: set
|
175
|
-
})
|
158
|
+
}, can[descriptor[1]] = descriptor[0], "x" == descriptor[1] && 1 == descriptor[0] && (set.has1x = !0),
|
159
|
+
set.cands.push(can));
|
176
160
|
}
|
177
161
|
return set.cands;
|
178
|
-
}
|
179
|
-
var eminpx, memDescriptor = {}, regDescriptor = /^([\+eE\d\.]+)(w|x)$/, regHDesc = /\s*\d+h\s*/, baseStyle = "position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)", fsCss = "font-size:100%!important;";
|
180
|
-
ri.getEmValue = function() {
|
162
|
+
}, ri.getEmValue = function() {
|
181
163
|
var body;
|
182
164
|
if (!eminpx && (body = document.body)) {
|
183
165
|
var div = document.createElement("div"), originalHTMLCSS = docElem.style.cssText, originalBodyCSS = body.style.cssText;
|
@@ -196,75 +178,64 @@
|
|
196
178
|
}
|
197
179
|
return sizeLengthCache[sourceSizeListStr];
|
198
180
|
}, ri.setRes = function(set) {
|
199
|
-
var candidates
|
181
|
+
var candidates;
|
200
182
|
if (set) {
|
201
183
|
candidates = ri.parseSet(set);
|
202
|
-
for (var i = 0, len = candidates.length; len > i; i++)
|
203
|
-
candidate.descriptor || setResolution(candidate, set.sizes);
|
184
|
+
for (var i = 0, len = candidates.length; len > i; i++) setResolution(candidates[i], set.sizes);
|
204
185
|
}
|
205
186
|
return candidates;
|
206
|
-
}, ri.applySetCandidate = function(candidates, img) {
|
187
|
+
}, ri.setRes.res = setResolution, ri.applySetCandidate = function(candidates, img) {
|
207
188
|
if (candidates.length) {
|
208
|
-
var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, oldRes, imageData = img[ri.ns], evaled = !0;
|
189
|
+
var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, abortCurSrc, oldRes, imageData = img[ri.ns], evaled = !0, lazyF = lazyFactor, sub = substractCurRes;
|
209
190
|
if (curSrc = imageData.curSrc || img[curSrcProp], curCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set),
|
210
|
-
dpr = ri.DPR,
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
191
|
+
dpr = ri.DPR, oldRes = curCan && curCan.res, !bestCandidate && curSrc && (abortCurSrc = supportAbort && !img.complete && curCan && oldRes > dpr,
|
192
|
+
abortCurSrc || curCan && !(tMemory > oldRes) || (curCan && dpr > oldRes && oldRes > lowTreshHold && (partialLowTreshHold > oldRes && (lazyF *= .87,
|
193
|
+
sub += .04 * dpr), curCan.res += lazyF * Math.pow(oldRes - sub, 2)), isSameSet = !imageData.pic || curCan && curCan.set == candidates[0].set,
|
194
|
+
curCan && isSameSet && curCan.res >= dpr ? bestCandidate = curCan : supportNativeLQIP || img.complete || !getImgAttr.call(img, "src") || img.lazyload || supportAbort && !(5 > imgAbortCount) || !isSameSet && inView(img) || (bestCandidate = curCan,
|
195
|
+
candidateSrc = curSrc, evaled = "L", reevaluateAfterLoad(img)))), !bestCandidate) for (oldRes && (curCan.res = curCan.res - (curCan.res - oldRes) / 2),
|
196
|
+
candidates.sort(ascendingSort), length = candidates.length, bestCandidate = candidates[length - 1],
|
197
|
+
i = 0; length > i; i++) if (candidate = candidates[i], candidate.res >= dpr) {
|
198
|
+
j = i - 1, bestCandidate = candidates[j] && (diff = candidate.res - dpr) && (abortCurSrc || curSrc != ri.makeUrl(candidate.url)) && chooseLowRes(candidates[j].res, diff, dpr) ? candidates[j] : candidate;
|
217
199
|
break;
|
218
200
|
}
|
219
201
|
return oldRes && (curCan.res = oldRes), bestCandidate && (candidateSrc = ri.makeUrl(bestCandidate.url),
|
220
|
-
imageData.curSrc = candidateSrc, imageData.curCan = bestCandidate, candidateSrc != curSrc
|
221
|
-
evaled;
|
202
|
+
imageData.curSrc = candidateSrc, imageData.curCan = bestCandidate, candidateSrc != curSrc && ri.setSrc(img, bestCandidate),
|
203
|
+
ri.setSize(img)), evaled;
|
222
204
|
}
|
223
|
-
}
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
ri.setSize(img);
|
229
|
-
}, ri.setSize = noop, ri.getSet = function(img) {
|
205
|
+
}, ri.setSrc = function(img, bestCandidate) {
|
206
|
+
var origStyle;
|
207
|
+
img.src = bestCandidate.url, reflowBug && (origStyle = img.style.zoom, img.style.zoom = "0.999",
|
208
|
+
img.style.zoom = origStyle);
|
209
|
+
}, ri.getSet = function(img) {
|
230
210
|
var i, set, supportsType, match = !1, sets = img[ri.ns].sets;
|
231
211
|
for (i = 0; i < sets.length && !match; i++) if (set = sets[i], set.srcset && ri.matchesMedia(set.media) && (supportsType = ri.supportsType(set.type))) {
|
232
212
|
"pending" == supportsType && (set = supportsType), match = set;
|
233
213
|
break;
|
234
214
|
}
|
235
215
|
return match;
|
236
|
-
}
|
237
|
-
|
238
|
-
ri.parseSets = function(element, parent) {
|
239
|
-
var srcsetAttribute, fallbackCandidate, isWDescripor, srcsetParsed, hasPicture = "PICTURE" == parent.nodeName.toUpperCase(), imageData = element[ri.ns];
|
216
|
+
}, ri.parseSets = function(element, parent) {
|
217
|
+
var srcsetAttribute, imageSet, isWDescripor, srcsetParsed, hasPicture = "PICTURE" == parent.nodeName.toUpperCase(), imageData = element[ri.ns];
|
240
218
|
imageData.src === undefined && (imageData.src = getImgAttr.call(element, "src"),
|
241
219
|
imageData.src ? setImgAttr.call(element, srcAttr, imageData.src) : removeImgAttr.call(element, srcAttr)),
|
242
220
|
imageData.srcset === undefined && (srcsetAttribute = getImgAttr.call(element, "srcset"),
|
243
221
|
imageData.srcset = srcsetAttribute, srcsetParsed = !0), imageData.sets = [], hasPicture && (imageData.pic = !0,
|
244
|
-
getAllSourceElements(parent, imageData.sets)), imageData.srcset ? (
|
222
|
+
getAllSourceElements(parent, imageData.sets)), imageData.srcset ? (imageSet = {
|
245
223
|
srcset: imageData.srcset,
|
246
224
|
sizes: getImgAttr.call(element, "sizes")
|
247
|
-
}, imageData.sets.push(
|
248
|
-
isWDescripor || !imageData.src || getCandidateForSrc(imageData.src,
|
249
|
-
|
225
|
+
}, imageData.sets.push(imageSet), isWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || ""),
|
226
|
+
isWDescripor || !imageData.src || getCandidateForSrc(imageData.src, imageSet) || imageSet.has1x || (imageSet.srcset += ", " + imageData.src,
|
227
|
+
imageSet.cands.push({
|
228
|
+
url: imageData.src,
|
229
|
+
x: 1,
|
230
|
+
set: imageSet
|
231
|
+
}))) : imageData.src && imageData.sets.push({
|
250
232
|
srcset: imageData.src,
|
251
233
|
sizes: null
|
252
|
-
}), imageData.curCan = null, imageData.supported = !(hasPicture ||
|
234
|
+
}), imageData.curCan = null, imageData.supported = !(hasPicture || imageSet && !ri.supSrcset || isWDescripor),
|
253
235
|
srcsetParsed && ri.supSrcset && !imageData.supported && (srcsetAttribute ? (setImgAttr.call(element, srcsetAttr, srcsetAttribute),
|
254
236
|
element.srcset = "") : removeImgAttr.call(element, srcsetAttr)), imageData.supported && !imageData.srcset && (!imageData.src && element.src || element.src != ri.makeUrl(imageData.src)) && (null == imageData.src ? element.removeAttribute("src") : element.src = imageData.src),
|
255
237
|
imageData.parsed = !0;
|
256
|
-
}
|
257
|
-
var reevaluateAfterLoad = function() {
|
258
|
-
var onload = function() {
|
259
|
-
off(this, "load", onload), off(this, "error", onload), ri.fillImgs({
|
260
|
-
elements: [ this ]
|
261
|
-
});
|
262
|
-
};
|
263
|
-
return function(img) {
|
264
|
-
off(img, "load", onload), off(img, "error", onload), on(img, "error", onload), on(img, "load", onload);
|
265
|
-
};
|
266
|
-
}();
|
267
|
-
ri.fillImg = function(element, options) {
|
238
|
+
}, ri.fillImg = function(element, options) {
|
268
239
|
var parent, imageData, extreme = options.reparse || options.reevaluate;
|
269
240
|
if (element[ri.ns] || (element[ri.ns] = {}), imageData = element[ri.ns], "L" == imageData.evaled && element.complete && (imageData.evaled = !1),
|
270
241
|
extreme || !imageData.evaled) {
|
@@ -274,28 +245,13 @@
|
|
274
245
|
}
|
275
246
|
imageData.supported ? imageData.evaled = !0 : applyBestCandidate(element);
|
276
247
|
}
|
277
|
-
}
|
278
|
-
var resizeThrottle;
|
279
|
-
ri.setupRun = function(options) {
|
248
|
+
}, ri.setupRun = function(options) {
|
280
249
|
(!alreadyRun || options.reevaluate || isVwDirty) && (updateMetrics(), options.elements || options.context || clearTimeout(resizeThrottle));
|
281
|
-
}, ri.
|
282
|
-
|
283
|
-
var elements, i, plen, options = opt || {};
|
284
|
-
if (options.elements && 1 == options.elements.nodeType && ("IMG" == options.elements.nodeName.toUpperCase() ? options.elements = [ options.elements ] : (options.context = options.elements,
|
285
|
-
options.elements = null)), elements = options.elements || ri.qsa(options.context || document, options.reevaluate || options.reparse ? ri.sel : ri.selShort),
|
286
|
-
plen = elements.length) {
|
287
|
-
for (ri.setupRun(options), alreadyRun = !0, i = 0; plen > i; i++) ri.fillImg(elements[i], options);
|
288
|
-
ri.teardownRun(options);
|
289
|
-
}
|
290
|
-
};
|
291
|
-
ri.fillImgs = respimage, window.HTMLPictureElement ? (respimage = noop, ri.fillImg = noop) : !function() {
|
292
|
-
var lDelay;
|
293
|
-
lDelay = supportAbort ? 180 : 400;
|
294
|
-
var run = function() {
|
250
|
+
}, window.HTMLPictureElement ? (respimage = noop, ri.fillImg = noop) : !function() {
|
251
|
+
var isDomReady, regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/, run = function() {
|
295
252
|
var readyState = document.readyState || "";
|
296
|
-
|
297
|
-
|
298
|
-
off(document, "readystatechange", run)), ri.fillImgs());
|
253
|
+
timerId = setTimeout(run, "loading" == readyState ? 200 : 999), document.body && (isDomReady = isDomReady || regReady.test(readyState),
|
254
|
+
ri.fillImgs(), isDomReady && (imgAbortCount += 6, clearTimeout(timerId)));
|
299
255
|
}, resizeEval = function() {
|
300
256
|
ri.fillImgs({
|
301
257
|
reevaluate: !0
|
@@ -304,15 +260,110 @@
|
|
304
260
|
clearTimeout(resizeThrottle), isVwDirty = !0, resizeThrottle = setTimeout(resizeEval, 99);
|
305
261
|
}, timerId = setTimeout(run, document.body ? 9 : 99);
|
306
262
|
on(window, "resize", onResize), on(document, "readystatechange", run);
|
307
|
-
}(), respimage
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
263
|
+
}(), ri.respimage = respimage, ri.fillImgs = respimage, ri.teardownRun = noop, respimage._ = ri,
|
264
|
+
window.respimage = respimage, window.respimgCFG = {
|
265
|
+
ri: ri,
|
266
|
+
push: function(args) {
|
267
|
+
var name = args.shift();
|
268
|
+
"function" == typeof ri[name] ? ri[name].apply(ri, args) : (cfg[name] = args[0],
|
269
|
+
alreadyRun && ri.fillImgs({
|
270
|
+
reevaluate: !0
|
271
|
+
}));
|
272
|
+
}
|
273
|
+
};
|
274
|
+
for (;setOptions && setOptions.length; ) window.respimgCFG.push(setOptions.shift());
|
315
275
|
}(window, document);
|
276
|
+
(function( factory ) {
|
277
|
+
"use strict";
|
278
|
+
var interValId;
|
279
|
+
var intervalIndex = 0;
|
280
|
+
var run = function(){
|
281
|
+
if ( window.respimage ) {
|
282
|
+
factory( window.respimage );
|
283
|
+
}
|
284
|
+
if(window.respimage || intervalIndex > 9999){
|
285
|
+
clearInterval(interValId);
|
286
|
+
}
|
287
|
+
intervalIndex++;
|
288
|
+
};
|
289
|
+
interValId = setInterval(run, 8);
|
290
|
+
|
291
|
+
run();
|
292
|
+
|
293
|
+
}( function( respimage ) {
|
294
|
+
"use strict";
|
295
|
+
|
296
|
+
var ri = respimage._;
|
297
|
+
var runningTests = 0;
|
298
|
+
var setTypeValue = function(types, value){
|
299
|
+
var i;
|
300
|
+
for(i = 0; i < types.length; i++){
|
301
|
+
ri.types[types[i]] = value;
|
302
|
+
}
|
303
|
+
};
|
304
|
+
|
305
|
+
if(window.HTMLPictureElement && !ri.cfg.uT){
|
306
|
+
respimage.testTypeSupport = function(){};
|
307
|
+
return;
|
308
|
+
}
|
309
|
+
|
310
|
+
ri.types["image/bmp"] = true;
|
311
|
+
ri.types["image/x-bmp"] = true;
|
312
|
+
|
313
|
+
respimage.testTypeSupport = function(types, url, width, useCanvas){
|
314
|
+
if(typeof types == "string"){
|
315
|
+
types = types.split(/\s*\,*\s+/g);
|
316
|
+
}
|
317
|
+
var canvas;
|
318
|
+
var supports = "pending";
|
319
|
+
var img = document.createElement('img');
|
320
|
+
var onComplete = function(){
|
321
|
+
runningTests--;
|
322
|
+
setTypeValue(types, supports);
|
323
|
+
if(runningTests < 1){
|
324
|
+
respimage({reevaluate: true});
|
325
|
+
}
|
326
|
+
};
|
327
|
+
|
328
|
+
if(useCanvas){
|
329
|
+
canvas = document.createElement('canvas');
|
330
|
+
if(!canvas.getContext){
|
331
|
+
setTypeValue(types, false);
|
332
|
+
return;
|
333
|
+
}
|
334
|
+
}
|
335
|
+
|
336
|
+
img.onload = function(){
|
337
|
+
var ctx;
|
338
|
+
supports = true;
|
339
|
+
if(width){
|
340
|
+
supports = img.width == width;
|
341
|
+
}
|
342
|
+
|
343
|
+
if(useCanvas){
|
344
|
+
ctx = canvas.getContext('2d');
|
345
|
+
ctx.drawImage(img, 0, 0);
|
346
|
+
supports = ctx.getImageData(0, 0, 1, 1).data[3] === 0;
|
347
|
+
}
|
348
|
+
onComplete();
|
349
|
+
};
|
350
|
+
|
351
|
+
img.onerror = function(){
|
352
|
+
supports = false;
|
353
|
+
onComplete();
|
354
|
+
};
|
355
|
+
runningTests++;
|
356
|
+
setTypeValue(types, "pending");
|
357
|
+
img.src = url;
|
358
|
+
};
|
359
|
+
|
360
|
+
|
361
|
+
respimage.testTypeSupport("image/webp", "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==", 1);
|
362
|
+
respimage.testTypeSupport("image/jp2 image/jpx image/jpm", "data:image/jp2;base64,/0//UQAyAAAAAAABAAAAAgAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEBwEBBwEBBwEBBwEB/1IADAAAAAEAAAQEAAH/XAAEQED/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4wLjD/kAAKAAAAAABYAAH/UwAJAQAABAQAAf9dAAUBQED/UwAJAgAABAQAAf9dAAUCQED/UwAJAwAABAQAAf9dAAUDQED/k8+kEAGvz6QQAa/PpBABr994EAk//9k=", 1);
|
363
|
+
respimage.testTypeSupport("image/vnd.ms-photo", "data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA==", 1);
|
364
|
+
respimage.testTypeSupport("video/png video/apng video/x-mng video/x-png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==", false, true);
|
365
|
+
|
366
|
+
}));
|
316
367
|
|
317
368
|
(function( factory ) {
|
318
369
|
"use strict";
|
@@ -342,41 +393,42 @@
|
|
342
393
|
var curCandidate = data.curCan;
|
343
394
|
|
344
395
|
if ( width ) {
|
345
|
-
|
346
|
-
img.setAttribute( "width", parseInt( (width / curCandidate.res) / cfg.xQuant, 10) );
|
347
|
-
} else if ( curCandidate.desc.type == "w" ) {
|
348
|
-
img.setAttribute( "width", parseInt( curCandidate.cWidth * (width / curCandidate.desc.val), 10) );
|
349
|
-
}
|
396
|
+
img.setAttribute( "width", parseInt(width / curCandidate.res, 10) );
|
350
397
|
}
|
351
398
|
};
|
352
399
|
var loadBg = function(url, img, data){
|
353
|
-
var bgImg;
|
354
|
-
|
400
|
+
var bgImg, curCandidate, clear;
|
401
|
+
|
402
|
+
|
355
403
|
if(knownWidths[url]){
|
356
404
|
setSize(knownWidths[url], img, data);
|
357
405
|
} else {
|
406
|
+
clear = function(){
|
407
|
+
data.pendingURLSize = null;
|
408
|
+
bgImg.onload = null;
|
409
|
+
bgImg.onerror = null;
|
410
|
+
img = null;
|
411
|
+
bgImg = null;
|
412
|
+
};
|
413
|
+
|
414
|
+
data.pendingURLSize = url;
|
358
415
|
curCandidate = data.curCan;
|
359
|
-
|
360
|
-
|
416
|
+
|
417
|
+
if(curCandidate.w){
|
418
|
+
setSize(curCandidate.w, img, data);
|
361
419
|
}
|
362
420
|
|
363
421
|
bgImg = document.createElement('img');
|
422
|
+
|
364
423
|
bgImg.onload = function(){
|
365
424
|
knownWidths[url] = bgImg.naturalWidth || bgImg.width;
|
366
425
|
if(url == img[curSrcProp]){
|
367
426
|
setSize(knownWidths[url], img, data);
|
368
427
|
}
|
369
|
-
|
370
|
-
bgImg.onerror = null;
|
371
|
-
img = null;
|
372
|
-
bgImg = null;
|
373
|
-
};
|
374
|
-
bgImg.onerror = function(){
|
375
|
-
img = null;
|
376
|
-
bgImg.onload = null;
|
377
|
-
bgImg.onerror = null;
|
378
|
-
bgImg = null;
|
428
|
+
clear();
|
379
429
|
};
|
430
|
+
bgImg.onerror = clear;
|
431
|
+
|
380
432
|
bgImg.src = url;
|
381
433
|
|
382
434
|
if(bgImg && bgImg.complete){
|
@@ -387,17 +439,34 @@
|
|
387
439
|
};
|
388
440
|
var reeval = (function(){
|
389
441
|
var running, timer;
|
442
|
+
|
390
443
|
var run = function(){
|
444
|
+
var i, len, imgData;
|
445
|
+
var imgs = document.getElementsByTagName('img');
|
446
|
+
var options = {elements: []};
|
447
|
+
|
448
|
+
ri.setupRun(options);
|
449
|
+
|
391
450
|
running = false;
|
392
451
|
clearTimeout(timer);
|
393
|
-
|
452
|
+
|
453
|
+
for(i = 0, len = imgs.length; i < len; i++){
|
454
|
+
imgData = imgs[i][ri.ns];
|
455
|
+
|
456
|
+
if(imgData && imgData.curCan){
|
457
|
+
ri.setRes.res(imgData.curCan, imgData.curCan.set.sizes);
|
458
|
+
ri.setSize(imgs[i]);
|
459
|
+
}
|
460
|
+
}
|
461
|
+
|
462
|
+
ri.teardownRun( options );
|
394
463
|
};
|
395
464
|
|
396
465
|
return function(){
|
397
466
|
if(!running && cfg.addSize){
|
398
467
|
running = true;
|
399
468
|
clearTimeout(timer);
|
400
|
-
timer = setTimeout(run
|
469
|
+
timer = setTimeout(run);
|
401
470
|
}
|
402
471
|
};
|
403
472
|
|
@@ -407,8 +476,6 @@
|
|
407
476
|
curSrcProp = "src";
|
408
477
|
}
|
409
478
|
|
410
|
-
cfg.addSize = true;
|
411
|
-
|
412
479
|
ri.setSize = function( img ) {
|
413
480
|
var url;
|
414
481
|
var data = img[ ri.ns ];
|
@@ -420,7 +487,8 @@
|
|
420
487
|
|
421
488
|
if ( !cfg.addSize || !curCandidate || data.dims ) {return;}
|
422
489
|
url = ri.makeUrl(curCandidate.url);
|
423
|
-
|
490
|
+
|
491
|
+
if(url == img[curSrcProp] && url !== data.pendingURLSize){
|
424
492
|
loadBg(url, img, data);
|
425
493
|
}
|
426
494
|
};
|
@@ -429,99 +497,14 @@
|
|
429
497
|
if(window.addEventListener){
|
430
498
|
addEventListener('resize', reeval, false);
|
431
499
|
}
|
432
|
-
respimage({reevaluate: true});
|
433
|
-
}));
|
434
|
-
|
435
|
-
(function( factory ) {
|
436
|
-
"use strict";
|
437
|
-
var interValId;
|
438
|
-
var intervalIndex = 0;
|
439
|
-
var run = function(){
|
440
|
-
if ( window.respimage ) {
|
441
|
-
factory( window.respimage );
|
442
|
-
}
|
443
|
-
if(window.respimage || intervalIndex > 9999){
|
444
|
-
clearInterval(interValId);
|
445
|
-
}
|
446
|
-
intervalIndex++;
|
447
|
-
};
|
448
|
-
interValId = setInterval(run, 8);
|
449
|
-
|
450
|
-
run();
|
451
|
-
|
452
|
-
}( function( respimage ) {
|
453
|
-
"use strict";
|
454
500
|
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
for(i = 0; i < types.length; i++){
|
460
|
-
ri.types[types[i]] = value;
|
461
|
-
}
|
462
|
-
};
|
463
|
-
|
464
|
-
if(window.HTMLPictureElement && !ri.cfg.uT){
|
465
|
-
respimage.testTypeSupport = function(){};
|
466
|
-
return;
|
501
|
+
if(!('addSize' in cfg)){
|
502
|
+
cfg.addSize = true;
|
503
|
+
} else {
|
504
|
+
cfg.addSize = !!cfg.addSize;
|
467
505
|
}
|
468
506
|
|
469
|
-
|
470
|
-
ri.types["image/x-bmp"] = true;
|
471
|
-
|
472
|
-
respimage.testTypeSupport = function(types, url, width, useCanvas){
|
473
|
-
if(typeof types == "string"){
|
474
|
-
types = types.split(/\s*\,*\s+/g);
|
475
|
-
}
|
476
|
-
var canvas;
|
477
|
-
var supports = "pending";
|
478
|
-
var img = document.createElement('img');
|
479
|
-
var onComplete = function(){
|
480
|
-
runningTests--;
|
481
|
-
setTypeValue(types, supports);
|
482
|
-
if(runningTests < 1){
|
483
|
-
respimage({reevaluate: true});
|
484
|
-
}
|
485
|
-
};
|
486
|
-
|
487
|
-
if(useCanvas){
|
488
|
-
canvas = document.createElement('canvas');
|
489
|
-
if(!canvas.getContext){
|
490
|
-
setTypeValue(types, false);
|
491
|
-
return;
|
492
|
-
}
|
493
|
-
}
|
494
|
-
|
495
|
-
img.onload = function(){
|
496
|
-
var ctx;
|
497
|
-
supports = true;
|
498
|
-
if(width){
|
499
|
-
supports = img.width == width;
|
500
|
-
}
|
501
|
-
|
502
|
-
if(useCanvas){
|
503
|
-
ctx = canvas.getContext('2d');
|
504
|
-
ctx.drawImage(img, 0, 0);
|
505
|
-
supports = ctx.getImageData(0, 0, 1, 1).data[3] === 0;
|
506
|
-
}
|
507
|
-
onComplete();
|
508
|
-
};
|
509
|
-
|
510
|
-
img.onerror = function(){
|
511
|
-
supports = false;
|
512
|
-
onComplete();
|
513
|
-
};
|
514
|
-
runningTests++;
|
515
|
-
setTypeValue(types, "pending");
|
516
|
-
img.src = url;
|
517
|
-
};
|
518
|
-
|
519
|
-
|
520
|
-
respimage.testTypeSupport("image/webp", "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==", 1);
|
521
|
-
respimage.testTypeSupport("image/jp2 image/jpx image/jpm", "data:image/jp2;base64,/0//UQAyAAAAAAABAAAAAgAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEBwEBBwEBBwEBBwEB/1IADAAAAAEAAAQEAAH/XAAEQED/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4wLjD/kAAKAAAAAABYAAH/UwAJAQAABAQAAf9dAAUBQED/UwAJAgAABAQAAf9dAAUCQED/UwAJAwAABAQAAf9dAAUDQED/k8+kEAGvz6QQAa/PpBABr994EAk//9k=", 1);
|
522
|
-
respimage.testTypeSupport("image/vnd.ms-photo", "data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA==", 1);
|
523
|
-
respimage.testTypeSupport("video/png video/apng video/x-mng video/x-png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==", false, true);
|
524
|
-
|
507
|
+
reeval();
|
525
508
|
}));
|
526
509
|
|
527
510
|
|
@@ -537,8 +520,7 @@
|
|
537
520
|
})();
|
538
521
|
|
539
522
|
|
540
|
-
|
541
|
-
|
523
|
+
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
|
542
524
|
window.matchMedia || (window.matchMedia = function() {
|
543
525
|
"use strict";
|
544
526
|
|