webshims-rails 1.14.6 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +145 -139
  4. data/vendor/assets/javascripts/webshims/shims/canvas-blob.js +97 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +13 -15
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +29 -28
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2 -1
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +22 -10
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +22 -10
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +28 -43
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +41 -44
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2 -1
  13. data/vendor/assets/javascripts/webshims/shims/combos/2.js +40 -42
  14. data/vendor/assets/javascripts/webshims/shims/combos/21.js +98 -71
  15. data/vendor/assets/javascripts/webshims/shims/combos/22.js +9 -9
  16. data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -1
  17. data/vendor/assets/javascripts/webshims/shims/combos/25.js +141 -51
  18. data/vendor/assets/javascripts/webshims/shims/combos/27.js +66 -12
  19. data/vendor/assets/javascripts/webshims/shims/combos/28.js +1 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/3.js +27 -41
  21. data/vendor/assets/javascripts/webshims/shims/combos/30.js +27 -41
  22. data/vendor/assets/javascripts/webshims/shims/combos/31.js +27 -41
  23. data/vendor/assets/javascripts/webshims/shims/combos/34.js +36 -36
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +27 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +2 -1
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +40 -42
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +40 -42
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +29 -28
  30. data/vendor/assets/javascripts/webshims/shims/combos/98.js +4 -2
  31. data/vendor/assets/javascripts/webshims/shims/combos/99.js +4 -2
  32. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +27 -27
  33. data/vendor/assets/javascripts/webshims/shims/es6.js +23 -29
  34. data/vendor/assets/javascripts/webshims/shims/{filereader.js → filereader-xhr.js} +66 -12
  35. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -14
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2 -1
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1 -2
  38. data/vendor/assets/javascripts/webshims/shims/form-validation.js +18 -5
  39. data/vendor/assets/javascripts/webshims/shims/form-validators.js +15 -14
  40. data/vendor/assets/javascripts/webshims/shims/geolocation.js +41 -50
  41. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +4 -4
  42. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +2 -1
  43. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +4 -2
  44. data/vendor/assets/javascripts/webshims/shims/mediacapture-picker.js +42 -0
  45. data/vendor/assets/javascripts/webshims/shims/mediacapture.js +159 -0
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +13 -1
  47. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +48 -12
  48. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +20 -8
  49. data/vendor/assets/javascripts/webshims/shims/{combos/26.js → moxie/js/moxie-html4.js} +2121 -1257
  50. data/vendor/assets/javascripts/webshims/shims/moxie/js/{moxie.js → moxie-swf.js} +1125 -1741
  51. data/vendor/assets/javascripts/webshims/shims/sticky.js +585 -0
  52. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +20 -0
  53. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +23 -0
  54. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +74 -34
  55. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +78 -31
  56. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +78 -31
  57. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/track-ui.js +214 -111
  59. data/vendor/assets/javascripts/webshims/shims/track.js +9 -9
  60. data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +27 -0
  61. data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +34 -37
  62. metadata +9 -8
  63. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -1262
  64. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
@@ -1,11 +1,13 @@
1
- // ES6-shim 0.8.0 (c) 2013 Paul Miller (paulmillr.com)
1
+ // ES6-shim 0.15.0 (c) 2013-2014 Paul Miller (http://paulmillr.com)
2
2
  // ES6-shim may be freely distributed under the MIT license.
3
3
  // For more details and documentation:
4
4
  // https://github.com/paulmillr/es6-shim/
