webshims-rails 1.15.4 → 1.15.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65d8004e557a166d39747260507c3daef84c89a8
4
- data.tar.gz: b06f73ffb3c1692c337db399c43b91ac3b02c0de
3
+ metadata.gz: 38f62cf267399136bf9d595a21dd08ecab5ce05e
4
+ data.tar.gz: 06c7d3129c32b4f13e09e51efe9b3d0fe6bf43e6
5
5
  SHA512:
6
- metadata.gz: 1568d4da1cfb4ccc99e39886039de63fb0d5158d08b8a8ae11277ffba7ee9f9bdf5fd61baa386becfa608f78b8781df8019836a27cd39cd66da538fc346b1d41
7
- data.tar.gz: fde0a6880d7b9891bdb9d930562e5667d97a791a3de1dc39f60037ef66715bd4c2dbe2714647e1971b029a85cc5069902c0bc9ca63a2cf03cd84938daaa75796
6
+ metadata.gz: da45e530703f377bb8494449907a6af502a7b8982fc7336da8b7e21d5fc04eab93d9c786fc1ffe74316afabde8b919e010040b448956d05fde1392d0b43511c7
7
+ data.tar.gz: 11fba75988dcd55dd5e250ffba765e3db6b3f819c5decb3dc169e66bc614dfd468648c248e9062599503eeabd5d741cdaeeac789521a65ed0b9dc725db897498
data/Rakefile CHANGED
@@ -39,7 +39,7 @@ EOT
39
39
  end
40
40
 
41
41
 
42
- puts "Ok, check your work. If you are the gem owner, run rake :push VERSION=#{version} to generate and push the gem."
42
+ puts "Ok, check your work. If you are the gem owner, run rake push VERSION=#{version} to generate and push the gem."
43
43
  input = STDIN.gets.strip
44
44
  end
45
45
 
@@ -1,6 +1,6 @@
1
1
  module Webshims
2
2
  module Rails
3
- VERSION = "1.15.4"
4
- WEBSHIMS_VERSION = "1.15.4"
3
+ VERSION = "1.15.5"
4
+ WEBSHIMS_VERSION = "1.15.5"
5
5
  end
6
6
  end
data/readme.textile CHANGED
@@ -43,10 +43,10 @@ Users of previous webshims-rails versions should update their sprockets requires
43
43
 
44
44
  h2. Updating
45
45
 
46
- There's a quick-and-dirty rake task in the repository to checkout webshims from github, checkout a git ref, and copy the required scripts over.
46
+ There's a quick-and-dirty rake task in the repository to checkout webshims from github, checkout a git ref, and copy the required scripts over. You need to specify the Webshims-rails version and the git reference (version/tag/sha) from the webshims repository.
47
47
 
48
48
  <pre>
49
- rake update VERSION=1.14.5
49
+ rake update VERSION=1.14.5 REF=1.14.5
50
50
  </pre>
51
51
 
52
52
  h2. License
@@ -137,7 +137,7 @@
137
137
  }
138
138
 
