webshims-rails 1.14.1 → 1.14.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +0 -0
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +3 -8
  5. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js +0 -0
  6. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +0 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/proxy.php +0 -0
  9. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/save.php +0 -0
  10. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/canvas2png.js +0 -0
  11. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  13. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +0 -0
  14. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/proxy.php +0 -0
  15. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/save.php +0 -0
  16. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2 -2
  17. data/vendor/assets/javascripts/webshims/shims/combos/1.js +66 -43
  18. data/vendor/assets/javascripts/webshims/shims/combos/10.js +66 -31
  19. data/vendor/assets/javascripts/webshims/shims/combos/11.js +66 -31
  20. data/vendor/assets/javascripts/webshims/shims/combos/12.js +96 -59
  21. data/vendor/assets/javascripts/webshims/shims/combos/13.js +96 -59
  22. data/vendor/assets/javascripts/webshims/shims/combos/14.js +0 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4 -1
  24. data/vendor/assets/javascripts/webshims/shims/combos/16.js +70 -44
  25. data/vendor/assets/javascripts/webshims/shims/combos/17.js +66 -31
  26. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1241 -1126
  27. data/vendor/assets/javascripts/webshims/shims/combos/19.js +1272 -1214
  28. data/vendor/assets/javascripts/webshims/shims/combos/2.js +66 -43
  29. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1272 -1214
  30. data/vendor/assets/javascripts/webshims/shims/combos/21.js +61 -92
  31. data/vendor/assets/javascripts/webshims/shims/combos/22.js +30 -16
  32. data/vendor/assets/javascripts/webshims/shims/combos/23.js +66 -43
  33. data/vendor/assets/javascripts/webshims/shims/combos/25.js +41 -85
  34. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1556 -2316
  35. data/vendor/assets/javascripts/webshims/shims/combos/27.js +12 -10
  36. data/vendor/assets/javascripts/webshims/shims/combos/28.js +4 -1
  37. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -0
  38. data/vendor/assets/javascripts/webshims/shims/combos/3.js +0 -0
  39. data/vendor/assets/javascripts/webshims/shims/combos/30.js +0 -0
  40. data/vendor/assets/javascripts/webshims/shims/combos/31.js +0 -0
  41. data/vendor/assets/javascripts/webshims/shims/combos/32.js +1175 -1095
  42. data/vendor/assets/javascripts/webshims/shims/combos/33.js +0 -0
  43. data/vendor/assets/javascripts/webshims/shims/combos/34.js +30 -16
  44. data/vendor/assets/javascripts/webshims/shims/combos/4.js +0 -0
  45. data/vendor/assets/javascripts/webshims/shims/combos/5.js +66 -31
  46. data/vendor/assets/javascripts/webshims/shims/combos/6.js +66 -31
  47. data/vendor/assets/javascripts/webshims/shims/combos/7.js +66 -43
  48. data/vendor/assets/javascripts/webshims/shims/combos/8.js +66 -43
  49. data/vendor/assets/javascripts/webshims/shims/combos/9.js +66 -31
  50. data/vendor/assets/javascripts/webshims/shims/combos/97.js +63 -28
  51. data/vendor/assets/javascripts/webshims/shims/combos/98.js +149 -74
  52. data/vendor/assets/javascripts/webshims/shims/combos/99.js +149 -74
  53. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +1 -1
  54. data/vendor/assets/javascripts/webshims/shims/details.js +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/es5.js +1175 -1095
  57. data/vendor/assets/javascripts/webshims/shims/excanvas.js +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/filereader.js +10 -9
  59. data/vendor/assets/javascripts/webshims/shims/form-combat.js +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/form-fixrangechange.js +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/form-message.js +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +40 -11
  68. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +4 -1
  69. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +2 -1
  70. data/vendor/assets/javascripts/webshims/shims/form-validation.js +80 -47
  71. data/vendor/assets/javascripts/webshims/shims/form-validators.js +19 -8
  72. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +21 -1
  73. data/vendor/assets/javascripts/webshims/shims/geolocation.js +0 -0
  74. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-CN.js +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-cs.js +0 -0
  77. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +0 -0
  78. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +0 -0
  81. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fa.js +130 -0
  82. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +0 -0
  83. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +0 -0
  84. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +0 -0
  85. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +0 -0
  86. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +0 -0
  87. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +0 -0
  88. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +0 -0
  89. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +0 -0
  90. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +0 -0
  91. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js +0 -0
  92. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +0 -0
  93. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt.js +0 -0
  94. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +0 -0
  95. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +0 -0
  96. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +0 -0
  97. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-TW.js +130 -0
  98. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -0
  99. data/vendor/assets/javascripts/webshims/shims/jme/_icons.scss +186 -0
  100. data/vendor/assets/javascripts/webshims/shims/jme/b.js +63 -28
  101. data/vendor/assets/javascripts/webshims/shims/jme/c.js +86 -46
  102. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +317 -211
  103. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +59 -223
  104. data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
  105. data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +0 -0
  106. data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
  107. data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
  108. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +66 -14
  109. data/vendor/assets/javascripts/webshims/shims/jme/p.js +0 -0
  110. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +0 -0
  111. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +0 -0
  112. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  113. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  114. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  115. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  116. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  117. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  118. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  119. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  120. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  121. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  122. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +55 -48
  123. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +66 -43
  124. data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +833 -0
  125. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +31 -76
  126. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +0 -0
  127. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +0 -0
  128. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
  129. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.min.swf +0 -0
  130. data/vendor/assets/javascripts/webshims/shims/moxie/js/moxie.js +1542 -2303
  131. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  132. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
  133. data/vendor/assets/javascripts/webshims/shims/picture.js +160 -79
  134. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +0 -0
  135. data/vendor/assets/javascripts/webshims/shims/promise.js +0 -0
  136. data/vendor/assets/javascripts/webshims/shims/range-ui.js +26 -20
  137. data/vendor/assets/javascripts/webshims/shims/sizzle.js +0 -0
  138. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  139. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +444 -326
  140. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +379 -300
  141. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  142. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  143. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +8 -8
  144. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +0 -0
  145. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +0 -14
  146. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +104 -85
  147. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +20 -32
  148. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +0 -0
  149. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +14 -34
  150. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +920 -728
  151. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +471 -391
  152. data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
  153. data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +0 -0
  154. data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
  155. data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
  156. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  157. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +0 -0
  158. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -0
  159. data/vendor/assets/javascripts/webshims/shims/track-ui.js +0 -0
  160. data/vendor/assets/javascripts/webshims/shims/track.js +30 -16
  161. metadata +8 -4
  162. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +0 -12
  163. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
