webshims-rails 1.11.2 → 1.11.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +6 -14
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +3 -4
  4. data/vendor/assets/javascripts/webshims/shims/combos/1.js +20 -8
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +43 -2
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +3 -0
  7. data/vendor/assets/javascripts/webshims/shims/combos/12.js +12 -4
  8. data/vendor/assets/javascripts/webshims/shims/combos/13.js +12 -4
  9. data/vendor/assets/javascripts/webshims/shims/combos/14.js +40 -2
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +48 -6
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +60 -10
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +3 -0
  13. data/vendor/assets/javascripts/webshims/shims/combos/18.js +3 -0
  14. data/vendor/assets/javascripts/webshims/shims/combos/19.js +115 -17
  15. data/vendor/assets/javascripts/webshims/shims/combos/2.js +60 -10
  16. data/vendor/assets/javascripts/webshims/shims/combos/20.js +115 -17
  17. data/vendor/assets/javascripts/webshims/shims/combos/21.js +63 -11
  18. data/vendor/assets/javascripts/webshims/shims/combos/23.js +12 -4
  19. data/vendor/assets/javascripts/webshims/shims/combos/24.js +3 -5
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +115 -17
  21. data/vendor/assets/javascripts/webshims/shims/combos/26.js +40 -2
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +48 -6
  23. data/vendor/assets/javascripts/webshims/shims/combos/30.js +48 -6
  24. data/vendor/assets/javascripts/webshims/shims/combos/31.js +48 -6
  25. data/vendor/assets/javascripts/webshims/shims/combos/4.js +40 -2
  26. data/vendor/assets/javascripts/webshims/shims/combos/5.js +3 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/6.js +3 -0
  28. data/vendor/assets/javascripts/webshims/shims/combos/7.js +60 -10
  29. data/vendor/assets/javascripts/webshims/shims/combos/8.js +60 -10
  30. data/vendor/assets/javascripts/webshims/shims/combos/9.js +43 -2
  31. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +40 -2
  32. data/vendor/assets/javascripts/webshims/shims/form-core.js +8 -4
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +3 -0
  34. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +3 -5
  35. data/vendor/assets/javascripts/webshims/shims/form-validation.js +137 -0
  36. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +12 -4
  37. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +63 -11
  38. metadata +6 -6
@@ -375,15 +375,6 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
375
375
  lastDuration: 0
376
376
  }, getProps, getSetProps);
377
377
 
378
- var idRep = /^jarisplayer-/;
379
- var getSwfDataFromID = function(id){
380
-
381
- var elem = document.getElementById(id.replace(idRep, ''));
382
- if(!elem){return;}
383
- var data = webshims.data(elem, 'mediaelement');
384
- return data.isActive == 'third' ? data : null;
385
- };
386
-
387
378
 