139
139
  $.extend(webshims, {
140
- version: '1.15.4',
140
+ version: '1.15.5',
141
141
 
142
142
  cfg: {
143
143
  enhanceAuto: window.Audio && (!window.matchMedia || matchMedia('(min-device-width: 721px)').matches),
@@ -1097,7 +1097,7 @@
1097
1097
 
1098
1098
  webshims.validationMessages = webshims.validityMessages = {
1099
1099
  langSrc: 'i18n/formcfg-',
1100
- availableLangs: "ar ca cs el es fa fr he hi hu it ja lt nl pl pt pt-BR pt-PT ru sv zh-CN zh-TW".split(' ')
1100
+ availableLangs: "ar ca cs el es fa fr he hi hu it ja lt nl no pl pt pt-BR pt-PT ru sv zh-CN zh-TW".split(' ')
1101
1101
  };
1102
1102
  webshims.formcfg = $.extend({}, webshims.validationMessages);
1103
1103
 
@@ -1,13 +1,20 @@
1
- /*! respimage - v0.9.5 - 2014-10-22
1
+ /*! respimage - v1.1.6 - 2014-11-20
2
2
  Licensed MIT */
3
3
  !function(window, document, undefined) {
4
4
  "use strict";
5
5
  function trim(str) {
6
6
  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
7
7
  }
8
- function updateView() {
9
- isVwDirty = !1, ri.vW = window.innerWidth || Math.max(docElem.offsetWidth || 0, docElem.clientWidth || 0),
10
- vH = window.innerHeight || Math.max(docElem.offsetHeight || 0, docElem.clientHeight || 0);
8
+ function updateMetrics() {
9
+ var dprM;
10
+ (isVwDirty || DPR != window.devicePixelRatio) && (isVwDirty = !1, DPR = window.devicePixelRatio,
11
+ cssCache = {}, sizeLengthCache = {}, dprM = (DPR || 1) * cfg.xQuant, cfg.uT || (dprM = Math.min(dprM, 3),
12
+ dprM > 1.4 && (dprM = Math.round(dprM / (1 + (dprM - 1.4) / 12) * 100) / 100), ri.DPR = dprM),
13
+ tLow = cfg.tLow * dprM, greed = cfg.greed / 2, greed += greed * dprM, tHigh = cfg.tHigh,
14
+ tMemory = 2 + dprM, units.width = Math.max(window.innerWidth || 0, docElem.clientWidth),
15
+ units.height = Math.max(window.innerHeight || 0, docElem.clientHeight), isLandscape = units.width > units.height,
16
+ units.vw = units.width / 100, units.vh = units.height / 100, units.em = ri.getEmValue(),
17
+ units.rem = units.em);
11
18
  }
12
19
  function parseDescriptor(descriptor) {
13
20
  if (!(descriptor in memDescriptor)) {
@@ -15,19 +22,21 @@
15
22
  val: 1,
16
23
  type: "x"
17
24
  }, parsedDescriptor = trim(descriptor || "");
18
- parsedDescriptor && (parsedDescriptor.match(regDescriptor) ? (descriptorObj.val = 1 * RegExp.$1,
19
- descriptorObj.type = RegExp.$2) : descriptorObj = !1), memDescriptor[descriptor] = descriptorObj;
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;
20
28
  }
21
29
  return memDescriptor[descriptor];
22
30
  }
23
31
  function chooseLowRes(lowRes, diff, dpr) {
24
- return lowRes / dpr > .2 && (lowRes += diff * greed, diff > tHigh && (lowRes += tLow)),
32
+ var add = diff * greed * lowRes;
33
+ return isLandscape || (add /= 1.5), lowRes += add, diff > tHigh && (lowRes += tLow),
25
34
  lowRes > dpr;
26
35
  }
27
36
  function inView(el) {
28
37
  if (!el.getBoundingClientRect) return !0;
29
38
  var bottom, right, left, top, rect = el.getBoundingClientRect();
30
- return !!((bottom = rect.bottom) >= -9 && (top = rect.top) <= vH + 9 && (right = rect.right) >= -9 && (left = rect.left) <= ri.vW + 9 && (bottom || right || left || top));
39
+ return !!((bottom = rect.bottom) >= -9 && (top = rect.top) <= units.height + 9 && (right = rect.right) >= -9 && (left = rect.left) <= units.height + 9 && (bottom || right || left || top));
31
40
  }
32
41
  function applyBestCandidate(img) {
33
42
  var srcSetCandidates, matchingSet = ri.getSet(img), evaluated = !1;
@@ -41,7 +50,7 @@
41
50
  var candidate;
42
51
  return !set && src && (set = img[ri.ns].sets, set = set && set[set.length - 1]),
43
52
  candidate = getCandidateForSrc(src, set), candidate && (src = ri.makeUrl(src), img[ri.ns].curSrc = src,
44
- img[ri.ns].curCan = candidate, currentSrcSupported || (img.currentSrc = src), candidate.res || setResolution(candidate, candidate.set.sizes)),
53
+ img[ri.ns].curCan = candidate, candidate.res || setResolution(candidate, candidate.set.sizes)),
45
54
  candidate;
46
55
  }
47
56
  function getCandidateForSrc(src, set) {
@@ -83,18 +92,16 @@
83
92
  candidate;
84
93
  }
85
94
  document.createElement("picture");
86
- var lengthElInstered, lengthEl, currentSrcSupported, curSrcProp, ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
87
- addSize: !1,
95
+ var ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
88
96
  xQuant: 1,
89
97
  tLow: .1,
90
- tHigh: .5,
91
- tLazy: .1,
92
- greed: .32
93
- }, srcAttr = "data-risrc", srcsetAttr = srcAttr + "set";
94
- ri.ns = ("ri" + new Date().getTime()).substr(0, 9), currentSrcSupported = "currentSrc" in image,
95
- curSrcProp = currentSrcSupported ? "currentSrc" : "src", ri.supSrcset = "srcset" in image,
96
- ri.supSizes = "sizes" in image, ri.selShort = "picture > img, img[srcset]", ri.sel = ri.selShort,
97
- ri.cfg = cfg, ri.supSrcset && (ri.sel += ", img[" + srcsetAttr + "]");
98
+ tHigh: .6,
99
+ tLazy: .33,
100
+ greed: .5
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 + "]");
98
105
  var anchor = document.createElement("a");
99
106
  ri.makeUrl = function(src) {
100
107
  return anchor.href = src, anchor.href;
@@ -102,11 +109,9 @@
102
109
  return context.querySelectorAll(sel);
103
110
  };
104
111
  {
105
- var on = (window.console && "function" == typeof console.warn ? function(message) {
106
- console.warn(message);
107
- } : noop, function(obj, evt, fn, capture) {
112
+ var on = function(obj, evt, fn, capture) {
108
113
  obj.addEventListener ? obj.addEventListener(evt, fn, capture || !1) : obj.attachEvent && obj.attachEvent("on" + evt, fn);
109
- }), off = function(obj, evt, fn, capture) {
114
+ }, off = function(obj, evt, fn, capture) {
110
115
  obj.removeEventListener ? obj.removeEventListener(evt, fn, capture || !1) : obj.detachEvent && obj.detachEvent("on" + evt, fn);
111
116
  };
112
117
  "https:" == location.protocol;
@@ -115,41 +120,33 @@
115
120
  return ri.matchesMedia = window.matchMedia && (matchMedia("(min-width: 0.1em)") || {}).matches ? function(media) {
116
121
  return !media || matchMedia(media).matches;
117
122
  } : ri.mMQ, ri.matchesMedia.apply(this, arguments);
118
- }, ri.vW = 0;
119
- var vH, isVwDirty = !0, regex = {
120
- minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
121
- maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/
122
- }, mediaCache = {};
123
- ri.mMQ = function(media) {
124
- var min, max, ret = !1;
125
- return media ? (mediaCache[media] || (min = media.match(regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
126
- max = media.match(regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), min && (min = parseFloat(min, 10) * (min.indexOf("em") > 0 ? ri.getEmValue() : 1)),
127
- max && (max = parseFloat(max, 10) * (max.indexOf("em") > 0 ? ri.getEmValue() : 1)),
128
- mediaCache[media] = {
129
- min: min,
130
- max: max
131
- }), min = mediaCache[media].min, max = mediaCache[media].max, (min && ri.vW >= min || max && ri.vW <= max) && (ret = !0),
132
- ret) : !0;
133
- }, ri.DPR = window.devicePixelRatio || 1;
134
- var lengthCache = {}, regLength = /^([\d\.]+)(em|vw|px)$/, baseStyle = "position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;";
123
+ };
124
+ var tLow, greed, tHigh, tMemory, isWinComplete, isLandscape, isVwDirty = !0, cssCache = {}, sizeLengthCache = {}, DPR = window.devicePixelRatio, units = {
125
+ px: 1,
126
+ "in": 96
127
+ };
128
+ ri.DPR = DPR || 1, ri.u = units, ri.mMQ = function(media) {
129
+ return media ? evalCSS(media) : !0;
130
+ };
131
+ var evalCSS = function() {
132
+ var cache = {}, regLength = /^([\d\.]+)(em|vw|px)$/, replace = function() {
133
+ for (var args = arguments, index = 0, string = args[0]; ++index in args; ) string = string.replace(args[index], args[++index]);
134
+ return string;
135
+ }, buidlStr = function(css) {
136
+ return cache[css] || (cache[css] = "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, "") + ";"),
137
+ cache[css];
138
+ };
139
+ return function(css, length) {
140
+ var parsedLength;
141
+ if (!(css in cssCache)) if (cssCache[css] = !1, length && (parsedLength = css.match(regLength))) cssCache[css] = parsedLength[1] * units[parsedLength[2]]; else try {
142
+ cssCache[css] = new Function("e", buidlStr(css))(units);
143
+ } catch (e) {}
144
+ return cssCache[css];
145
+ };
146
+ }();
135
147
  ri.calcLength = function(sourceSizeValue) {
136
- var failed, parsedLength, orirgValue = sourceSizeValue, value = !1;
137
- if (!(orirgValue in lengthCache)) {
138
- if (parsedLength = sourceSizeValue.match(regLength)) parsedLength[1] = parseFloat(parsedLength[1], 10),
139
- value = parsedLength[1] ? "vw" == parsedLength[2] ? ri.vW * parsedLength[1] / 100 : "em" == parsedLength[2] ? ri.getEmValue() * parsedLength[1] : parsedLength[1] : !1; else if (sourceSizeValue.indexOf("calc") > -1 || parseInt(sourceSizeValue, 10)) {
140
- sourceSizeValue = sourceSizeValue.replace("vw", "%"), lengthEl || (lengthEl = document.createElement("div"),
141
- lengthEl.style.cssText = baseStyle), lengthElInstered || (lengthElInstered = !0,
142
- docElem.insertBefore(lengthEl, docElem.firstChild)), lengthEl.style.width = "0px";
143
- try {
144
- lengthEl.style.width = sourceSizeValue;
145
- } catch (e) {
146
- failed = !0;
147
- }
148
- value = lengthEl.offsetWidth, failed && (value = !1);
149
- }
150
- 0 >= value && (value = !1), lengthCache[orirgValue] = value;
151
- }
152
- return lengthCache[orirgValue];
148
+ var value = evalCSS(sourceSizeValue, !0) || !1;
149
+ return 0 > value && (value = !1), value;
153
150
  }, ri.types = types, types["image/jpeg"] = !0, types["image/gif"] = !0, types["image/png"] = !0,
154
151
  types["image/svg+xml"] = document.implementation.hasFeature("http://wwwindow.w3.org/TR/SVG11/feature#Image", "1.1"),
155
152
  ri.supportsType = function(type) {
@@ -179,7 +176,7 @@
179
176
  }
180
177
  return set.cands;
181
178
  };
182
- var eminpx, memDescriptor = {}, regDescriptor = /^([\+eE\d\.]+)(w|x)$/, fsCss = "font-size:100% !important;";
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;";
183
180
  ri.getEmValue = function() {
184
181
  var body;
185
182
  if (!eminpx && (body = document.body)) {
@@ -189,15 +186,13 @@
189
186
  docElem.style.cssText = originalHTMLCSS, body.style.cssText = originalBodyCSS;
190
187
  }
191
188
  return eminpx || 16;
192
- };
193
- var sizeLengthCache = {};
194
- ri.calcListLength = function(sourceSizeListStr) {
189
+ }, ri.calcListLength = function(sourceSizeListStr) {
195
190
  if (!(sourceSizeListStr in sizeLengthCache) || cfg.uT) {
196
191
  var sourceSize, parsedSize, length, media, i, len, sourceSizeList = trim(sourceSizeListStr).split(/\s*,\s*/), winningLength = !1;
197
192
  for (i = 0, len = sourceSizeList.length; len > i && (sourceSize = sourceSizeList[i],
198
193
  parsedSize = ri.parseSize(sourceSize), length = parsedSize.length, media = parsedSize.media,
199
194
  !length || !ri.matchesMedia(media) || (winningLength = ri.calcLength(length)) === !1); i++) ;
200
- sizeLengthCache[sourceSizeListStr] = winningLength ? winningLength : ri.vW;
195
+ sizeLengthCache[sourceSizeListStr] = winningLength ? winningLength : units.width;
201
196
  }
202
197
  return sizeLengthCache[sourceSizeListStr];
203
198
  }, ri.setRes = function(set) {
@@ -208,83 +203,70 @@
208
203
  candidate.descriptor || setResolution(candidate, set.sizes);
209
204
  }
210
205
  return candidates;
211
- };
212
- var dprM, tLow, greed, tLazy, tHigh, tMemory, isWinComplete;
213
- ri.applySetCandidate = function(candidates, img) {
206
+ }, ri.applySetCandidate = function(candidates, img) {
214
207
  if (candidates.length) {
215
- var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, imageData = img[ri.ns], evaled = !0;
208
+ var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, oldRes, imageData = img[ri.ns], evaled = !0;
216
209
  if (curSrc = imageData.curSrc || img[curSrcProp], curCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set),
217
- dpr = ri.getX(candidates, curCan), curSrc && (curCan && (curCan.res += tLazy), isSameSet = !imageData.pic || curCan && curCan.set == candidates[0].set,
218
- curCan && isSameSet && curCan.res >= dpr && tMemory > curCan.res - dpr ? bestCandidate = curCan : img.complete || imageData.src != getImgAttr.call(img, "src") || img.lazyload || (isSameSet || !isWinComplete && !inView(img)) && (bestCandidate = curCan,
219
- candidateSrc = curSrc, evaled = "lazy", isWinComplete && reevaluateAfterLoad(img))),
220
- !bestCandidate) for (candidates.sort(ascendingSort), length = candidates.length,
221
- bestCandidate = candidates[length - 1], i = 0; length > i; i++) if (candidate = candidates[i],
222
- candidate.res >= dpr) {
210
+ dpr = ri.DPR, curSrc && (curCan && curCan.res < dpr && (oldRes = curCan.res, curCan.res += cfg.tLazy * Math.pow(curCan.res - .1, isLandscape ? 2.2 : 1.9)),
211
+ isSameSet = !imageData.pic || curCan && curCan.set == candidates[0].set, curCan && isSameSet && curCan.res >= dpr && (oldRes || tMemory > curCan.res) ? bestCandidate = curCan : supportAbort || img.complete || !getImgAttr.call(img, "src") || img.lazyload || (isSameSet || !inView(img)) && (bestCandidate = curCan,
212
+ candidateSrc = curSrc, evaled = "L", isWinComplete && reevaluateAfterLoad(img))),
213
+ !bestCandidate) for (oldRes && (curCan.res = curCan.res - (curCan.res - oldRes) / 2),
214
+ candidates.sort(ascendingSort), length = candidates.length, bestCandidate = candidates[length - 1],
215
+ i = 0; length > i; i++) if (candidate = candidates[i], candidate.res >= dpr) {
223
216
  j = i - 1, bestCandidate = candidates[j] && (diff = candidate.res - dpr) && curSrc != ri.makeUrl(candidate.url) && chooseLowRes(candidates[j].res, diff, dpr) ? candidates[j] : candidate;
224
217
  break;
225
218
  }
226
- return curSrc && curCan && (curCan.res -= tLazy), bestCandidate && (candidateSrc = ri.makeUrl(bestCandidate.url),
227
- currentSrcSupported || (img.currentSrc = candidateSrc), imageData.curSrc = candidateSrc,
228
- imageData.curCan = bestCandidate, candidateSrc != curSrc ? ri.setSrc(img, bestCandidate) : ri.setSize(img)),
219
+ return oldRes && (curCan.res = oldRes), bestCandidate && (candidateSrc = ri.makeUrl(bestCandidate.url),
220
+ imageData.curSrc = candidateSrc, imageData.curCan = bestCandidate, candidateSrc != curSrc ? ri.setSrc(img, bestCandidate) : ri.setSize(img)),
229
221
  evaled;
230
222
  }
231
223
  };