@@ -19,7 +19,7 @@
19
19
  });
20
20
  })();
21
21
 
22
- /*! Picturefill - v2.0.0 - 2014-05-08
22
+ /*! Picturefill - v2.1.0-beta - 2014-06-03
23
23
  * http://scottjehl.github.io/picturefill
24
24
  * Copyright (c) 2014 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */
25
25
  /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
@@ -78,7 +78,7 @@ window.matchMedia || (window.matchMedia = function() {
78
78
  "use strict";
79
79
 
80
80
  // If picture is supported, well, that's awesome. Let's get outta here...
81
- if( w.HTMLPictureElement ){
81
+ if ( w.HTMLPictureElement ) {
82
82
  return;
83
83
  }
84
84
 
@@ -95,12 +95,12 @@ window.matchMedia || (window.matchMedia = function() {
95
95
  pf.srcsetSupported = new w.Image().srcset !== undefined;
96
96
 
97
97
  // just a string trim workaround
98
- pf.trim = function( str ){
98
+ pf.trim = function( str ) {
99
99
  return str.trim ? str.trim() : str.replace( /^\s+|\s+$/g, "" );
100
100
  };
101
101
 
102
102
  // just a string endsWith workaround
103
- pf.endsWith = function( str, suffix ){
103
+ pf.endsWith = function( str, suffix ) {
104
104
  return str.endsWith ? str.endsWith( suffix ) : str.indexOf( suffix, str.length - suffix.length ) !== -1;
105
105
  };
106
106
 
@@ -135,7 +135,7 @@ window.matchMedia || (window.matchMedia = function() {
135
135
  length = length.replace( "vw", "%" );
136
136
 
137
137
  // Create a cached element for getting length value widths
138
- if( !pf.lengthEl ){
138
+ if ( !pf.lengthEl ) {
139
139
  pf.lengthEl = doc.createElement( "div" );
140
140
  doc.documentElement.insertBefore( pf.lengthEl, doc.documentElement.firstChild );
141
141
  }
@@ -155,24 +155,24 @@ window.matchMedia || (window.matchMedia = function() {
155
155
  pf.types["image/png"] = true;
156
156
 
157
157
  // test svg support
158
- pf.types[ "image/svg+xml" ] = doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1');
158
+ pf.types[ "image/svg+xml" ] = doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1");
159
159
 
160
160
  // test webp support, only when the markup calls for it
161
- pf.types[ "image/webp" ] = function(){
161
+ pf.types[ "image/webp" ] = function() {
162
162
  // based on Modernizr's lossless img-webp test
163
163
  // note: asynchronous
164
164
  var img = new w.Image(),
165
165
  type = "image/webp";
166
166
 
167
- img.onerror = function(){
167
+ img.onerror = function() {
168
168
  pf.types[ type ] = false;
169
169
  picturefill();
170
170
  };
171
- img.onload = function(){
171
+ img.onload = function() {
172
172
  pf.types[ type ] = img.width === 1;
173
173
  picturefill();
174
174
  };
175
- img.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
175
+ img.src = "data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=";
176
176
  };
177
177
 
178
178
  /**
@@ -181,19 +181,17 @@ window.matchMedia || (window.matchMedia = function() {
181
181
  * you can define them as a function that'll run only if that type needs to be tested. Just make the test function call picturefill again when it is complete.
182
182
  * see the async webp test above for example
183
183
  */
184
- pf.verifyTypeSupport = function( source ){
184
+ pf.verifyTypeSupport = function( source ) {
185
185
  var type = source.getAttribute( "type" );
186
186
  // if type attribute exists, return test result, otherwise return true
187
- if( type === null || type === "" ){
187
+ if ( type === null || type === "" ) {
188
188
  return true;
189
- }
190
- else {
189
+ } else {
191
190
  // if the type test is a function, run it and return "pending" status. The function will rerun picturefill on pending elements once finished.
192
- if( typeof( pf.types[ type ] ) === "function" ){
191
+ if ( typeof( pf.types[ type ] ) === "function" ) {
193
192
  pf.types[ type ]();
194
193
  return "pending";
195
- }
196
- else {
194
+ } else {
197
195
  return pf.types[ type ];
198
196
  }
199
197
  }
@@ -219,7 +217,7 @@ window.matchMedia || (window.matchMedia = function() {
219
217
  var sourceSizeList = pf.trim( sourceSizeListStr ).split( /\s*,\s*/ ),
220
218
  winningLength;
221
219
 
222
- for ( var i=0, len=sourceSizeList.length; i < len; i++ ) {
220
+ for ( var i = 0, len = sourceSizeList.length; i < len; i++ ) {
223
221
  // Match <media-condition>? length, ie ( min-width: 50em ) 100%
224
222
  var sourceSize = sourceSizeList[ i ],
225
223
  // Split "( min-width: 50em ) 100%" into separate strings
@@ -243,6 +241,103 @@ window.matchMedia || (window.matchMedia = function() {
243
241
  return pf.getWidthFromLength( winningLength );
244
242
  };
245
243
 
244
+ pf.parseSrcset = function( srcset ) {
245
+ /**
246
+ * A lot of this was pulled from Boris Smus’ parser for the now-defunct WHATWG `srcset`
247
+ * https://github.com/borismus/srcset-polyfill/blob/master/js/srcset-info.js
248
+ *
249
+ * 1. Let input (`srcset`) be the value passed to this algorithm.
250
+ * 2. Let position be a pointer into input, initially pointing at the start of the string.
251
+ * 3. Let raw candidates be an initially empty ordered list of URLs with associated
252
+ * unparsed descriptors. The order of entries in the list is the order in which entries
253
+ * are added to the list.
254
+ */
255
+ var candidates = [];
256
+
257
+ while ( srcset !== "" ) {
258
+ srcset = srcset.replace(/^\s+/g,"");
259
+
260
+ // 5. Collect a sequence of characters that are not space characters, and let that be url.
261
+ var pos = srcset.search(/\s/g),
262
+ url, descriptor = null;
263
+
264
+ if ( pos !== -1 ) {
265
+ url = srcset.slice( 0, pos );
266
+
267
+ var last = url[ url.length - 1 ];
268
+
269
+ // 6. If url ends with a U+002C COMMA character (,), remove that character from url
270
+ // and let descriptors be the empty string. Otherwise, follow these substeps
271
+ // 6.1. If url is empty, then jump to the step labeled descriptor parser.
272
+
273
+ if ( last === "," || url === "" ) {
274
+ url = url.replace(/,+$/, "");
275
+ descriptor = "";
276
+ }
277
+ srcset = srcset.slice( pos + 1 );
278
+
279
+ // 6.2. Collect a sequence of characters that are not U+002C COMMA characters (,), and
280
+ // let that be descriptors.
281
+ if ( descriptor === null ) {
282
+ var descpos = srcset.indexOf(",");
283
+ if ( descpos !== -1 ) {
284
+ descriptor = srcset.slice( 0, descpos );
285
+ srcset = srcset.slice( descpos + 1 );
286
+ } else {
287
+ descriptor = srcset;
288
+ srcset = "";
289
+ }
290
+ }
291
+ } else {
292
+ url = srcset;
293
+ srcset = "";
294
+ }
295
+
296
+ // 7. Add url to raw candidates, associated with descriptors.
297
+ if ( url || descriptor ) {
298
+ candidates.push({
299
+ url: url,
300
+ descriptor: descriptor
301
+ });
302
+ }
303
+ }
304
+ return candidates;
305
+ };
306
+
307
+ pf.parseDescriptor = function( descriptor, sizes ) {
308
+ // 11. Descriptor parser: Let candidates be an initially empty source set. The order of entries in the list
309
+ // is the order in which entries are added to the list.
310
+ var sizeDescriptor = descriptor && descriptor.replace(/(^\s+|\s+$)/g, ""),
311
+ widthInCssPixels = sizes ? pf.findWidthFromSourceSize( sizes ) : "100%",
312
+ resCandidate;
313
+
314
+ if ( sizeDescriptor ) {
315
+ var splitDescriptor = sizeDescriptor.split(" ");
316
+
317
+ for (var i = splitDescriptor.length + 1; i >= 0; i--) {
318
+
319
+ var curr = splitDescriptor[ i ],
320
+ lastchar = curr && curr.slice( curr.length - 1 );
321
+
322
+ if ( lastchar === "w" || lastchar === "x" ) {
323
+ resCandidate = curr;
324
+ }
325
+ if ( sizes && resCandidate ) {
326
+ // get the dpr by taking the length / width in css pixels
327
+ resCandidate = parseFloat( ( parseInt( curr, 10 ) / widthInCssPixels ) );
328
+ } else {
329
+ // get the dpr by grabbing the value of Nx
330
+ var res = curr && parseFloat( curr, 10 );
331
+
332
+ resCandidate = res && !isNaN( res ) && lastchar === "x" || lastchar === "w" ? res : 1;
333
+ }
334
+ }
335
+ } else {
336
+ resCandidate = 1;
337
+ }
338
+ return resCandidate;
339
+ };
340
+
246
341
  /**
247
342
  * Takes a srcset in the form of url/
248
343
  * ex. "images/pic-medium.png 1x, images/pic-medium-2x.png 2x" or
@@ -254,31 +349,16 @@ window.matchMedia || (window.matchMedia = function() {
254
349
  * If sizes is specified, resolution is calculated
255
350
  */
256
351
  pf.getCandidatesFromSourceSet = function( srcset, sizes ) {
257
- var candidates = pf.trim( srcset ).split( /,\s+/ ),
258
- widthInCssPixels = sizes ? pf.findWidthFromSourceSize( sizes ) : "100%",
352
+ var candidates = pf.parseSrcset( srcset ),
259
353
  formattedCandidates = [];
260
354
 
261
355
  for ( var i = 0, len = candidates.length; i < len; i++ ) {
262
- var candidate = candidates[ i ],
263
- candidateArr = candidate.split( /\s+/ ),
264
- sizeDescriptor = candidateArr[ 1 ],
265
- resolution;
266
- if ( sizeDescriptor && ( sizeDescriptor.slice( -1 ) === "w" || sizeDescriptor.slice( -1 ) === "x" ) ) {
267
- sizeDescriptor = sizeDescriptor.slice( 0, -1 );
268
- }
269
- if ( sizes ) {
270
- // get the dpr by taking the length / width in css pixels
271
- resolution = parseFloat( ( parseInt( sizeDescriptor, 10 ) / widthInCssPixels ) );
272
- } else {
273
- // get the dpr by grabbing the value of Nx
274
- resolution = sizeDescriptor ? parseFloat( sizeDescriptor, 10 ) : 1;
275
- }
356
+ var candidate = candidates[ i ];
276
357
 
277
- var formattedCandidate = {
278
- url: candidateArr[ 0 ],
279
- resolution: resolution
280
- };
281
- formattedCandidates.push( formattedCandidate );
358
+ formattedCandidates.push({
359
+ url: candidate.url,
360
+ resolution: pf.parseDescriptor( candidate.descriptor, sizes )
361
+ });
282
362
  }
283
363
  return formattedCandidates;
284
364
  };
@@ -289,8 +369,8 @@ window.matchMedia || (window.matchMedia = function() {
289
369
  * (the property's existence infers native srcset support, and a srcset-supporting browser will prioritize srcset's value over our winning picture candidate)
290
370
  * this moves srcset's value to memory for later use and removes the attr
291
371
  */
292
- pf.dodgeSrcset = function( img ){
293
- if( img.srcset ){
372
+ pf.dodgeSrcset = function( img ) {
373
+ if ( img.srcset ) {
294
374
  img[ pf.ns ].srcset = img.srcset;
295
375
  img.removeAttribute( "srcset" );
296
376
  }
@@ -305,11 +385,11 @@ window.matchMedia || (window.matchMedia = function() {
305
385
  candidates = [];
306
386
 
307
387
  // if it's an img element, use the cached srcset property (defined or not)
308
- if( el.nodeName.toUpperCase() === "IMG" && el[ pf.ns ] && el[ pf.ns ].srcset ){
388
+ if ( el.nodeName.toUpperCase() === "IMG" && el[ pf.ns ] && el[ pf.ns ].srcset ) {
309
389
  srcset = el[ pf.ns ].srcset;
310
390
  }
311
391
 
312
- if( srcset ) {
392
+ if ( srcset ) {
313
393
  candidates = pf.getCandidatesFromSourceSet( srcset, sizes );
314
394
  }
315
395
  return candidates;
@@ -325,8 +405,8 @@ window.matchMedia || (window.matchMedia = function() {
325
405
  length = candidates.length;
326
406
  bestCandidate = candidates[ length - 1 ];
327
407
 
328
- for ( var l=0; l < length; l++ ) {
329
- candidate = candidates[ l ];
408
+ for ( var i = 0; i < length; i++ ) {
409
+ candidate = candidates[ i ];
330
410
  if ( candidate.resolution >= pf.getDpr() ) {
331
411
  bestCandidate = candidate;
332
412
  break;
@@ -346,13 +426,13 @@ window.matchMedia || (window.matchMedia = function() {
346
426
  };
347
427
 
348
428
  /*
349
- * In IE9, <source> elements get removed if they aren"t children of
429
+ * In IE9, <source> elements get removed if they aren't children of
350
430
  * video elements. Thus, we conditionally wrap source elements
351
431
  * using <!--[if IE 9]><video style="display: none;"><![endif]-->
352
432
  * and must account for that here by moving those source elements
353
433
  * back into the picture element.
354
434
  */
355
- pf.removeVideoShim = function( picture ){
435
+ pf.removeVideoShim = function( picture ) {
356
436
  var videos = picture.getElementsByTagName( "video" );
357
437
  if ( videos.length ) {
358
438
  var video = videos[ 0 ],
@@ -376,10 +456,9 @@ window.matchMedia || (window.matchMedia = function() {
376
456
  imgs = doc.getElementsByTagName( "img" );
377
457
 
378
458
  for ( var h = 0, len = pictures.length + imgs.length; h < len; h++ ) {
379
- if ( h < pictures.length ){
459
+ if ( h < pictures.length ) {
380
460
  elems[ h ] = pictures[ h ];
381
- }
382
- else {
461
+ } else {
383
462
  var currImg = imgs[ h - pictures.length ];
384
463
 
385
464
  if ( currImg.parentNode.nodeName.toUpperCase() !== "PICTURE" &&
@@ -397,22 +476,22 @@ window.matchMedia || (window.matchMedia = function() {
397
476
  match;
398
477
 
399
478
  // Go through each child, and if they have media queries, evaluate them
400
- for ( var j=0, slen = sources.length; j < slen; j++ ) {
479
+ for ( var j = 0, slen = sources.length; j < slen; j++ ) {
401
480
  var source = sources[ j ];
402
481
 
403
482
  // ignore non-element nodes
404
- if( source.nodeType !== 1 ){
483
+ if ( source.nodeType !== 1 ) {
405
484
  continue;
406
485
  }
407
486
 
408
487
  // Hitting an `img` element stops the search for `sources`.
409
488
  // If no previous `source` matches, the `img` itself is evaluated later.
410
- if( source.nodeName.toUpperCase() === "IMG" ) {
489
+ if ( source.nodeName.toUpperCase() === "IMG" ) {
411
490
  return match;
412
491
  }
413
492
 
414
493
  // ignore non-`source` nodes
415
- if( source.nodeName.toUpperCase() !== "SOURCE" ){
494
+ if ( source.nodeName.toUpperCase() !== "SOURCE" ) {
416
495
  continue;
417
496
  }
418
497
 
@@ -423,14 +502,14 @@ window.matchMedia || (window.matchMedia = function() {
423
502
  continue;
424
503
  }
425
504
 
426
- // if there"s no media specified, OR w.matchMedia is supported
427
- if( ( !media || pf.matchesMedia( media ) ) ){
505
+ // if there's no media specified, OR w.matchMedia is supported
506
+ if ( ( !media || pf.matchesMedia( media ) ) ) {
428
507
  var typeSupported = pf.verifyTypeSupport( source );
429
508
 
430
- if( typeSupported === true ){
509
+ if ( typeSupported === true ) {
431
510
  match = source;
432
511
  break;
433
- } else if( typeSupported === "pending" ){
512
+ } else if ( typeSupported === "pending" ) {
434
513
  return false;
435
514
  }
436
515
  }
@@ -451,7 +530,7 @@ window.matchMedia || (window.matchMedia = function() {
451
530
  elements = options.elements || pf.getAllElements();
452
531
 
453
532
  // Loop through all elements
454
- for ( var i=0, plen = elements.length; i < plen; i++ ) {
533
+ for ( var i = 0, plen = elements.length; i < plen; i++ ) {
455
534
  element = elements[ i ];
456
535
  elemType = element.nodeName.toUpperCase();
457
536
  firstMatch = undefined;
@@ -459,7 +538,7 @@ window.matchMedia || (window.matchMedia = function() {
459
538
  picImg = undefined;
460
539
 
461
540
  // expando for caching data on the img
462
- if( !element[ pf.ns ] ){
541
+ if ( !element[ pf.ns ] ) {
463
542
  element[ pf.ns ] = {};
464
543
  }
465
544
 
@@ -471,7 +550,7 @@ window.matchMedia || (window.matchMedia = function() {
471
550
  }
472
551
 
473
552
  // if element is a picture element
474
- if( elemType === "PICTURE" ){
553
+ if ( elemType === "PICTURE" ) {
475
554
 
476
555
  // IE9 video workaround
477
556
  pf.removeVideoShim( element );
@@ -484,7 +563,7 @@ window.matchMedia || (window.matchMedia = function() {
484
563
  // if any sources are pending in this picture due to async type test(s)
485
564
  // remove the evaluated attr and skip for now ( the pending test will
486
565
  // rerun picturefill on this element when complete)
487
- if( firstMatch === false ) {
566
+ if ( firstMatch === false ) {
488
567
  continue;
489
568
  }
490
569
 
@@ -496,15 +575,15 @@ window.matchMedia || (window.matchMedia = function() {
496
575
  picImg = element;
497
576
  }
498
577
 
499
- if( picImg ) {
578
+ if ( picImg ) {
500
579
 
501
580
  // expando for caching data on the img
502
- if( !picImg[ pf.ns ] ){
581
+ if ( !picImg[ pf.ns ] ) {
503
582
  picImg[ pf.ns ] = {};
504
583
  }
505
584
 
506
585
  // Cache and remove `srcset` if present and we’re going to be doing `sizes`/`picture` polyfilling to it.
507
- if( picImg.srcset && ( elemType === "PICTURE" || picImg.getAttribute( "sizes" ) ) ){
586
+ if ( picImg.srcset && ( elemType === "PICTURE" || picImg.getAttribute( "sizes" ) ) ) {
508
587
  pf.dodgeSrcset( picImg );
509
588
  }
510
589
 
@@ -515,7 +594,7 @@ window.matchMedia || (window.matchMedia = function() {
515
594
  // No sources matched, so we’re down to processing the inner `img` as a source.
516
595
  candidates = pf.processSourceSet( picImg );
517
596
 
518
- if( picImg.srcset === undefined || ( picImg.getAttribute( "sizes" ) && picImg[ pf.ns ].srcset ) ) {
597
+ if ( picImg.srcset === undefined || picImg[ pf.ns ].srcset ) {
519
598
  // Either `srcset` is completely unsupported, or we need to polyfill `sizes` functionality.
520
599
  pf.applyBestCandidate( candidates, picImg );
521
600
  } // Else, resolution-only `srcset` is supported natively.
@@ -534,22 +613,26 @@ window.matchMedia || (window.matchMedia = function() {
534
613
  */
535
614
  function runPicturefill() {
536
615
  picturefill();
537
- var intervalId = setInterval( function(){
616
+ var intervalId = setInterval( function() {
538
617
  // When the document has finished loading, stop checking for new images
539
618
  // https://github.com/ded/domready/blob/master/ready.js#L15
540
- w.picturefill();
619
+ picturefill();
541
620
  if ( /^loaded|^i|^c/.test( doc.readyState ) ) {
542
621
  clearInterval( intervalId );
543
622
  return;
544
623
  }
545
624
  }, 250 );
546
- if( w.addEventListener ){
625
+ if ( w.addEventListener ) {
547
626
  var resizeThrottle;
548
627
  w.addEventListener( "resize", function() {
549
- w.clearTimeout( resizeThrottle );
550
- resizeThrottle = w.setTimeout( function(){
551
- picturefill({ reevaluate: true });
552
- }, 60 );
628
+ if (!w._picturefillWorking) {
629
+ w._picturefillWorking = true;
630
+ w.clearTimeout( resizeThrottle );
631
+ resizeThrottle = w.setTimeout( function() {
632
+ picturefill({ reevaluate: true });
633
+ w._picturefillWorking = false;
634
+ }, 60 );
635
+ }
553
636
  }, false );
554
637
  }
555
638
  }
@@ -560,15 +643,13 @@ window.matchMedia || (window.matchMedia = function() {
560
643
  picturefill._ = pf;
561
644
 
562
645
  /* expose picturefill */
563
- if ( typeof module === "object" && typeof module.exports === "object" ){
646
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
564
647
  // CommonJS, just export
565
648
  module.exports = picturefill;
566
- }
567
- else if( typeof define === "object" && define.amd ){
649
+ } else if ( typeof define === "function" && define.amd ){
568
650
  // AMD support
569
- define( function(){ return picturefill; } );
570
- }
571
- else if( typeof w === "object" ){
651
+ define( function() { return picturefill; } );
652
+ } else if ( typeof w === "object" ) {
572
653
  // If no AMD and we are in the browser, attach to window
573
654
  w.picturefill = picturefill;
574
655
  }