388
379
  var getSwfDataFromElem = function(elem){
389
380
  try {
@@ -976,6 +967,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
976
967
  box = data.shadowElem;
977
968
  resetSwfProps(data);
978
969
  } else {
970
+ $(document.getElementById('wrapper-'+ elemId )).remove();
979
971
  box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
980
972
  .css({
981
973
  position: 'relative',
@@ -1058,8 +1050,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1058
1050
  ;
1059
1051
  }
1060
1052
 
1061
-
1062
- if(!mediaelement.jarisEvent[data.id] || mediaelement.jarisEvent[data.id].elem != elem){
1053
+ if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
1054
+ webshims.error('something went wrong');
1055
+ return;
1056
+ } else if(!mediaelement.jarisEvent[data.id]){
1057
+
1063
1058
  mediaelement.jarisEvent[data.id] = function(jaris){
1064
1059
 
1065
1060
  if(jaris.type == 'ready'){
@@ -1265,6 +1260,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1265
1260
  descs[fn] = {
1266
1261
  value: function(){
1267
1262
  var data = getSwfDataFromElem(this);
1263
+
1268
1264
  if(data){
1269
1265
  if(data.stopPlayPause){
1270
1266
  clearTimeout(data.stopPlayPause);
@@ -1287,6 +1283,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1287
1283
 
1288
1284
  webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
1289
1285
  var data = getSwfDataFromElem(this);
1286
+
1290
1287
  $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
1291
1288
 
1292
1289
  if(data){
@@ -1420,6 +1417,61 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
1420
1417
  } else if(!('media' in document.createElement('source'))){
1421
1418
  webshims.reflectProperties('source', ['media']);
1422
1419
  }
1420
+ if(options.experimentallyMimetypeCheck){
1421
+ (function(){
1422
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
1423
+ var getMimeType = function(){
1424
+ var done;
1425
+ var unknown = 'media/unknown please provide mime type';
1426
+ var media = $(this);
1427
+ var xhrs = [];
1428
+ media
1429
+ .not('.ws-after-check')
1430
+ .find('source')
1431
+ [ADDBACK]()
1432
+ .filter('[data-wsrecheckmimetype]:not([type])')
1433
+ .each(function(){
1434
+ var source = $(this).removeAttr('data-wsrecheckmimetype');
1435
+ var error = function(){
1436
+ source.attr('data-type', unknown);
1437
+ };
1438
+ try {
1439
+ xhrs.push(
1440
+ $.ajax({
1441
+ type: 'head',
1442
+ url: $.attr(this, 'src'),
1443
+ success: function(content, status, xhr){
1444
+ var mime = xhr.getResponseHeader('Content-Type');
1445
+ if(mime){
1446
+ done = true;
1447
+ }
1448
+ source.attr('data-type', mime || unknown);
1449
+ },
1450
+ error: error
1451
+ })
1452
+ )
1453
+ ;
1454
+ } catch(er){
1455
+ error();
1456
+ }
1457
+ })
1458
+ ;
1459
+ if(xhrs.length){
1460
+ media.addClass('ws-after-check');
1461
+ $.when.apply($, xhrs).always(function(){
1462
+ media.mediaLoad();
1463
+ setTimeout(function(){
1464
+ media.removeClass('ws-after-check');
1465
+ }, 9);
1466
+ });
1467
+ }
1468
+ };
1469
+ $('audio.media-error, video.media-error').each(getMimeType);
1470
+ $(document).on('mediaerror', function(e){
1471
+ getMimeType.call(e.target);
1472
+ });
1473
+ })();
1474
+ }
1423
1475
 
1424
1476
  });
1425
1477
  webshims.register('track', function($, webshims, window, document, undefined){
@@ -588,7 +588,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
588
588
  src.server = tmp;
589
589
  }
590
590
 
591
- tmp = elem.attr('type');
591
+ tmp = elem.attr('type') || elem.attr('data-type');
592
592
  if(tmp){
593
593
  src.type = tmp;
594
594
  src.container = $.trim(tmp.split(';')[0]);
@@ -612,6 +612,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
612
612
  }
613
613
  }
614
614
  }
615
+
616
+ if(!src.container){
617
+ $(elem).attr('data-wsrecheckmimetype', '');
618
+ }
619
+
615
620
  tmp = elem.attr('media');
616
621
  if(tmp){
617
622
  src.media = tmp;
@@ -845,15 +850,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
845
850
 
846
851
  var handleThird = (function(){
847
852
  var requested;
853
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
848
854
  return function( mediaElem, ret, data ){
855
+ //readd to ready
849
856
 
850
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
851
- if(mediaelement.createSWF){
857
+
858
+ webshims.ready(readyType, function(){
859
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
852
860
  mediaelement.createSWF( mediaElem, ret, data );
853
861
  } else if(!requested) {
854
862
  requested = true;
855
863
  loadThird();
856
- //readd to ready
864
+
857
865
  handleThird( mediaElem, ret, data );
858
866
  }
859
867
  });
@@ -1322,6 +1322,7 @@ try {
1322
1322
  }
1323
1323
 
1324
1324
  (function(){
1325
+ if(options.noPlaceholderPolyfill){return;}
1325
1326
  var bustedPlaceholder;
1326
1327
  Modernizr.textareaPlaceholder = !!('placeholder' in $('<textarea />')[0]);
1327
1328
  if(Modernizr.input.placeholder && options.overridePlaceholder){
@@ -1504,7 +1505,6 @@ try {
1504
1505
  create: function(elem){
1505
1506
  var data = $.data(elem, 'placeHolder');
1506
1507
  var form;
1507
- var responsiveElem;
1508
1508
  if(data){return data;}
1509
1509
  data = $.data(elem, 'placeHolder', {});
1510
1510
 
@@ -1524,7 +1524,6 @@ try {
1524
1524
  if(elem.type == 'password' || isOver){
1525
1525
  data.text = createPlaceholder(elem);
1526
1526
  if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
1527
- responsiveElem = true;
1528
1527
  data.box = data.text;
1529
1528
  } else {
1530
1529
  data.box = $(elem)
@@ -1764,7 +1763,6 @@ try {
1764
1763
 
1765
1764
  //pro forma
1766
1765
  ,color: 1
1767
- //,range: 1
1768
1766
  },
1769
1767
  observe = function(input){
1770
1768
  var timer,
@@ -1786,7 +1784,7 @@ try {
1786
1784
  extraTimer = setTimeout(trigger, 9);
1787
1785
  },
1788
1786
  unbind = function(){
1789
- input.unbind('focusout', unbind).unbind('keyup keypress keydown paste cut', extraTest).unbind('input change updateInput', trigger);
1787
+ input.unbind('focusout', unbind).unbind('keyup keypress keydown paste cut', extraTest).unbind('input change updateInput triggerinput', trigger);
1790
1788
  clearInterval(timer);
1791
1789
  setTimeout(function(){
1792
1790
  trigger();
@@ -1802,7 +1800,7 @@ try {
1802
1800
  input.on({
1803
1801
  'keyup keypress keydown paste cut': extraTest,
1804
1802
  focusout: unbind,
1805
- 'input updateInput change': trigger
1803
+ 'input updateInput change triggerinput': trigger
1806
1804
  });
1807
1805
  }
1808
1806
  ;
@@ -1258,6 +1258,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1258
1258
  "use strict";
1259
1259
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
1260
1260
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
1261
+ var has = Object.prototype.hasOwnProperty;
1261
1262
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
1262
1263
 
1263
1264
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -1330,6 +1331,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1330
1331
  //proxying attribute
1331
1332
  var olds = {};
1332
1333
  var havePolyfill = {};
1334
+ var hasPolyfillMethod = {};
1333
1335
  var extendedProps = {};
1334
1336
  var extendQ = {};
1335
1337
  var modifyProps = {};
@@ -1435,6 +1437,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1435
1437
  };
1436
1438
  });
1437
1439
 
1440
+ //add support for $('video').trigger('play') in case extendNative is set to false
1441
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
1442
+ (function(oldTrigger){
1443
+ $.event.trigger = function(event, data, elem, onlyHandlers){
1444
+
1445
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
1446
+ return oldTrigger.apply(this, arguments);
1447
+ }
1448
+ var ret, isOrig, origName;
1449
+ var origFn = elem[event];
1450
+ var polyfilledFn = $.prop(elem, event);
1451
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
1452
+ if(changeFn){
1453
+ origName = '__ws'+event;
1454
+ isOrig = (event in elem) && has.call(elem, event);
1455
+ elem[event] = polyfilledFn;
1456
+ elem[origName] = origFn;
1457
+ }
1458
+
1459
+ ret = oldTrigger.apply(this, arguments);
1460
+ if (changeFn) {
1461
+ if(isOrig){
1462
+ elem[event] = origFn;
1463
+ } else {
1464
+ delete elem[event];
1465
+ }
1466
+ delete elem[origName];
1467
+ }
1468
+
1469
+ return ret;
1470
+ };
1471
+ })($.event.trigger);
1472
+ }
1438
1473
 
1439
1474
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
1440
1475
  olds[type] = $[type];
@@ -1519,6 +1554,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1519
1554
  }
1520
1555
  var oldDesc = extendedProps[nodeName][prop][type];
1521
1556
  var getSup = function(propType, descriptor, oDesc){
1557
+ var origProp;
1522
1558
  if(descriptor && descriptor[propType]){
1523
1559
  return descriptor[propType];
1524
1560
  }
@@ -1535,8 +1571,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1535
1571
  };
1536
1572
  }
1537
1573
  if(type == 'prop' && propType == 'value' && desc.value.apply){
1574
+ origProp = '__ws'+prop;
1575
+ hasPolyfillMethod[prop] = true;
1538
1576
  return function(value){
1539
- var sup = olds[type](this, prop);
1577
+ var sup = this[origProp] || olds[type](this, prop);
1540
1578
  if(sup && sup.apply){
1541
1579
  sup = sup.apply(this, arguments);
1542
1580
  }
@@ -1574,7 +1612,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1574
1612
 
1575
1613
  var extendNativeValue = (function(){
1576
1614
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
1577
- var has = Object.prototype.hasOwnProperty;
1615
+
1578
1616
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
1579
1617
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
1580
1618
  return function(nodeName, prop, desc){
@@ -2882,7 +2920,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2882
2920
  src.server = tmp;
2883
2921
  }
2884
2922
 
2885
- tmp = elem.attr('type');
2923
+ tmp = elem.attr('type') || elem.attr('data-type');
2886
2924
  if(tmp){
2887
2925
  src.type = tmp;
2888
2926
  src.container = $.trim(tmp.split(';')[0]);
@@ -2906,6 +2944,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2906
2944
  }
2907
2945
  }
2908
2946
  }
2947
+
2948
+ if(!src.container){
2949
+ $(elem).attr('data-wsrecheckmimetype', '');
2950
+ }
2951
+
2909
2952
  tmp = elem.attr('media');
2910
2953
  if(tmp){
2911
2954
  src.media = tmp;
@@ -3139,15 +3182,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3139
3182
 
3140
3183
  var handleThird = (function(){
3141
3184
  var requested;
3185
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
3142
3186
  return function( mediaElem, ret, data ){
3187
+ //readd to ready
3188
+
3143
3189
 
3144
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
3145
- if(mediaelement.createSWF){
3190
+ webshims.ready(readyType, function(){
3191
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
3146
3192
  mediaelement.createSWF( mediaElem, ret, data );
3147
3193
  } else if(!requested) {
3148
3194
  requested = true;
3149
3195
  loadThird();
3150
- //readd to ready
3196
+
3151
3197
  handleThird( mediaElem, ret, data );
3152
3198
  }
3153
3199
  });
@@ -3488,15 +3534,6 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3488
3534
  lastDuration: 0
3489
3535
  }, getProps, getSetProps);
3490
3536
 
3491
- var idRep = /^jarisplayer-/;
3492
- var getSwfDataFromID = function(id){
3493
-
3494
- var elem = document.getElementById(id.replace(idRep, ''));
3495
- if(!elem){return;}
3496
- var data = webshims.data(elem, 'mediaelement');
3497
- return data.isActive == 'third' ? data : null;
3498
- };
3499
-
3500
3537
 
3501
3538
  var getSwfDataFromElem = function(elem){
3502
3539
  try {
@@ -4089,6 +4126,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4089
4126
  box = data.shadowElem;
4090
4127
  resetSwfProps(data);
4091
4128
  } else {
4129
+ $(document.getElementById('wrapper-'+ elemId )).remove();
4092
4130
  box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
4093
4131
  .css({
4094
4132
  position: 'relative',
@@ -4171,8 +4209,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4171
4209
  ;
4172
4210
  }
4173
4211
 
4174
-
4175
- if(!mediaelement.jarisEvent[data.id] || mediaelement.jarisEvent[data.id].elem != elem){
4212
+ if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
4213
+ webshims.error('something went wrong');
4214
+ return;
4215
+ } else if(!mediaelement.jarisEvent[data.id]){
4216
+
4176
4217
  mediaelement.jarisEvent[data.id] = function(jaris){
4177
4218
 
4178
4219
  if(jaris.type == 'ready'){
@@ -4378,6 +4419,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4378
4419
  descs[fn] = {
4379
4420
  value: function(){
4380
4421
  var data = getSwfDataFromElem(this);
4422
+
4381
4423
  if(data){
4382
4424
  if(data.stopPlayPause){
4383
4425
  clearTimeout(data.stopPlayPause);
@@ -4400,6 +4442,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4400
4442
 
4401
4443
  webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
4402
4444
  var data = getSwfDataFromElem(this);
4445
+
4403
4446
  $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
4404
4447
 
4405
4448
  if(data){
@@ -4533,5 +4576,60 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4533
4576
  } else if(!('media' in document.createElement('source'))){
4534
4577
  webshims.reflectProperties('source', ['media']);
4535
4578
  }
4579
+ if(options.experimentallyMimetypeCheck){
4580
+ (function(){
4581
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
4582
+ var getMimeType = function(){
4583
+ var done;
4584
+ var unknown = 'media/unknown please provide mime type';
4585
+ var media = $(this);
4586
+ var xhrs = [];
4587
+ media
4588
+ .not('.ws-after-check')
4589
+ .find('source')
4590
+ [ADDBACK]()
4591
+ .filter('[data-wsrecheckmimetype]:not([type])')
4592
+ .each(function(){
4593
+ var source = $(this).removeAttr('data-wsrecheckmimetype');
4594
+ var error = function(){
4595
+ source.attr('data-type', unknown);
4596
+ };
4597
+ try {
4598
+ xhrs.push(
4599
+ $.ajax({
4600
+ type: 'head',
4601
+ url: $.attr(this, 'src'),
4602
+ success: function(content, status, xhr){
4603
+ var mime = xhr.getResponseHeader('Content-Type');
4604
+ if(mime){
4605
+ done = true;
4606
+ }
4607
+ source.attr('data-type', mime || unknown);
4608
+ },
4609
+ error: error
4610
+ })
4611
+ )
4612
+ ;
4613
+ } catch(er){
4614
+ error();
4615
+ }
4616
+ })
4617
+ ;
4618
+ if(xhrs.length){
4619
+ media.addClass('ws-after-check');
4620
+ $.when.apply($, xhrs).always(function(){
4621
+ media.mediaLoad();
4622
+ setTimeout(function(){
4623
+ media.removeClass('ws-after-check');
4624
+ }, 9);
4625
+ });
4626
+ }
4627
+ };
4628
+ $('audio.media-error, video.media-error').each(getMimeType);
4629
+ $(document).on('mediaerror', function(e){
4630
+ getMimeType.call(e.target);
4631
+ });
4632
+ })();
4633
+ }
4536
4634
 
4537
4635
  });
@@ -3,6 +3,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3
3
  "use strict";
4
4
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
5
5
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
6
+ var has = Object.prototype.hasOwnProperty;
6
7
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
7
8
 
8
9
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -75,6 +76,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
75
76
  //proxying attribute
76
77
  var olds = {};
77
78
  var havePolyfill = {};
79
+ var hasPolyfillMethod = {};
78
80
  var extendedProps = {};
79
81
  var extendQ = {};
80
82
  var modifyProps = {};
@@ -180,6 +182,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
180
182
  };
181
183
  });
182
184
 
185
+ //add support for $('video').trigger('play') in case extendNative is set to false
186
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
187
+ (function(oldTrigger){
188
+ $.event.trigger = function(event, data, elem, onlyHandlers){
189
+
190
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
191
+ return oldTrigger.apply(this, arguments);
192
+ }
193
+ var ret, isOrig, origName;
194
+ var origFn = elem[event];
195
+ var polyfilledFn = $.prop(elem, event);
196
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
197
+ if(changeFn){
198
+ origName = '__ws'+event;
199
+ isOrig = (event in elem) && has.call(elem, event);
200
+ elem[event] = polyfilledFn;
201
+ elem[origName] = origFn;
202
+ }
203
+
204
+ ret = oldTrigger.apply(this, arguments);
205
+ if (changeFn) {
206
+ if(isOrig){
207
+ elem[event] = origFn;
208
+ } else {
209
+ delete elem[event];
210
+ }
211
+ delete elem[origName];
212
+ }
213
+
214
+ return ret;
215
+ };
216
+ })($.event.trigger);
217
+ }
183
218
 
184
219
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
185
220
  olds[type] = $[type];
@@ -264,6 +299,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
264
299
  }
265
300
  var oldDesc = extendedProps[nodeName][prop][type];
266
301
  var getSup = function(propType, descriptor, oDesc){
302
+ var origProp;
267
303
  if(descriptor && descriptor[propType]){
268
304
  return descriptor[propType];
269
305
  }
@@ -280,8 +316,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
280
316
  };
281
317
  }
282
318
  if(type == 'prop' && propType == 'value' && desc.value.apply){
319
+ origProp = '__ws'+prop;
320
+ hasPolyfillMethod[prop] = true;
283
321
  return function(value){
284
- var sup = olds[type](this, prop);
322
+ var sup = this[origProp] || olds[type](this, prop);
285
323
  if(sup && sup.apply){
286
324
  sup = sup.apply(this, arguments);
287
325
  }
@@ -319,7 +357,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
319
357
 
320
358
  var extendNativeValue = (function(){
321
359
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
322
- var has = Object.prototype.hasOwnProperty;
360
+
323
361
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
324
362
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
325
363
  return function(nodeName, prop, desc){
@@ -3,6 +3,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3
3
  "use strict";
4
4
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
5
5
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
6
+ var has = Object.prototype.hasOwnProperty;
6
7
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
7
8
 
8
9
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -75,6 +76,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
75
76
  //proxying attribute
76
77
  var olds = {};
77
78
  var havePolyfill = {};
79
+ var hasPolyfillMethod = {};
78
80
  var extendedProps = {};
79
81
  var extendQ = {};
80
82
  var modifyProps = {};
@@ -180,6 +182,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
180
182
  };
181
183
  });
182
184
 
185
+ //add support for $('video').trigger('play') in case extendNative is set to false
186
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
187
+ (function(oldTrigger){
188
+ $.event.trigger = function(event, data, elem, onlyHandlers){
189
+
190
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
191
+ return oldTrigger.apply(this, arguments);
192
+ }
193
+ var ret, isOrig, origName;
194
+ var origFn = elem[event];
195
+ var polyfilledFn = $.prop(elem, event);
196
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
197
+ if(changeFn){
198
+ origName = '__ws'+event;
199
+ isOrig = (event in elem) && has.call(elem, event);
200
+ elem[event] = polyfilledFn;
201
+ elem[origName] = origFn;
202
+ }
203
+
204
+ ret = oldTrigger.apply(this, arguments);
205
+ if (changeFn) {
206
+ if(isOrig){
207
+ elem[event] = origFn;
208
+ } else {
209
+ delete elem[event];
210
+ }
211
+ delete elem[origName];
212
+ }
213
+
214
+ return ret;
215
+ };
216
+ })($.event.trigger);
217
+ }
183
218
 
184
219
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
185
220
  olds[type] = $[type];
@@ -264,6 +299,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
264
299
  }
265
300
  var oldDesc = extendedProps[nodeName][prop][type];
266
301
  var getSup = function(propType, descriptor, oDesc){
302
+ var origProp;
267
303
  if(descriptor && descriptor[propType]){
268
304
  return descriptor[propType];
269
305
  }
@@ -280,8 +316,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
280
316
  };
281
317
  }
282
318
  if(type == 'prop' && propType == 'value' && desc.value.apply){
319
+ origProp = '__ws'+prop;
320
+ hasPolyfillMethod[prop] = true;
283
321
  return function(value){
284
- var sup = olds[type](this, prop);
322
+ var sup = this[origProp] || olds[type](this, prop);
285
323
  if(sup && sup.apply){
286
324
  sup = sup.apply(this, arguments);
287
325
  }
@@ -319,7 +357,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
319
357
 
320
358
  var extendNativeValue = (function(){
321
359
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
322
- var has = Object.prototype.hasOwnProperty;
360
+
323
361
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
324
362
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
325
363
  return function(nodeName, prop, desc){
@@ -1147,17 +1185,21 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1147
1185
  /*
1148
1186
  * Selectors for all browsers
1149
1187
  */
1188
+ var rElementsGroup = /^(?:form|fieldset)$/i;
1150
1189
  var hasInvalid = function(elem){
1151
1190
  var ret = false;
1152
1191
  $(elem).jProp('elements').each(function(){
1153
- ret = $(this).is(':invalid');
1154
- if(ret){
1155
- return false;
1192
+ if(!rElementsGroup.test(elem.nodeName || '')){
1193
+ ret = $(this).is(':invalid');
1194
+ if(ret){
1195
+ return false;
1196
+ }
1156
1197
  }
1198
+
1157
1199
  });
1158
1200
  return ret;
1159
1201
  };
1160
- var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
1202
+
1161
1203
  $.extend($.expr[":"], {
1162
1204
  "valid-element": function(elem){
1163
1205
  return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));