232
- ri.getX = function() {
233
- return ri.DPR * cfg.xQuant;
234
- }, ri.setSrc = function(img, bestCandidate) {
224
+ ri.setSrc = function(img, bestCandidate) {
235
225
  var origWidth;
236
226
  img.src = bestCandidate.url, "image/svg+xml" == bestCandidate.set.type && (origWidth = img.style.width,
237
- img.style.width = img.offsetWidth + 1 + "px", img.offsetWidth + 1 && (img.style.width = origWidth));
238
- };
239
- var intrinsicSizeHandler = function() {
240
- off(this, "load", intrinsicSizeHandler), ri.setSize(this);
227
+ img.style.width = img.offsetWidth + 1 + "px", img.offsetWidth + 1 && (img.style.width = origWidth)),
228
+ ri.setSize(img);
229
+ }, ri.setSize = noop, ri.getSet = function(img) {
230
+ var i, set, supportsType, match = !1, sets = img[ri.ns].sets;
231
+ for (i = 0; i < sets.length && !match; i++) if (set = sets[i], set.srcset && ri.matchesMedia(set.media) && (supportsType = ri.supportsType(set.type))) {
232
+ "pending" == supportsType && (set = supportsType), match = set;
233
+ break;
234
+ }
235
+ return match;
241
236
  };
242
- ri.setSize = function(img) {
243
- var width, curCandidate = img[ri.ns].curCan;
244
- cfg.addSize && curCandidate && !img[ri.ns].dims && (img.complete || (off(img, "load", intrinsicSizeHandler),
245
- on(img, "load", intrinsicSizeHandler)), width = img.naturalWidth, width && ("x" == curCandidate.desc.type ? setImgAttr.call(img, "width", parseInt(width / curCandidate.res / cfg.xQuant, 10)) : "w" == curCandidate.desc.type && setImgAttr.call(img, "width", parseInt(curCandidate.cWidth * (width / curCandidate.desc.val), 10))));
246
- }, document.addEventListener && "naturalWidth" in image && "complete" in image || (ri.setSize = noop),
247
- ri.getSet = function(img) {
248
- var i, set, supportsType, match = !1, sets = img[ri.ns].sets;
249
- for (i = 0; i < sets.length && !match; i++) if (set = sets[i], set.srcset && ri.matchesMedia(set.media) && (supportsType = ri.supportsType(set.type))) {
250
- "pending" == supportsType && (set = supportsType), match = set;
251
- break;
252
- }
253
- return match;
254
- };
255
237
  var alwaysCheckWDescriptor = ri.supSrcset && !ri.supSizes;
256
238
  ri.parseSets = function(element, parent) {
257
239
  var srcsetAttribute, fallbackCandidate, isWDescripor, srcsetParsed, hasPicture = "PICTURE" == parent.nodeName.toUpperCase(), imageData = element[ri.ns];
258
240
  imageData.src === undefined && (imageData.src = getImgAttr.call(element, "src"),
259
241
  imageData.src ? setImgAttr.call(element, srcAttr, imageData.src) : removeImgAttr.call(element, srcAttr)),
260
242
  imageData.srcset === undefined && (srcsetAttribute = getImgAttr.call(element, "srcset"),
261
- imageData.srcset = srcsetAttribute, srcsetParsed = !0), imageData.dims === undefined && (imageData.dims = getImgAttr.call(element, "height") && getImgAttr.call(element, "width")),
262
- imageData.sets = [], hasPicture && (imageData.pic = !0, getAllSourceElements(parent, imageData.sets)),
263
- imageData.srcset ? (fallbackCandidate = {
264
- srcset: imageData.srcset,
265
- sizes: getImgAttr.call(element, "sizes")
266
- }, imageData.sets.push(fallbackCandidate), isWDescripor = alwaysCheckWDescriptor || imageData.src ? hasWDescripor(fallbackCandidate) : !1,
267
- isWDescripor || !imageData.src || getCandidateForSrc(imageData.src, fallbackCandidate) || hasOneX(fallbackCandidate) || (fallbackCandidate.srcset += ", " + imageData.src,
268
- fallbackCandidate.cands = !1)) : imageData.src && imageData.sets.push({
269
- srcset: imageData.src,
270
- sizes: null
271
- }), imageData.curCan = null, imageData.supported = !(hasPicture || fallbackCandidate && !ri.supSrcset || isWDescripor),
243
+ imageData.srcset = srcsetAttribute, srcsetParsed = !0), imageData.sets = [], hasPicture && (imageData.pic = !0,
244
+ getAllSourceElements(parent, imageData.sets)), imageData.srcset ? (fallbackCandidate = {
245
+ srcset: imageData.srcset,
246
+ sizes: getImgAttr.call(element, "sizes")
247
+ }, imageData.sets.push(fallbackCandidate), isWDescripor = alwaysCheckWDescriptor || imageData.src ? hasWDescripor(fallbackCandidate) : !1,
248
+ isWDescripor || !imageData.src || getCandidateForSrc(imageData.src, fallbackCandidate) || hasOneX(fallbackCandidate) || (fallbackCandidate.srcset += ", " + imageData.src,
249
+ fallbackCandidate.cands = !1)) : imageData.src && imageData.sets.push({
250
+ srcset: imageData.src,
251
+ sizes: null
252
+ }), imageData.curCan = null, imageData.supported = !(hasPicture || fallbackCandidate && !ri.supSrcset || isWDescripor),
272
253
  srcsetParsed && ri.supSrcset && !imageData.supported && (srcsetAttribute ? (setImgAttr.call(element, srcsetAttr, srcsetAttribute),
273
- element.srcset = "") : removeImgAttr.call(element, srcsetAttr)), imageData.parsed = !0;
254
+ 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
+ imageData.parsed = !0;
274
256
  };