5
+
5
6
  webshim.register('es6', function($, webshim, window, document, undefined){
6
7
 
7
8
  'use strict';
8
9
 
10
+
9
11
  var isCallableWithoutNew = function(func) {
10
12
  try { func(); }
11
13
  catch (e) { return false; }
@@ -99,7 +101,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
99
101
  // work properly with each other, even though we don't have full Iterator
100
102
  // support. That is, `Array.from(map.keys())` will work, but we don't
101
103
  // pretend to export a "real" Iterator interface.
102
- var $iterator$ = (typeof Symbol === 'object' && Symbol.iterator) ||
104
+ var $iterator$ = (typeof Symbol === 'function' && Symbol.iterator) ||
103
105
  '_es6shim_iterator_';
104
106
  // Firefox ships a partial implementation using the name @@iterator.
105
107
  // https://bugzilla.mozilla.org/show_bug.cgi?id=907077#c14
@@ -328,8 +330,8 @@ webshim.register('es6', function($, webshim, window, document, undefined){
328
330
  // Bits to bytes
329
331
  bytes = [];
330
332
  while (str.length) {
331
- bytes.push(parseInt(str.substring(0, 8), 2));
332
- str = str.substring(8);
333
+ bytes.push(parseInt(str.slice(0, 8), 2));
334
+ str = str.slice(8);
333
335
  }
334
336
  return bytes;
335
337
  }
@@ -351,9 +353,9 @@ webshim.register('es6', function($, webshim, window, document, undefined){
351
353
 
352
354
  // Unpack sign, exponent, fraction
353
355
  bias = (1 << (ebits - 1)) - 1;
354
- s = parseInt(str.substring(0, 1), 2) ? -1 : 1;
355
- e = parseInt(str.substring(1, 1 + ebits), 2);
356
- f = parseInt(str.substring(1 + ebits), 2);
356
+ s = parseInt(str.slice(0, 1), 2) ? -1 : 1;
357
+ e = parseInt(str.slice(1, 1 + ebits), 2);
358
+ f = parseInt(str.slice(1 + ebits), 2);
357
359
 
358
360
  // Produce number
359
361
  if (e === (1 << ebits) - 1) {
@@ -388,7 +390,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
388
390
  }());
389
391
 
390
392
  defineProperties(String, {
391
- fromCodePoint: function() {
393
+ fromCodePoint: function(_) { // length = 1
392
394
  var points = _slice.call(arguments, 0, arguments.length);
393
395
  var result = [];
394
396
  var next;
@@ -677,15 +679,17 @@ webshim.register('es6', function($, webshim, window, document, undefined){
677
679
  },
678
680
 
679
681
  fill: function(value) {
680
- var start = arguments[1], end = arguments[2]; // fill.length===1
682
+ var start = arguments.length > 1 ? arguments[1] : undefined;
683
+ var end = arguments.length > 2 ? arguments[2] : undefined;
681
684
  var O = ES.ToObject(this);
682
685
  var len = ES.ToLength(O.length);
683
- start = ES.ToInteger(start===undefined ? 0 : start);
684
- end = ES.ToInteger(end===undefined ? len : end);
686
+ start = ES.ToInteger(start === undefined ? 0 : start);
687
+ end = ES.ToInteger(end === undefined ? len : end);
685
688
 
686
689
  var relativeStart = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);
690
+ var relativeEnd = end < 0 ? len + end : end;
687
691
 
688
- for (var i = relativeStart; i < len && i < end; ++i) {
692
+ for (var i = relativeStart; i < len && i < relativeEnd; ++i) {
689
693
  O[i] = value;
690
694
  }
691
695
  return O;
@@ -755,9 +759,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
755
759
  },
756
760
 
757
761
  isInteger: function(value) {
758
- return typeof value === 'number' &&
759
- !Number.isNaN(value) &&
760
- Number.isFinite(value) &&
762
+ return Number.isFinite(value) &&
761
763
  ES.ToInteger(value) === value;
762
764
  },
763
765
 
@@ -813,20 +815,13 @@ webshim.register('es6', function($, webshim, window, document, undefined){
813
815
  throw new TypeError('target must be an object');
814
816
  }
815
817
  return Array.prototype.reduce.call(arguments, function(target, source) {
816
- if (!ES.TypeIsObject(source)) {
817
- throw new TypeError('source must be an object');
818
- }
819
- return Object.keys(source).reduce(function(target, key) {
818
+ return Object.keys(Object(source)).reduce(function(target, key) {
820
819
  target[key] = source[key];
821
820
  return target;
822
821
  }, target);
823
822
  });
824
823
  },
825
824
 
826
- getOwnPropertyKeys: function(subject) {
827
- return Object.keys(subject);
828
- },
829
-
830
825
  is: function(a, b) {
831
826
  return ES.SameValue(a, b);
832
827
  },
@@ -955,7 +950,6 @@ webshim.register('es6', function($, webshim, window, document, undefined){
955
950
  clz32: function(value) {
956
951
  // See https://bugs.ecmascript.org/show_bug.cgi?id=2465
957
952
  value = Number(value);
958
- if (Number.isNaN(value)) return NaN;
959
953
  var number = ES.ToUint32(value);
960
954
  if (number === 0) {
961
955
  return 32;
@@ -1064,6 +1058,8 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1064
1058
 
1065
1059
  imul: function(x, y) {
1066
1060
  // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
1061
+ x = ES.ToUint32(x);
1062
+ y = ES.ToUint32(y);
1067
1063
  var ah = (x >>> 16) & 0xffff;
1068
1064
  var al = x & 0xffff;
1069
1065
  var bh = (y >>> 16) & 0xffff;
@@ -1523,7 +1519,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1523
1519
  };
1524
1520
  addIterator(MapIterator.prototype);
1525
1521
 
1526
- function Map() {
1522
+ function Map(iterable) {
1527
1523
  var map = this;
1528
1524
  map = emulateES6construct(map);
1529
1525
  if (!map._es6map) {
@@ -1541,7 +1537,6 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1541
1537
  });
1542
1538
 
1543
1539
  // Optionally initialize map from iterable
1544
- var iterable = arguments[0];
1545
1540
  if (iterable !== undefined && iterable !== null) {
1546
1541
  var it = ES.GetIterator(iterable);
1547
1542
  var adder = map.set;
@@ -1709,7 +1704,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1709
1704
  // Sets containing only string or numeric keys, we use an object
1710
1705
  // as backing storage and lazily create a full Map only when
1711
1706
  // required.
1712
- var SetShim = function Set() {
1707
+ var SetShim = function Set(iterable) {
1713
1708
  var set = this;
1714
1709
  set = emulateES6construct(set);
1715
1710
  if (!set._es6set) {
@@ -1722,7 +1717,6 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1722
1717
  });
1723
1718
 
1724
1719
  // Optionally initialize map from iterable
1725
- var iterable = arguments[0];
1726
1720
  if (iterable !== undefined && iterable !== null) {
1727
1721
  var it = ES.GetIterator(iterable);
1728
1722
  var adder = set.add;
@@ -1754,7 +1748,7 @@ webshim.register('es6', function($, webshim, window, document, undefined){
1754
1748
  Object.keys(set._storage).forEach(function(k) {
1755
1749
  // fast check for leading '$'
1756
1750
  if (k.charCodeAt(0) === 36) {
1757
- k = k.substring(1);
1751
+ k = k.slice(1);
1758
1752
  } else {
1759
1753
  k = +k;
1760
1754
  }
@@ -1,8 +1,8 @@
1
- webshim.register('filereader', function($, webshim, window, document, undefined, featureOptions){
1
+ webshim.register('filereader-xhr', function($, webshim, window, document, undefined, featureOptions){
2
2
  "use strict";
3
3
  var mOxie, moxie, hasXDomain;
4
- var FormData = $.noop;
5
- var sel = 'input[type="file"].ws-filereader';
4
+ var sel = 'input[type="file"].ws-filereader, input[type="file"].ws-capture';
5
+ var hasFlash = swfmini.hasFlashPlayerVersion('10.3');
6
6
  var loadMoxie = function (){
7
7
  webshim.loader.loadList(['moxie']);
8
8
  };
@@ -114,7 +114,7 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
114
114
  }
115
115
  );
116
116
  var shimMoxiePath = webshim.cfg.basePath+'moxie/';
117
- var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf/moxie.xap on your server an configure filereader options: "swfpath"/"xappath"';
117
+ var crossXMLMessage = 'You nedd a crossdomain.xml to get all "filereader" / "XHR2" / "CORS" features to work. Or host moxie.swf on your server an configure filereader options: "swfpath"';
118
118
  var testMoxie = function(options){
119
119
  return (options.wsType == 'moxie' || (options.data && options.data instanceof mOxie.FormData) || (options.crossDomain && $.support.cors !== false && hasXDomain != 'no' && !noxhr.test(options.dataType || '')));
120
120
  };
@@ -297,6 +297,10 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
297
297
  }
298
298
  };
299
299
 
300
+ webshim.loader.addModule('moxie', {
301
+ src: 'moxie/js/moxie-'+ (hasFlash ? 'swf' : 'html4')
302
+ });
303
+
300
304
  if(!featureOptions.progress){
301
305
  featureOptions.progress = 'onprogress';
302
306
  }
@@ -308,9 +312,6 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
308
312
  if(!featureOptions.swfpath){
309
313
  featureOptions.swfpath = shimMoxiePath+'flash/Moxie.min.swf';
310
314
  }
311
- if(!featureOptions.xappath){
312
- featureOptions.xappath = shimMoxiePath+'silverlight/Moxie.min.xap';
313
- }
314
315
 
315
316
  if($.support.cors !== false || !window.XDomainRequest){
316
317
  delete transports.xdomain;
@@ -337,8 +338,8 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
337
338
  writeable: false,
338
339
  get: function(){
339
340
  if(this.type != 'file'){return null;}
340
- if(!$(this).hasClass('ws-filereader')){
341
- webshim.info("please add the 'ws-filereader' class to your input[type='file'] to implement files-property");
341
+ if(!$(this).is('.ws-filereader, .ws-capture')){
342
+ webshim.info("please add the 'ws-filereader'/'ws-capture' class to your input[type='file'] to implement files-property");
342
343
  }
343
344
  return webshim.data(this, 'fileList') || [];
344
345
  }
@@ -360,11 +361,66 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
360
361
  });
361
362
 
362
363
  webshim.onNodeNamesPropertyModify('input', 'value', function(value, boolVal, type){
363
- if(value === '' && this.type == 'file' && $(this).hasClass('ws-filereader')){
364
+ if(value === '' && this.type == 'file' && $(this).is('.ws-filereader, .ws-capture')){
364
365
  webshim.data(this, 'fileList', []);
365
366
  }
366
367
  });
367
368
 
369
+ if(!document.createElement('canvas').toBlob){
370
+
371
+ webshim.defineNodeNameProperty('canvas', 'toBlob', {
372
+ prop: {
373
+ value: function(cb, type, qualitiy){
374
+ var dataURL;
375
+ var $canvas = $(this);
376
+ if(!type){
377
+ type = 'image/jpeg';
378
+ }
379
+ if(type == 'image/jpeg' && !qualitiy){
380
+ qualitiy = 0.8;
381
+ }
382
+ loadMoxie();
383
+ setTimeout(function(){
384
+ dataURL = $canvas.callProp('getAsDataURL', [type, qualitiy]);
385
+ webshim.ready('moxie', function(){
386
+ var img = new mOxie.Image();
387
+
388
+ img.onload = function() {
389
+ var blob = img.getAsBlob();
390
+ webshim.defineProperty(blob, '_wsDataURL', {
391
+ value: dataURL,
392
+ enumerable: false
393
+ });
394
+ cb(blob);
395
+ };
396
+ img.load(dataURL);
397
+ });
398
+ }, 9);
399
+ }
400
+ }
401
+ });
402
+
403
+ webshim.ready('url', function(){
404
+ var _nativeCreateObjectURL = URL.createObjectURL;
405
+ var _nativeRevokeObjectURL = URL.revokeObjectURL;
406
+
407
+ URL.createObjectURL = function(obj){
408
+ var url = obj;
409
+ if(obj._wsimgDataURL) {
410
+ url = obj._wsimgDataURL;
411
+ } else if(_nativeCreateObjectURL){
412
+ return _nativeCreateObjectURL.apply(this, arguments);
413
+ }
414
+ return url;
415
+ };
416
+
417
+ URL.revokeObjectURL = function(url){
418
+ if (_nativeRevokeObjectURL){
419
+ return _nativeRevokeObjectURL.apply(this, arguments);
420
+ }
421
+ };
422
+ });
423
+ }
368
424
 
369
425
  window.FileReader = notReadyYet;
370
426
  window.FormData = notReadyYet;
@@ -374,7 +430,6 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
374
430
  mOxie = window.mOxie;
375
431
 
376
432
  mOxie.Env.swf_url = featureOptions.swfpath;
377
- mOxie.Env.xap_url = featureOptions.xappath;
378
433
 
379
434
  window.FileReader = mOxie.FileReader;
380
435
 
@@ -413,7 +468,6 @@ webshim.register('filereader', function($, webshim, window, document, undefined,
413
468
 
414
469
  return moxieData;
415
470
  };
416
- FormData = window.FormData;
417
471
 
418
472
  createFilePicker = _createFilePicker;
419
473
  transports.moxie = createMoxieTransport;
@@ -301,20 +301,6 @@ webshims.register('form-core', function($, webshims, window, document, undefined
301
301
  }
302
302
  });
303
303
 
304
- $(function(){
305
- var fileReaderReady = ('FileReader' in window && 'FormData' in window);
306
- if(!fileReaderReady){
307
- webshims.addReady(function(context){
308
- if(!fileReaderReady && !modules.filereader.loaded && !modules.moxie.loaded){
309
- if(context.querySelector('input.ws-filereader')){
310
- webshims.reTest(['filereader', 'moxie']);
311
- fileReaderReady = true;
312
- }
313
- }
314
- });
315
- }
316
- });
317
-
318
304
  if(options.addValidators && options.fastValidators){
319
305
  webshims.reTest(['form-validators', 'form-validation']);
320
306
  }
@@ -1194,7 +1194,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1194
1194
 
1195
1195
  (function(){
1196
1196
  var picker = {};
1197
- var assumeVirtualKeyBoard = (window.Modernizr && (Modernizr.touchevents || Modernizr.touch)) || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
1197
+ var modern = window.Modernizr;
1198
+ var assumeVirtualKeyBoard = (modern && (modern.touchevents || modern.touch)) || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
1198
1199
  webshims.inlinePopover = {
1199
1200
  _create: function(){
1200
1201
  this.element = $('<div class="ws-inline-picker"><div class="ws-po-box" /></div>').data('wspopover', this);
@@ -97,7 +97,6 @@ var isPlaceholderOptionSelected = function(select){
97
97
  };
98
98
 
99
99
  var emptyJ = $([]);
100
- //TODO: cache + perftest
101
100
  var getGroupElements = function(elem){
102
101
  elem = $(elem);
103
102
  var name, form;
@@ -167,7 +166,7 @@ var validityRules = {
167
166
  $.each({tooShort: ['minLength', -1], tooLong: ['maxLength', 1]}, function(name, props){
168
167
  validityRules[name] = function(input, val, cache){
169
168
  //defaultValue is not the same as dirty flag, but very similiar
170
- if(cache.nodeName == 'select' || input.prop('defaultValue') == val){return false;}
169
+ if(!val || cache.nodeName == 'select' || input.prop('defaultValue') == val){return false;}
171
170
 
172
171
  cacheType(cache, input[0]);
173
172
 
@@ -32,7 +32,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
32
32
  var nonFormFilter = function(){
33
33
  return !$.prop(this, 'form');
34
34
  };
35
- var getGroupElements = webshims.modules["form-core"].getGroupElements || function(elem){
35
+ var modules = webshims.modules;
36
+ var getGroupElements = modules["form-core"].getGroupElements || function(elem){
36
37
  elem = $(elem);
37
38
  var name;
38
39
  var form;
@@ -207,8 +208,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
207
208
  iVal.fieldWrapper = ':not(span):not(label):not(em):not(strong):not(p):not(.ws-custom-file)';
208
209
  }
209
210
 
210
- if(!webshims.modules["form-core"].getGroupElements){
211
- webshims.modules["form-core"].getGroupElements = getGroupElements;
211
+ if(!modules["form-core"].getGroupElements){
212
+ modules["form-core"].getGroupElements = getGroupElements;
212
213
  }
213
214
 
214
215
  $(document.body || 'html')
@@ -364,7 +365,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
364
365
  this._shadowAdded = true;
365
366
  }
366
367
 
367
- element = $(element || this.options.prepareFor).getNativeElement() ;
368
+ element = $(element || this.options.prepareFor).getNativeElement();
368
369
 
369
370
  var that = this;
370
371
  var closeOnOutSide = function(e){
@@ -971,7 +972,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
971
972
 
972
973
 
973
974
  $.data(this, 'wsCustomFile', {showSelected: showSelected});
974
- $('button', $module).attr('tabindex', '-1');
975
+ $('button:not(.ws-capture-button)', $module).attr('tabindex', '-1');
975
976
 
976
977
  $file
977
978
  .on('change.webshim', showSelected)
@@ -993,6 +994,18 @@ webshims.register('form-validation', function($, webshims, window, document, und
993
994
 
994
995
  }
995
996
 
997
+ $(function(){
998
+ var fileReaderReady = ('FileReader' in window && 'FormData' in window);
999
+ if(!fileReaderReady){
1000
+ webshims.addReady(function(context){
1001
+ if(!fileReaderReady && !modules.filereader.loaded && context.querySelector('input.ws-filereader')){
1002
+ webshims.reTest(['filereader']);
1003
+ fileReaderReady = true;
1004
+ }
1005
+ });
1006
+ }
1007
+ });
1008
+
996
1009
  webshims.addReady(function(context, contextElem){
997
1010
  $(context.querySelectorAll('.ws-custom-file')).add($(contextElem).filter('.ws-custom-file')).each(customFile);
998
1011
  });
@@ -261,8 +261,8 @@ webshims.ready('form-validation', function(){
261
261
  if(!val || !pattern){return;}
262
262
  return !(new RegExp('(' + pattern + ')', 'i').test(val));
263
263
  }, 'This format is not allowed here.');
264
-
265
- if(!('tooShort' in ($('<input />').prop('validity') || {}))){
264
+
265
+ if($('<input />').prop('minLength') === undefined || !('tooShort' in ($('<input />').prop('validity') || {}))){
266
266
  addCustomValidityRule('tooShort', function(elem, val){
267
267
  var minlength;
268
268
  if(!val || val == elem.defaultValue || !(minlength = elem.getAttribute('minlength'))){return;}
@@ -281,9 +281,12 @@ webshims.ready('form-validation', function(){
281
281
  data.grouprequired.checkboxes
282
282
  .off('click.groupRequired')
283
283
  .on('click.groupRequired', function(){
284
- webshims.refreshCustomValidityRules(elem);
284
+ if((data.customMismatchedRule == 'grouprequired') == this.checked){
285
+ $(elem).trigger('updatevalidation.webshims');
286
+ }
285
287
  })
286
288
  ;
289
+
287
290
  data.grouprequired.checkboxes.not(elem).removeData('grouprequired');
288
291
  }
289
292
 
@@ -332,14 +335,14 @@ webshims.ready('form-validation', function(){
332
335
  addCustomValidityRule('dependent', function(elem, val, data){
333
336
  data = data.dependentValidation;
334
337
  if( !data ){return;}
335
- var specialVal;
336
338
  var depFn = function(e){
337
339
  var val = $.prop(data.masterElement, data["from-prop"]);
338
- if(specialVal){
339
- val = $.inArray(val, specialVal) !== -1;
340
- }
341
- if(data.toggle){
340
+ if(data.specialVal){
341
+ val = $.inArray(val, data.specialVal) !== -1;
342
+ } if(data.toggle){
342
343
  val = !val;
344
+ } else {
345
+ val = !!val;
343
346
  }
344
347
  $.prop( elem, data.prop, val);
345
348
  if(iValClasses && e){
@@ -370,14 +373,13 @@ webshims.ready('form-validation', function(){
370
373
  }
371
374
 
372
375
  if(data["from-prop"].indexOf('value:') === 0){
373
- specialVal = data["from-prop"].replace('value:', '').split('||');
376
+ data.specialVal = data["from-prop"].replace('value:', '').split('||');
374
377
  data["from-prop"] = 'value';
375
-
376
378
  }
377
-
379
+
378
380
  data = $.data(elem, 'dependentValidation', $.extend({_init: true}, dependentDefaults, data));
379
381
 
380
- if(data.prop !== "value" || specialVal){
382
+ if(data.prop !== "value" || data.specialVal){
381
383
  $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).on('change', depFn);
382
384
  } else {
383
385
  $(data.masterElement).on('change', function(){
@@ -393,7 +395,7 @@ webshims.ready('form-validation', function(){
393
395
  }
394
396
  }
395
397
 
396
- if(data.prop == "value" && !specialVal){
398
+ if(data.prop == "value" && !data.specialVal){
397
399
  return ($.prop(data.masterElement, 'value') != val);
398
400
  } else {
399
401
  depFn();
@@ -412,7 +414,6 @@ webshims.ready('form-validation', function(){
412
414
  if(!val || !data.ajaxvalidate){return;}
413
415
  var opts;
414
416
  if(!data.remoteValidate){
415
- webshims.loader.loadList(['jajax']);
416
417
  if(typeof data.ajaxvalidate == 'string'){
417
418
  data.ajaxvalidate = {url: data.ajaxvalidate, depends: $([])};
418
419
  } else {