webshims-rails 1.15.4 → 1.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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