275
257
  var reevaluateAfterLoad = function() {
276
258
  var onload = function() {
277
- off(this, "load", onload), ri.fillImgs({
259
+ off(this, "load", onload), off(this, "error", onload), ri.fillImgs({
278
260
  elements: [ this ]
279
261
  });
280
262
  };
281
263
  return function(img) {
282
- off(img, "load", onload), on(img, "load", onload);
264
+ off(img, "load", onload), off(img, "error", onload), on(img, "error", onload), on(img, "load", onload);
283
265
  };
284
266
  }();
285
267
  ri.fillImg = function(element, options) {
286
268
  var parent, imageData, extreme = options.reparse || options.reevaluate;
287
- if (element[ri.ns] || (element[ri.ns] = {}), imageData = element[ri.ns], "lazy" == imageData.evaled && (isWinComplete || element.complete) && (imageData.evaled = !1),
269
+ if (element[ri.ns] || (element[ri.ns] = {}), imageData = element[ri.ns], "L" == imageData.evaled && element.complete && (imageData.evaled = !1),
288
270
  extreme || !imageData.evaled) {
289
271
  if (!imageData.parsed || options.reparse) {
290
272
  if (parent = element.parentNode, !parent) return;
@@ -295,14 +277,8 @@
295
277
  };
296
278
  var resizeThrottle;
297
279
  ri.setupRun = function(options) {
298
- (!alreadyRun || options.reevaluate || isVwDirty) && (cfg.uT || (ri.DPR = window.devicePixelRatio || 1),
299
- dprM = Math.min(Math.max(ri.DPR * cfg.xQuant, 1), 2.5), tLow = cfg.tLow * dprM,
300
- tLazy = cfg.tLazy * dprM, greed = cfg.greed * dprM, tHigh = cfg.tHigh, tMemory = .6 + .4 * dprM + tLazy),
301
- isVwDirty && (lengthCache = {}, sizeLengthCache = {}, updateView(), options.elements || options.context || clearTimeout(resizeThrottle));
302
- }, ri.teardownRun = function() {
303
- var parent;
304
- lengthElInstered && (lengthElInstered = !1, parent = lengthEl.parentNode, parent && parent.removeChild(lengthEl));
305
- };
280
+ (!alreadyRun || options.reevaluate || isVwDirty) && (updateMetrics(), options.elements || options.context || clearTimeout(resizeThrottle));
281
+ }, ri.teardownRun = noop;
306
282
  var alreadyRun = !1, respimage = function(opt) {
307
283
  var elements, i, plen, options = opt || {};
308
284
  if (options.elements && 1 == options.elements.nodeType && ("IMG" == options.elements.nodeName.toUpperCase() ? options.elements = [ options.elements ] : (options.context = options.elements,
@@ -313,9 +289,13 @@
313
289
  }
314
290
  };
315
291
  ri.fillImgs = respimage, window.HTMLPictureElement ? (respimage = noop, ri.fillImg = noop) : !function() {
316
- var regWinComplete = /^loade|^c/, run = function() {
317
- clearTimeout(timerId), timerId = setTimeout(run, 3e3), document.body && (regWinComplete.test(document.readyState || "") && (isWinComplete = !0,
318
- clearTimeout(timerId), off(document, "readystatechange", run)), ri.fillImgs());
292
+ var lDelay;
293
+ lDelay = supportAbort ? 180 : 400;
294
+ var run = function() {
295
+ var readyState = document.readyState || "";
296
+ clearTimeout(timerId), timerId = setTimeout(run, "loading" == readyState ? lDelay : 2e3),
297
+ document.body && (/d$|^c/.test(readyState) && (isWinComplete = !0, clearTimeout(timerId),
298
+ off(document, "readystatechange", run)), ri.fillImgs());
319
299
  }, resizeEval = function() {
320
300
  ri.fillImgs({
321
301
  reevaluate: !0
@@ -333,6 +313,125 @@
333
313
  });
334
314
  }, window.respimage = respimage;
335
315
  }(window, document);
316
+
317
+ (function( factory ) {
318
+ "use strict";
319
+ var interValId;
320
+ var intervalIndex = 0;
321
+ var run = function(){
322
+ if ( window.respimage ) {
323
+ factory( window.respimage );
324
+ }
325
+ if(window.respimage || intervalIndex > 9999){
326
+ clearInterval(interValId);
327
+ }
328
+ intervalIndex++;
329
+ };
330
+ interValId = setInterval(run, 8);
331
+
332
+ run();
333
+
334
+ }( function( respimage, undefined ) {
335
+ "use strict";
336
+
337
+ var ri = respimage._;
338
+ var knownWidths = {};
339
+ var cfg = ri.cfg;
340
+ var curSrcProp = "currentSrc";
341
+ var setSize = function(width, img, data){
342
+ var curCandidate = data.curCan;
343
+
344
+ if ( width ) {
345
+ if ( curCandidate.desc.type == "x" ) {
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
+ }
350
+ }
351
+ };
352
+ var loadBg = function(url, img, data){
353
+ var bgImg;
354
+ var curCandidate;
355
+ if(knownWidths[url]){
356
+ setSize(knownWidths[url], img, data);
357
+ } else {
358
+ curCandidate = data.curCan;
359
+ if(curCandidate.desc.type == 'w'){
360
+ setSize(curCandidate.desc.val, img, data);
361
+ }
362
+
363
+ bgImg = document.createElement('img');
364
+ bgImg.onload = function(){
365
+ knownWidths[url] = bgImg.naturalWidth || bgImg.width;
366
+ if(url == img[curSrcProp]){
367
+ setSize(knownWidths[url], img, data);
368
+ }
369
+ bgImg.onload = null;
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;
379
+ };
380
+ bgImg.src = url;
381
+
382
+ if(bgImg && bgImg.complete){
383
+ bgImg.onload();
384
+ }
385
+ }
386
+
387
+ };
388
+ var reeval = (function(){
389
+ var running, timer;
390
+ var run = function(){
391
+ running = false;
392
+ clearTimeout(timer);
393
+ respimage({reevaluate: true});
394
+ };
395
+
396
+ return function(){
397
+ if(!running && cfg.addSize){
398
+ running = true;
399
+ clearTimeout(timer);
400
+ timer = setTimeout(run, 33);
401
+ }
402
+ };
403
+
404
+ })();
405
+
406
+ if( !(curSrcProp in document.createElement("img")) ){
407
+ curSrcProp = "src";
408
+ }
409
+
410
+ cfg.addSize = true;
411
+
412
+ ri.setSize = function( img ) {
413
+ var url;
414
+ var data = img[ ri.ns ];
415
+ var curCandidate = data.curCan;
416
+
417
+ if ( data.dims === undefined ) {
418
+ data.dims = img.getAttribute( "height" ) && img.getAttribute( "width" );
419
+ }
420
+
421
+ if ( !cfg.addSize || !curCandidate || data.dims ) {return;}
422
+ url = ri.makeUrl(curCandidate.url);
423
+ if(url == img[curSrcProp]){
424
+ loadBg(url, img, data);
425
+ }
426
+ };
427
+
428
+
429
+ if(window.addEventListener){
430
+ addEventListener('resize', reeval, false);
431
+ }
432
+ respimage({reevaluate: true});
433
+ }));
434
+
336
435
  (function( factory ) {
337
436
  "use strict";
338
437
  var interValId;
@@ -419,12 +518,13 @@
419
518
 
420
519
 
421
520
  respimage.testTypeSupport("image/webp", "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==", 1);
422
- respimage.testTypeSupport("image/jp2 image/jpx image/jpm", "data:image/jp2;base64,AAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAABHanAyaAAAABZpaGRyAAAAAQAAAAEAAQAHAAAAAAAPY29scgEAAAAAABEAAAAacmVzIAAAABJyZXNjAGAA/gBgAP4EBAAAAABqcDJj/0//UQApAAAAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAEB/1wADUAIEBAYEBAYEBAY/1IADAAAAAEAAwQEAAH/ZAAPAAFMV0ZfSlAyXzIxMf+QAAoAAAAAABIAAf+TgICAgP/Z", 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);
423
522
  respimage.testTypeSupport("image/vnd.ms-photo", "data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA==", 1);
424
523
  respimage.testTypeSupport("video/png video/apng video/x-mng video/x-png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==", false, true);
425
524
 
426
525
  }));
427
526
 
527
+
428
528
  (function(){
429
529
 
430
530
  webshim.isReady('picture', true);
@@ -762,9 +762,12 @@ webshims.register('form-validation', function($, webshims, window, document, und
762
762
  var invalid, errorBox, afterHide;
763
763
  var fieldWrapper = this.getFieldWrapper(elem);
764
764
 
765
+ if(!reset){
766
+ invalid = $('input:invalid, select:invalid, textarea:invalid', fieldWrapper);
767
+ }
765
768
  if(fieldWrapper.hasClass(invalidWrapperClass)){
766
769
  $(elem).filter('input').off('.recheckinvalid');
767
- if(!reset && (invalid = $('input:invalid, select:invalid, textarea:invalid', fieldWrapper)[0])){
770
+ if(!reset && invalid && invalid[0]){
768
771
  $(invalid).trigger('updatevalidation.webshims');
769
772
  } else {
770
773
  errorBox = this.get(elem, fieldWrapper);
@@ -784,7 +787,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
784
787
  }
785
788
 
786
789
  }
787
- if(!reset && !invalid){
790
+ if(!reset && (!invalid || !invalid.length)){
788
791
  this.addSuccess(elem, fieldWrapper);
789
792
  }
790
793
  return fieldWrapper;
@@ -185,20 +185,24 @@ webshims.ready('form-validation', function(){
185
185
 
186
186
 
187
187
  $('body').on('click', function(e){
188
+
188
189
  if(e.target.type == 'submit' && !e.isDefaultPrevented()){
189
- var activeElement, i, len;
190
- var elements = $(e.target).jProp('form').prop('elements') || [];
190
+ var activeElement, i, len, elements;
191
+
191
192
  try {
192
193
  activeElement = document.activeElement;
193
- } catch(e){}
194
+ } catch(er){}
195
+
196
+ if(!activeElement || activeElement == e.target){return;}
197
+ elements = $(e.target).jProp('form').prop('elements') || [];
198
+
199
+ if(activeElement && 'form' in activeElement && $.prop(activeElement, 'willValidate')){
200
+ $(activeElement).trigger('updatevalidation.webshims');
201
+ }
194
202
 
195
203
  for(i = 0, len = elements.length; i < len; i++){
196
204
  if($.data(elements[i], 'customMismatchedRule')){
197
- if(activeElement == elements[i]){
198
- $(elements[i]).trigger('updatevalidation.webshims');
199
- } else {
200
- testValidityRules(elements[i]);
201
- }
205
+ testValidityRules(elements[i]);
202
206
  }
203
207
  }
204
208
 
@@ -0,0 +1,130 @@
1
+ webshims.validityMessages['no'] = {
2
+ "typeMismatch": {
3
+ "defaultMessage": "Vennligst skriv en gyldig verdi.",
4
+ "email": "Vennligst skriv inn en e-postadresse.",
5
+ "url": "Vennligst skriv inn en URL."
6
+ },
7
+ "badInput": {
8
+ "defaultMessage": "Vennligst skriv en gyldig verdi.",
9
+ "number": "Vennligst skriv inn et tall.",
10
+ "date": "Vennligst skriv inn en dato.",
11
+ "time": "Vennligst skriv inn et klokkeslett.",
12
+ "range": "Ugyldig data.",
13
+ "month": "Vennligst skriv en gyldig verdi.",
14
+ "datetime-local": "Vennligst skriv inn dato & tid"
15
+ },
16
+ "rangeUnderflow": {
17
+ "defaultMessage": "Verdi må være større eller lik {%min}.",
18
+ "date": "Verdi må være på eller etter {%min}.",
19
+ "time": "Verdi må være på eller etter {%min}.",
20
+ "datetime-local": "Verdi må være på eller etter {%min}.",
21
+ "month": "Verdi må være på eller etter {%min}."
22
+ },
23
+ "rangeOverflow": {
24
+ "defaultMessage": "Verdi må være mindre eller lik {%max}.",
25
+ "date": "Verdi må være på eller før {%max}.",
26
+ "time": "Verdi må være på eller før {%max}.",
27
+ "datetime-local": "Verdi må være på eller før {%max}.",
28
+ "month": "Verdi må være på eller før {%max}."
29
+ },
30
+ "stepMismatch": "Ugyldig inndata.",
31
+ "tooLong": "Vennligst fyll inn maks {%maxlength} tegn. Du skrev inn {%valueLen}.",
32
+ "tooShort": "Vennlist fyll inn minst {%minlength} tegn. Du skrev inn {%valueLen}.",
33
+ "patternMismatch": "Ugyldig data. {%title}",
34
+ "valueMissing": {
35
+ "defaultMessage": "Vennligst fyll inn dette feltet.",
36
+ "checkbox": "Vennligst kryss av i denne boksen om du ønsker å fortsette.",
37
+ "select": "Vennligst velg.",
38
+ "radio": "Vennligst velg."
39
+ }
40
+ };
41
+ webshims.formcfg['no'] = {
42
+ "numberFormat": {
43
+ ".": ".",
44
+ ",": ","
45
+ },
46
+ "numberSigns": ".",
47
+ "dateSigns": "/",
48
+ "timeSigns": ":. ",
49
+ "dFormat": "/",
50
+ "patterns": {
51
+ "d": "dd/mm/yy"
52
+ },
53
+ "meridian": [
54
+ "AM",
55
+ "PM"
56
+ ],
57
+ "month": {
58
+ "currentText": "Denne måned"
59
+ },
60
+ "time": {
61
+ "currentText": "Nå"
62
+ },
63
+ "date": {
64
+ "closeText": "Ferdig",
65
+ "clear": "Tøm",
66
+ "prevText": "Forrige",
67
+ "nextText": "Neste",
68
+ "currentText": "I dag",
69
+ "monthNames": [
70
+ "Januar",
71
+ "Februar",
72
+ "Mars",
73
+ "April",
74
+ "Mai",
75
+ "Juni",
76
+ "Juli",
77
+ "August",
78
+ "September",
79
+ "Oktober",
80
+ "November",
81
+ "Desember"
82
+ ],
83
+ "monthNamesShort": [
84
+ "Jan",
85
+ "Feb",
86
+ "Mar",
87
+ "Apr",
88
+ "Mai",
89
+ "Jun",
90
+ "Jul",
91
+ "Aug",
92
+ "Sep",
93
+ "Okt",
94
+ "Nov",
95
+ "Des"
96
+ ],
97
+ "dayNames": [
98
+ "Søndag",
99
+ "Mandag",
100
+ "Tirsdag",
101
+ "Onsdag",
102
+ "Torsdag",
103
+ "Fredag",
104
+ "Lørdag"
105
+ ],
106
+ "dayNamesShort": [
107
+ "Søn",
108
+ "Man",
109
+ "Tir",
110
+ "Ons",
111
+ "Tor",
112
+ "Fre",
113
+ "Lør"
114
+ ],
115
+ "dayNamesMin": [
116
+ "Sø",
117
+ "Ma",
118
+ "Ti",
119
+ "On",
120
+ "To",
121
+ "Fr",
122
+ "Lø"
123
+ ],
124
+ "weekHeader": "Uke",
125
+ "firstDay": 1,
126
+ "isRTL": false,
127
+ "showMonthAfterYear": false,
128
+ "yearSuffix": ""
129
+ }
130
+ };
@@ -1,13 +1,20 @@
1
- /*! respimage - v0.9.5 - 2014-10-22
1
+ /*! respimage - v1.1.6 - 2014-11-20
2
2
  Licensed MIT */
3
3
  !function(window, document, undefined) {
4
4
  "use strict";
5
5
  function trim(str) {
6
6
  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
7
7
  }
8
- function updateView() {
9
- isVwDirty = !1, ri.vW = window.innerWidth || Math.max(docElem.offsetWidth || 0, docElem.clientWidth || 0),
10
- vH = window.innerHeight || Math.max(docElem.offsetHeight || 0, docElem.clientHeight || 0);
8
+ function updateMetrics() {
9
+ var dprM;
10
+ (isVwDirty || DPR != window.devicePixelRatio) && (isVwDirty = !1, DPR = window.devicePixelRatio,
11
+ cssCache = {}, sizeLengthCache = {}, dprM = (DPR || 1) * cfg.xQuant, cfg.uT || (dprM = Math.min(dprM, 3),
12
+ dprM > 1.4 && (dprM = Math.round(dprM / (1 + (dprM - 1.4) / 12) * 100) / 100), ri.DPR = dprM),
13
+ tLow = cfg.tLow * dprM, greed = cfg.greed / 2, greed += greed * dprM, tHigh = cfg.tHigh,
14
+ tMemory = 2 + dprM, units.width = Math.max(window.innerWidth || 0, docElem.clientWidth),
15
+ units.height = Math.max(window.innerHeight || 0, docElem.clientHeight), isLandscape = units.width > units.height,
16
+ units.vw = units.width / 100, units.vh = units.height / 100, units.em = ri.getEmValue(),
17
+ units.rem = units.em);
11
18
  }
12
19
  function parseDescriptor(descriptor) {
13
20
  if (!(descriptor in memDescriptor)) {
@@ -15,19 +22,21 @@
15
22
  val: 1,
16
23
  type: "x"
17
24
  }, parsedDescriptor = trim(descriptor || "");
18
- parsedDescriptor && (parsedDescriptor.match(regDescriptor) ? (descriptorObj.val = 1 * RegExp.$1,
19
- descriptorObj.type = RegExp.$2) : descriptorObj = !1), memDescriptor[descriptor] = descriptorObj;
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;
20
28
  }
21
29
  return memDescriptor[descriptor];
22
30
  }
23
31
  function chooseLowRes(lowRes, diff, dpr) {
24
- return lowRes / dpr > .2 && (lowRes += diff * greed, diff > tHigh && (lowRes += tLow)),
32
+ var add = diff * greed * lowRes;
33
+ return isLandscape || (add /= 1.5), lowRes += add, diff > tHigh && (lowRes += tLow),
25
34
  lowRes > dpr;
26
35
  }
27
36
  function inView(el) {
28
37
  if (!el.getBoundingClientRect) return !0;
29
38
  var bottom, right, left, top, rect = el.getBoundingClientRect();
30
- return !!((bottom = rect.bottom) >= -9 && (top = rect.top) <= vH + 9 && (right = rect.right) >= -9 && (left = rect.left) <= ri.vW + 9 && (bottom || right || left || top));
39
+ return !!((bottom = rect.bottom) >= -9 && (top = rect.top) <= units.height + 9 && (right = rect.right) >= -9 && (left = rect.left) <= units.height + 9 && (bottom || right || left || top));
31
40
  }
32
41
  function applyBestCandidate(img) {
33
42
  var srcSetCandidates, matchingSet = ri.getSet(img), evaluated = !1;
@@ -41,7 +50,7 @@
41
50
  var candidate;
42
51
  return !set && src && (set = img[ri.ns].sets, set = set && set[set.length - 1]),
43
52
  candidate = getCandidateForSrc(src, set), candidate && (src = ri.makeUrl(src), img[ri.ns].curSrc = src,
44
- img[ri.ns].curCan = candidate, currentSrcSupported || (img.currentSrc = src), candidate.res || setResolution(candidate, candidate.set.sizes)),
53
+ img[ri.ns].curCan = candidate, candidate.res || setResolution(candidate, candidate.set.sizes)),
45
54
  candidate;
46
55
  }
47
56
  function getCandidateForSrc(src, set) {
@@ -83,18 +92,16 @@
83
92
  candidate;
84
93
  }
85
94
  document.createElement("picture");
86
- var lengthElInstered, lengthEl, currentSrcSupported, curSrcProp, ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
87
- addSize: !1,
95
+ var ri = {}, noop = function() {}, image = document.createElement("img"), getImgAttr = image.getAttribute, setImgAttr = image.setAttribute, removeImgAttr = image.removeAttribute, docElem = document.documentElement, types = {}, cfg = {
88
96
  xQuant: 1,
89
97
  tLow: .1,
90
- tHigh: .5,
91
- tLazy: .1,
92
- greed: .32
93
- }, srcAttr = "data-risrc", srcsetAttr = srcAttr + "set";
94
- ri.ns = ("ri" + new Date().getTime()).substr(0, 9), currentSrcSupported = "currentSrc" in image,
95
- curSrcProp = currentSrcSupported ? "currentSrc" : "src", ri.supSrcset = "srcset" in image,
96
- ri.supSizes = "sizes" in image, ri.selShort = "picture > img, img[srcset]", ri.sel = ri.selShort,
97
- ri.cfg = cfg, ri.supSrcset && (ri.sel += ", img[" + srcsetAttr + "]");
98
+ tHigh: .6,
99
+ tLazy: .33,
100
+ greed: .5
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 + "]");
98
105
  var anchor = document.createElement("a");
99
106
  ri.makeUrl = function(src) {
100
107
  return anchor.href = src, anchor.href;
@@ -102,11 +109,9 @@
102
109
  return context.querySelectorAll(sel);
103
110
  };
104
111
  {
105
- var on = (window.console && "function" == typeof console.warn ? function(message) {
106
- console.warn(message);
107
- } : noop, function(obj, evt, fn, capture) {
112
+ var on = function(obj, evt, fn, capture) {
108
113
  obj.addEventListener ? obj.addEventListener(evt, fn, capture || !1) : obj.attachEvent && obj.attachEvent("on" + evt, fn);
109
- }), off = function(obj, evt, fn, capture) {
114
+ }, off = function(obj, evt, fn, capture) {
110
115
  obj.removeEventListener ? obj.removeEventListener(evt, fn, capture || !1) : obj.detachEvent && obj.detachEvent("on" + evt, fn);
111
116
  };
112
117
  "https:" == location.protocol;
@@ -115,41 +120,33 @@
115
120
  return ri.matchesMedia = window.matchMedia && (matchMedia("(min-width: 0.1em)") || {}).matches ? function(media) {
116
121
  return !media || matchMedia(media).matches;
117
122
  } : ri.mMQ, ri.matchesMedia.apply(this, arguments);
118
- }, ri.vW = 0;
119
- var vH, isVwDirty = !0, regex = {
120
- minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
121
- maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/
122
- }, mediaCache = {};
123
- ri.mMQ = function(media) {
124
- var min, max, ret = !1;
125
- return media ? (mediaCache[media] || (min = media.match(regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
126
- max = media.match(regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), min && (min = parseFloat(min, 10) * (min.indexOf("em") > 0 ? ri.getEmValue() : 1)),
127
- max && (max = parseFloat(max, 10) * (max.indexOf("em") > 0 ? ri.getEmValue() : 1)),
128
- mediaCache[media] = {
129
- min: min,
130
- max: max
131
- }), min = mediaCache[media].min, max = mediaCache[media].max, (min && ri.vW >= min || max && ri.vW <= max) && (ret = !0),
132
- ret) : !0;
133
- }, ri.DPR = window.devicePixelRatio || 1;
134
- var lengthCache = {}, regLength = /^([\d\.]+)(em|vw|px)$/, baseStyle = "position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;";
123
+ };
124
+ var tLow, greed, tHigh, tMemory, isWinComplete, isLandscape, isVwDirty = !0, cssCache = {}, sizeLengthCache = {}, DPR = window.devicePixelRatio, units = {
125
+ px: 1,
126
+ "in": 96
127
+ };
128
+ ri.DPR = DPR || 1, ri.u = units, ri.mMQ = function(media) {
129
+ return media ? evalCSS(media) : !0;
130
+ };
131
+ var evalCSS = function() {
132
+ var cache = {}, regLength = /^([\d\.]+)(em|vw|px)$/, replace = function() {
133
+ for (var args = arguments, index = 0, string = args[0]; ++index in args; ) string = string.replace(args[index], args[++index]);
134
+ return string;
135
+ }, buidlStr = function(css) {
136
+ return cache[css] || (cache[css] = "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, "") + ";"),
137
+ cache[css];
138
+ };
139
+ return function(css, length) {
140
+ var parsedLength;
141
+ if (!(css in cssCache)) if (cssCache[css] = !1, length && (parsedLength = css.match(regLength))) cssCache[css] = parsedLength[1] * units[parsedLength[2]]; else try {
142
+ cssCache[css] = new Function("e", buidlStr(css))(units);
143
+ } catch (e) {}
144
+ return cssCache[css];
145
+ };
146
+ }();
135
147
  ri.calcLength = function(sourceSizeValue) {
136
- var failed, parsedLength, orirgValue = sourceSizeValue, value = !1;
137
- if (!(orirgValue in lengthCache)) {
138
- if (parsedLength = sourceSizeValue.match(regLength)) parsedLength[1] = parseFloat(parsedLength[1], 10),
139
- value = parsedLength[1] ? "vw" == parsedLength[2] ? ri.vW * parsedLength[1] / 100 : "em" == parsedLength[2] ? ri.getEmValue() * parsedLength[1] : parsedLength[1] : !1; else if (sourceSizeValue.indexOf("calc") > -1 || parseInt(sourceSizeValue, 10)) {
140
- sourceSizeValue = sourceSizeValue.replace("vw", "%"), lengthEl || (lengthEl = document.createElement("div"),
141
- lengthEl.style.cssText = baseStyle), lengthElInstered || (lengthElInstered = !0,
142
- docElem.insertBefore(lengthEl, docElem.firstChild)), lengthEl.style.width = "0px";
143
- try {
144
- lengthEl.style.width = sourceSizeValue;
145
- } catch (e) {
146
- failed = !0;
147
- }
148
- value = lengthEl.offsetWidth, failed && (value = !1);
149
- }
150
- 0 >= value && (value = !1), lengthCache[orirgValue] = value;
151
- }
152
- return lengthCache[orirgValue];
148
+ var value = evalCSS(sourceSizeValue, !0) || !1;
149
+ return 0 > value && (value = !1), value;
153
150
  }, ri.types = types, types["image/jpeg"] = !0, types["image/gif"] = !0, types["image/png"] = !0,
154
151
  types["image/svg+xml"] = document.implementation.hasFeature("http://wwwindow.w3.org/TR/SVG11/feature#Image", "1.1"),
155
152
  ri.supportsType = function(type) {
@@ -179,7 +176,7 @@
179
176
  }
180
177
  return set.cands;
181
178
  };
182
- var eminpx, memDescriptor = {}, regDescriptor = /^([\+eE\d\.]+)(w|x)$/, fsCss = "font-size:100% !important;";
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;";
183
180
  ri.getEmValue = function() {
184
181
  var body;
185
182
  if (!eminpx && (body = document.body)) {
@@ -189,15 +186,13 @@
189
186
  docElem.style.cssText = originalHTMLCSS, body.style.cssText = originalBodyCSS;
190
187
  }
191
188
  return eminpx || 16;
192
- };
193
- var sizeLengthCache = {};
194
- ri.calcListLength = function(sourceSizeListStr) {
189
+ }, ri.calcListLength = function(sourceSizeListStr) {
195
190
  if (!(sourceSizeListStr in sizeLengthCache) || cfg.uT) {
196
191
  var sourceSize, parsedSize, length, media, i, len, sourceSizeList = trim(sourceSizeListStr).split(/\s*,\s*/), winningLength = !1;
197
192
  for (i = 0, len = sourceSizeList.length; len > i && (sourceSize = sourceSizeList[i],
198
193
  parsedSize = ri.parseSize(sourceSize), length = parsedSize.length, media = parsedSize.media,
199
194
  !length || !ri.matchesMedia(media) || (winningLength = ri.calcLength(length)) === !1); i++) ;
200
- sizeLengthCache[sourceSizeListStr] = winningLength ? winningLength : ri.vW;
195
+ sizeLengthCache[sourceSizeListStr] = winningLength ? winningLength : units.width;
201
196
  }
202
197
  return sizeLengthCache[sourceSizeListStr];
203
198
  }, ri.setRes = function(set) {
@@ -208,83 +203,70 @@
208
203
  candidate.descriptor || setResolution(candidate, set.sizes);
209
204
  }
210
205
  return candidates;
211
- };
212
- var dprM, tLow, greed, tLazy, tHigh, tMemory, isWinComplete;
213
- ri.applySetCandidate = function(candidates, img) {
206
+ }, ri.applySetCandidate = function(candidates, img) {
214
207
  if (candidates.length) {
215
- var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, imageData = img[ri.ns], evaled = !0;
208
+ var candidate, dpr, i, j, diff, length, bestCandidate, curSrc, curCan, isSameSet, candidateSrc, oldRes, imageData = img[ri.ns], evaled = !0;
216
209
  if (curSrc = imageData.curSrc || img[curSrcProp], curCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set),
217
- dpr = ri.getX(candidates, curCan), curSrc && (curCan && (curCan.res += tLazy), isSameSet = !imageData.pic || curCan && curCan.set == candidates[0].set,
218
- curCan && isSameSet && curCan.res >= dpr && tMemory > curCan.res - dpr ? bestCandidate = curCan : img.complete || imageData.src != getImgAttr.call(img, "src") || img.lazyload || (isSameSet || !isWinComplete && !inView(img)) && (bestCandidate = curCan,
219
- candidateSrc = curSrc, evaled = "lazy", isWinComplete && reevaluateAfterLoad(img))),
220
- !bestCandidate) for (candidates.sort(ascendingSort), length = candidates.length,
221
- bestCandidate = candidates[length - 1], i = 0; length > i; i++) if (candidate = candidates[i],
222
- candidate.res >= dpr) {
210
+ dpr = ri.DPR, curSrc && (curCan && curCan.res < dpr && (oldRes = curCan.res, curCan.res += cfg.tLazy * Math.pow(curCan.res - .1, isLandscape ? 2.2 : 1.9)),
211
+ isSameSet = !imageData.pic || curCan && curCan.set == candidates[0].set, curCan && isSameSet && curCan.res >= dpr && (oldRes || tMemory > curCan.res) ? bestCandidate = curCan : supportAbort || img.complete || !getImgAttr.call(img, "src") || img.lazyload || (isSameSet || !inView(img)) && (bestCandidate = curCan,
212
+ candidateSrc = curSrc, evaled = "L", isWinComplete && reevaluateAfterLoad(img))),
213
+ !bestCandidate) for (oldRes && (curCan.res = curCan.res - (curCan.res - oldRes) / 2),
214
+ candidates.sort(ascendingSort), length = candidates.length, bestCandidate = candidates[length - 1],
215
+ i = 0; length > i; i++) if (candidate = candidates[i], candidate.res >= dpr) {
223
216
  j = i - 1, bestCandidate = candidates[j] && (diff = candidate.res - dpr) && curSrc != ri.makeUrl(candidate.url) && chooseLowRes(candidates[j].res, diff, dpr) ? candidates[j] : candidate;
224
217
  break;
225
218
  }
226
- return curSrc && curCan && (curCan.res -= tLazy), bestCandidate && (candidateSrc = ri.makeUrl(bestCandidate.url),
227
- currentSrcSupported || (img.currentSrc = candidateSrc), imageData.curSrc = candidateSrc,
228
- imageData.curCan = bestCandidate, candidateSrc != curSrc ? ri.setSrc(img, bestCandidate) : ri.setSize(img)),
219
+ return oldRes && (curCan.res = oldRes), bestCandidate && (candidateSrc = ri.makeUrl(bestCandidate.url),
220
+ imageData.curSrc = candidateSrc, imageData.curCan = bestCandidate, candidateSrc != curSrc ? ri.setSrc(img, bestCandidate) : ri.setSize(img)),
229
221
  evaled;
230
222
  }
231
223
  };
232
- ri.getX = function() {
233
- return ri.DPR * cfg.xQuant;
234
- }, ri.setSrc = function(img, bestCandidate) {
224
+ ri.setSrc = function(img, bestCandidate) {
235
225
  var origWidth;
236
226
  img.src = bestCandidate.url, "image/svg+xml" == bestCandidate.set.type && (origWidth = img.style.width,
237
- img.style.width = img.offsetWidth + 1 + "px", img.offsetWidth + 1 && (img.style.width = origWidth));
238
- };
239
- var intrinsicSizeHandler = function() {
240
- off(this, "load", intrinsicSizeHandler), ri.setSize(this);
227
+ img.style.width = img.offsetWidth + 1 + "px", img.offsetWidth + 1 && (img.style.width = origWidth)),
228
+ ri.setSize(img);
229
+ }, ri.setSize = noop, ri.getSet = function(img) {
230
+ var i, set, supportsType, match = !1, sets = img[ri.ns].sets;
231
+ for (i = 0; i < sets.length && !match; i++) if (set = sets[i], set.srcset && ri.matchesMedia(set.media) && (supportsType = ri.supportsType(set.type))) {
232
+ "pending" == supportsType && (set = supportsType), match = set;
233
+ break;
234
+ }
235
+ return match;
241
236
  };
242
- ri.setSize = function(img) {
243
- var width, curCandidate = img[ri.ns].curCan;
244
- cfg.addSize && curCandidate && !img[ri.ns].dims && (img.complete || (off(img, "load", intrinsicSizeHandler),
245
- on(img, "load", intrinsicSizeHandler)), width = img.naturalWidth, width && ("x" == curCandidate.desc.type ? setImgAttr.call(img, "width", parseInt(width / curCandidate.res / cfg.xQuant, 10)) : "w" == curCandidate.desc.type && setImgAttr.call(img, "width", parseInt(curCandidate.cWidth * (width / curCandidate.desc.val), 10))));
246
- }, document.addEventListener && "naturalWidth" in image && "complete" in image || (ri.setSize = noop),
247
- ri.getSet = function(img) {
248
- var i, set, supportsType, match = !1, sets = img[ri.ns].sets;
249
- for (i = 0; i < sets.length && !match; i++) if (set = sets[i], set.srcset && ri.matchesMedia(set.media) && (supportsType = ri.supportsType(set.type))) {
250
- "pending" == supportsType && (set = supportsType), match = set;
251
- break;
252
- }
253
- return match;
254
- };
255
237
  var alwaysCheckWDescriptor = ri.supSrcset && !ri.supSizes;
256
238
  ri.parseSets = function(element, parent) {
257
239
  var srcsetAttribute, fallbackCandidate, isWDescripor, srcsetParsed, hasPicture = "PICTURE" == parent.nodeName.toUpperCase(), imageData = element[ri.ns];
258
240
  imageData.src === undefined && (imageData.src = getImgAttr.call(element, "src"),
259
241
  imageData.src ? setImgAttr.call(element, srcAttr, imageData.src) : removeImgAttr.call(element, srcAttr)),
260
242
  imageData.srcset === undefined && (srcsetAttribute = getImgAttr.call(element, "srcset"),
261
- imageData.srcset = srcsetAttribute, srcsetParsed = !0), imageData.dims === undefined && (imageData.dims = getImgAttr.call(element, "height") && getImgAttr.call(element, "width")),
262
- imageData.sets = [], hasPicture && (imageData.pic = !0, getAllSourceElements(parent, imageData.sets)),
263
- imageData.srcset ? (fallbackCandidate = {
264
- srcset: imageData.srcset,
265
- sizes: getImgAttr.call(element, "sizes")
266
- }, imageData.sets.push(fallbackCandidate), isWDescripor = alwaysCheckWDescriptor || imageData.src ? hasWDescripor(fallbackCandidate) : !1,
267
- isWDescripor || !imageData.src || getCandidateForSrc(imageData.src, fallbackCandidate) || hasOneX(fallbackCandidate) || (fallbackCandidate.srcset += ", " + imageData.src,
268
- fallbackCandidate.cands = !1)) : imageData.src && imageData.sets.push({
269
- srcset: imageData.src,
270
- sizes: null
271
- }), imageData.curCan = null, imageData.supported = !(hasPicture || fallbackCandidate && !ri.supSrcset || isWDescripor),
243
+ imageData.srcset = srcsetAttribute, srcsetParsed = !0), imageData.sets = [], hasPicture && (imageData.pic = !0,
244
+ getAllSourceElements(parent, imageData.sets)), imageData.srcset ? (fallbackCandidate = {
245
+ srcset: imageData.srcset,
246
+ sizes: getImgAttr.call(element, "sizes")
247
+ }, imageData.sets.push(fallbackCandidate), isWDescripor = alwaysCheckWDescriptor || imageData.src ? hasWDescripor(fallbackCandidate) : !1,
248
+ isWDescripor || !imageData.src || getCandidateForSrc(imageData.src, fallbackCandidate) || hasOneX(fallbackCandidate) || (fallbackCandidate.srcset += ", " + imageData.src,
249
+ fallbackCandidate.cands = !1)) : imageData.src && imageData.sets.push({
250
+ srcset: imageData.src,
251
+ sizes: null
252
+ }), imageData.curCan = null, imageData.supported = !(hasPicture || fallbackCandidate && !ri.supSrcset || isWDescripor),
272
253
  srcsetParsed && ri.supSrcset && !imageData.supported && (srcsetAttribute ? (setImgAttr.call(element, srcsetAttr, srcsetAttribute),
273
- element.srcset = "") : removeImgAttr.call(element, srcsetAttr)), imageData.parsed = !0;
254
+ 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
+ imageData.parsed = !0;
274
256
  };
275
257
  var reevaluateAfterLoad = function() {
276
258
  var onload = function() {
277
- off(this, "load", onload), ri.fillImgs({
259
+ off(this, "load", onload), off(this, "error", onload), ri.fillImgs({
278
260
  elements: [ this ]
279
261
  });
280
262
  };
281
263
  return function(img) {
282
- off(img, "load", onload), on(img, "load", onload);
264
+ off(img, "load", onload), off(img, "error", onload), on(img, "error", onload), on(img, "load", onload);
283
265
  };
284
266
  }();
285
267
  ri.fillImg = function(element, options) {
286
268
  var parent, imageData, extreme = options.reparse || options.reevaluate;
287
- if (element[ri.ns] || (element[ri.ns] = {}), imageData = element[ri.ns], "lazy" == imageData.evaled && (isWinComplete || element.complete) && (imageData.evaled = !1),
269
+ if (element[ri.ns] || (element[ri.ns] = {}), imageData = element[ri.ns], "L" == imageData.evaled && element.complete && (imageData.evaled = !1),
288
270
  extreme || !imageData.evaled) {
289
271
  if (!imageData.parsed || options.reparse) {
290
272
  if (parent = element.parentNode, !parent) return;
@@ -295,14 +277,8 @@
295
277
  };
296
278
  var resizeThrottle;
297
279
  ri.setupRun = function(options) {
298
- (!alreadyRun || options.reevaluate || isVwDirty) && (cfg.uT || (ri.DPR = window.devicePixelRatio || 1),
299
- dprM = Math.min(Math.max(ri.DPR * cfg.xQuant, 1), 2.5), tLow = cfg.tLow * dprM,
300
- tLazy = cfg.tLazy * dprM, greed = cfg.greed * dprM, tHigh = cfg.tHigh, tMemory = .6 + .4 * dprM + tLazy),
301
- isVwDirty && (lengthCache = {}, sizeLengthCache = {}, updateView(), options.elements || options.context || clearTimeout(resizeThrottle));
302
- }, ri.teardownRun = function() {
303
- var parent;
304
- lengthElInstered && (lengthElInstered = !1, parent = lengthEl.parentNode, parent && parent.removeChild(lengthEl));
305
- };
280
+ (!alreadyRun || options.reevaluate || isVwDirty) && (updateMetrics(), options.elements || options.context || clearTimeout(resizeThrottle));
281
+ }, ri.teardownRun = noop;
306
282
  var alreadyRun = !1, respimage = function(opt) {
307
283
  var elements, i, plen, options = opt || {};
308
284
  if (options.elements && 1 == options.elements.nodeType && ("IMG" == options.elements.nodeName.toUpperCase() ? options.elements = [ options.elements ] : (options.context = options.elements,
@@ -313,9 +289,13 @@
313
289
  }
314
290
  };
315
291
  ri.fillImgs = respimage, window.HTMLPictureElement ? (respimage = noop, ri.fillImg = noop) : !function() {
316
- var regWinComplete = /^loade|^c/, run = function() {
317
- clearTimeout(timerId), timerId = setTimeout(run, 3e3), document.body && (regWinComplete.test(document.readyState || "") && (isWinComplete = !0,
318
- clearTimeout(timerId), off(document, "readystatechange", run)), ri.fillImgs());
292
+ var lDelay;
293
+ lDelay = supportAbort ? 180 : 400;
294
+ var run = function() {
295
+ var readyState = document.readyState || "";
296
+ clearTimeout(timerId), timerId = setTimeout(run, "loading" == readyState ? lDelay : 2e3),
297
+ document.body && (/d$|^c/.test(readyState) && (isWinComplete = !0, clearTimeout(timerId),
298
+ off(document, "readystatechange", run)), ri.fillImgs());
319
299
  }, resizeEval = function() {
320
300
  ri.fillImgs({
321
301
  reevaluate: !0
@@ -333,6 +313,125 @@
333
313
  });
334
314
  }, window.respimage = respimage;
335
315
  }(window, document);
316
+
317
+ (function( factory ) {
318
+ "use strict";
319
+ var interValId;
320
+ var intervalIndex = 0;
321
+ var run = function(){
322
+ if ( window.respimage ) {
323
+ factory( window.respimage );
324
+ }
325
+ if(window.respimage || intervalIndex > 9999){
326
+ clearInterval(interValId);
327
+ }
328
+ intervalIndex++;
329
+ };
330
+ interValId = setInterval(run, 8);
331
+
332
+ run();
333
+
334
+ }( function( respimage, undefined ) {
335
+ "use strict";
336
+
337
+ var ri = respimage._;
338
+ var knownWidths = {};
339
+ var cfg = ri.cfg;
340
+ var curSrcProp = "currentSrc";
341
+ var setSize = function(width, img, data){
342
+ var curCandidate = data.curCan;
343
+
344
+ if ( width ) {
345
+ if ( curCandidate.desc.type == "x" ) {
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
+ }
350
+ }
351
+ };
352
+ var loadBg = function(url, img, data){
353
+ var bgImg;
354
+ var curCandidate;
355
+ if(knownWidths[url]){
356
+ setSize(knownWidths[url], img, data);
357
+ } else {
358
+ curCandidate = data.curCan;
359
+ if(curCandidate.desc.type == 'w'){
360
+ setSize(curCandidate.desc.val, img, data);
361
+ }
362
+
363
+ bgImg = document.createElement('img');
364
+ bgImg.onload = function(){
365
+ knownWidths[url] = bgImg.naturalWidth || bgImg.width;
366
+ if(url == img[curSrcProp]){
367
+ setSize(knownWidths[url], img, data);
368
+ }
369
+ bgImg.onload = null;
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;
379
+ };
380
+ bgImg.src = url;
381
+
382
+ if(bgImg && bgImg.complete){
383
+ bgImg.onload();
384
+ }
385
+ }
386
+
387
+ };
388
+ var reeval = (function(){
389
+ var running, timer;
390
+ var run = function(){
391
+ running = false;
392
+ clearTimeout(timer);
393
+ respimage({reevaluate: true});
394
+ };
395
+
396
+ return function(){
397
+ if(!running && cfg.addSize){
398
+ running = true;
399
+ clearTimeout(timer);
400
+ timer = setTimeout(run, 33);
401
+ }
402
+ };
403
+
404
+ })();
405
+
406
+ if( !(curSrcProp in document.createElement("img")) ){
407
+ curSrcProp = "src";
408
+ }
409
+
410
+ cfg.addSize = true;
411
+
412
+ ri.setSize = function( img ) {
413
+ var url;
414
+ var data = img[ ri.ns ];
415
+ var curCandidate = data.curCan;
416
+
417
+ if ( data.dims === undefined ) {
418
+ data.dims = img.getAttribute( "height" ) && img.getAttribute( "width" );
419
+ }
420
+
421
+ if ( !cfg.addSize || !curCandidate || data.dims ) {return;}
422
+ url = ri.makeUrl(curCandidate.url);
423
+ if(url == img[curSrcProp]){
424
+ loadBg(url, img, data);
425
+ }
426
+ };
427
+
428
+
429
+ if(window.addEventListener){
430
+ addEventListener('resize', reeval, false);
431
+ }
432
+ respimage({reevaluate: true});
433
+ }));
434
+
336
435
  (function( factory ) {
337
436
  "use strict";
338
437
  var interValId;
@@ -419,12 +518,13 @@
419
518
 
420
519
 
421
520
  respimage.testTypeSupport("image/webp", "data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==", 1);
422
- respimage.testTypeSupport("image/jp2 image/jpx image/jpm", "data:image/jp2;base64,AAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAABHanAyaAAAABZpaGRyAAAAAQAAAAEAAQAHAAAAAAAPY29scgEAAAAAABEAAAAacmVzIAAAABJyZXNjAGAA/gBgAP4EBAAAAABqcDJj/0//UQApAAAAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAEB/1wADUAIEBAYEBAYEBAY/1IADAAAAAEAAwQEAAH/ZAAPAAFMV0ZfSlAyXzIxMf+QAAoAAAAAABIAAf+TgICAgP/Z", 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);
423
522
  respimage.testTypeSupport("image/vnd.ms-photo", "data:image/vnd.ms-photo;base64,SUm8AQgAAAAFAAG8AQAQAAAASgAAAIC8BAABAAAAAQAAAIG8BAABAAAAAQAAAMC8BAABAAAAWgAAAMG8BAABAAAAHwAAAAAAAAAkw91vA07+S7GFPXd2jckNV01QSE9UTwAZAYBxAAAAABP/gAAEb/8AAQAAAQAAAA==", 1);
424
523
  respimage.testTypeSupport("video/png video/apng video/x-mng video/x-png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACGFjVEwAAAABAAAAAcMq2TYAAAANSURBVAiZY2BgYPgPAAEEAQB9ssjfAAAAGmZjVEwAAAAAAAAAAQAAAAEAAAAAAAAAAAD6A+gBAbNU+2sAAAARZmRBVAAAAAEImWNgYGBgAAAABQAB6MzFdgAAAABJRU5ErkJggg==", false, true);
425
524
 
426
525
  }));
427
526
 
527
+
428
528
  (function(){
429
529
 
430
530
  webshim.isReady('picture', true);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webshims-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.4
4
+ version: 1.15.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Reese
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -125,6 +125,7 @@ files:
125
125
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js
126
126
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js
127
127
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js
128
+ - vendor/assets/javascripts/webshims/shims/i18n/formcfg-no.js
128
129
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js
129
130
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js
130
131
  - vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js
@@ -224,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
225
  version: '0'
225
226
  requirements: []
226
227
  rubyforge_project: webshims-rails
227
- rubygems_version: 2.2.2
228
+ rubygems_version: 2.4.2
228
229
  signing_key:
229
230
  specification_version: 4
230
231
  summary: Webshims lib packaged as a Rails engine