webshims-rails 1.11.2 → 1.11.3

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.
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
@@ -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));
@@ -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));
@@ -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){
@@ -1624,6 +1624,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1624
1624
  if(!langCfg['datetime-local']){
1625
1625
  langCfg['datetime-local'] = {};
1626
1626
  }
1627
+ if(!langCfg.time){
1628
+ langCfg.time = {};
1629
+ }
1627
1630
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1628
1631
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
1629
1632
  }
@@ -1624,6 +1624,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1624
1624
  if(!langCfg['datetime-local']){
1625
1625
  langCfg['datetime-local'] = {};
1626
1626
  }
1627
+ if(!langCfg.time){
1628
+ langCfg.time = {};
1629
+ }
1627
1630
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1628
1631
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
1629
1632
  }
@@ -455,6 +455,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
455
455
  "use strict";
456
456
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
457
457
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
458
+ var has = Object.prototype.hasOwnProperty;
458
459
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
459
460
 
460
461
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -527,6 +528,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
527
528
  //proxying attribute
528
529
  var olds = {};
529
530
  var havePolyfill = {};
531
+ var hasPolyfillMethod = {};
530
532
  var extendedProps = {};
531
533
  var extendQ = {};
532
534
  var modifyProps = {};
@@ -632,6 +634,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
632
634
  };
633
635
  });
634
636
 
637
+ //add support for $('video').trigger('play') in case extendNative is set to false
638
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
639
+ (function(oldTrigger){
640
+ $.event.trigger = function(event, data, elem, onlyHandlers){
641
+
642
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
643
+ return oldTrigger.apply(this, arguments);
644
+ }
645
+ var ret, isOrig, origName;
646
+ var origFn = elem[event];
647
+ var polyfilledFn = $.prop(elem, event);
648
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
649
+ if(changeFn){
650
+ origName = '__ws'+event;
651
+ isOrig = (event in elem) && has.call(elem, event);
652
+ elem[event] = polyfilledFn;
653
+ elem[origName] = origFn;
654
+ }
655
+
656
+ ret = oldTrigger.apply(this, arguments);
657
+ if (changeFn) {
658
+ if(isOrig){
659
+ elem[event] = origFn;
660
+ } else {
661
+ delete elem[event];
662
+ }
663
+ delete elem[origName];
664
+ }
665
+
666
+ return ret;
667
+ };
668
+ })($.event.trigger);
669
+ }
635
670
 
636
671
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
637
672
  olds[type] = $[type];
@@ -716,6 +751,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
716
751
  }
717
752
  var oldDesc = extendedProps[nodeName][prop][type];
718
753
  var getSup = function(propType, descriptor, oDesc){
754
+ var origProp;
719
755
  if(descriptor && descriptor[propType]){
720
756
  return descriptor[propType];
721
757
  }
@@ -732,8 +768,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
732
768
  };
733
769
  }
734
770
  if(type == 'prop' && propType == 'value' && desc.value.apply){
771
+ origProp = '__ws'+prop;
772
+ hasPolyfillMethod[prop] = true;
735
773
  return function(value){
736
- var sup = olds[type](this, prop);
774
+ var sup = this[origProp] || olds[type](this, prop);
737
775
  if(sup && sup.apply){
738
776
  sup = sup.apply(this, arguments);
739
777
  }
@@ -771,7 +809,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
771
809
 
772
810
  var extendNativeValue = (function(){
773
811
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
774
- var has = Object.prototype.hasOwnProperty;
812
+
775
813
  //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
776
814
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
777
815
  return function(nodeName, prop, desc){
@@ -1599,17 +1637,21 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1599
1637
  /*
1600
1638
  * Selectors for all browsers
1601
1639
  */
1640
+ var rElementsGroup = /^(?:form|fieldset)$/i;
1602
1641
  var hasInvalid = function(elem){
1603
1642
  var ret = false;
1604
1643
  $(elem).jProp('elements').each(function(){
1605
- ret = $(this).is(':invalid');
1606
- if(ret){
1607
- return false;
1644
+ if(!rElementsGroup.test(elem.nodeName || '')){
1645
+ ret = $(this).is(':invalid');
1646
+ if(ret){
1647
+ return false;
1648
+ }
1608
1649
  }
1650
+
1609
1651
  });
1610
1652
  return ret;
1611
1653
  };
1612
- var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
1654
+
1613
1655
  $.extend($.expr[":"], {
1614
1656
  "valid-element": function(elem){
1615
1657
  return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
@@ -2425,7 +2467,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2425
2467
  src.server = tmp;
2426
2468
  }
2427
2469
 
2428
- tmp = elem.attr('type');
2470
+ tmp = elem.attr('type') || elem.attr('data-type');
2429
2471
  if(tmp){
2430
2472
  src.type = tmp;
2431
2473
  src.container = $.trim(tmp.split(';')[0]);
@@ -2449,6 +2491,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2449
2491
  }
2450
2492
  }
2451
2493
  }
2494
+
2495
+ if(!src.container){
2496
+ $(elem).attr('data-wsrecheckmimetype', '');
2497
+ }
2498
+
2452
2499
  tmp = elem.attr('media');
2453
2500
  if(tmp){
2454
2501
  src.media = tmp;
@@ -2682,15 +2729,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2682
2729
 
2683
2730
  var handleThird = (function(){
2684
2731
  var requested;
2732
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
2685
2733
  return function( mediaElem, ret, data ){
2734
+ //readd to ready
2686
2735
 
2687
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
2688
- if(mediaelement.createSWF){
2736
+
2737
+ webshims.ready(readyType, function(){
2738
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2689
2739
  mediaelement.createSWF( mediaElem, ret, data );
2690
2740
  } else if(!requested) {
2691
2741
  requested = true;
2692
2742
  loadThird();
2693
- //readd to ready
2743
+
2694
2744
  handleThird( mediaElem, ret, data );
2695
2745
  }
2696
2746
  });
@@ -455,6 +455,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
455
455
  "use strict";
456
456
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
457
457
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
458
+ var has = Object.prototype.hasOwnProperty;
458
459
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
459
460
 
460
461
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -527,6 +528,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
527
528
  //proxying attribute
528
529
  var olds = {};
529
530
  var havePolyfill = {};
531
+ var hasPolyfillMethod = {};
530
532
  var extendedProps = {};
531
533
  var extendQ = {};
532
534
  var modifyProps = {};
@@ -632,6 +634,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
632
634
  };
633
635
  });
634
636
 
637
+ //add support for $('video').trigger('play') in case extendNative is set to false
638
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
639
+ (function(oldTrigger){
640
+ $.event.trigger = function(event, data, elem, onlyHandlers){
641
+
642
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
643
+ return oldTrigger.apply(this, arguments);
644
+ }
645
+ var ret, isOrig, origName;
646
+ var origFn = elem[event];
647
+ var polyfilledFn = $.prop(elem, event);
648
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
649
+ if(changeFn){
650
+ origName = '__ws'+event;
651
+ isOrig = (event in elem) && has.call(elem, event);
652
+ elem[event] = polyfilledFn;
653
+ elem[origName] = origFn;
654
+ }
655
+
656
+ ret = oldTrigger.apply(this, arguments);
657
+ if (changeFn) {
658
+ if(isOrig){
659
+ elem[event] = origFn;
660
+ } else {
661
+ delete elem[event];
662
+ }
663
+ delete elem[origName];
664
+ }
665
+
666
+ return ret;
667
+ };
668
+ })($.event.trigger);
669
+ }
635
670
 
636
671
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
637
672
  olds[type] = $[type];
@@ -716,6 +751,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
716
751
  }
717
752
  var oldDesc = extendedProps[nodeName][prop][type];
718
753
  var getSup = function(propType, descriptor, oDesc){
754
+ var origProp;
719
755
  if(descriptor && descriptor[propType]){
720
756
  return descriptor[propType];
721
757
  }
@@ -732,8 +768,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
732
768
  };
733
769
  }
734
770
  if(type == 'prop' && propType == 'value' && desc.value.apply){
771
+ origProp = '__ws'+prop;
772
+ hasPolyfillMethod[prop] = true;
735
773
  return function(value){
736
- var sup = olds[type](this, prop);
774
+ var sup = this[origProp] || olds[type](this, prop);
737
775
  if(sup && sup.apply){
738
776
  sup = sup.apply(this, arguments);
739
777
  }
@@ -771,7 +809,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
771
809
 
772
810
  var extendNativeValue = (function(){
773
811
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
774
- var has = Object.prototype.hasOwnProperty;
812
+
775
813
  //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
776
814
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
777
815
  return function(nodeName, prop, desc){
@@ -1599,17 +1637,21 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1599
1637
  /*
1600
1638
  * Selectors for all browsers
1601
1639
  */
1640
+ var rElementsGroup = /^(?:form|fieldset)$/i;
1602
1641
  var hasInvalid = function(elem){
1603
1642
  var ret = false;
1604
1643
  $(elem).jProp('elements').each(function(){
1605
- ret = $(this).is(':invalid');
1606
- if(ret){
1607
- return false;
1644
+ if(!rElementsGroup.test(elem.nodeName || '')){
1645
+ ret = $(this).is(':invalid');
1646
+ if(ret){
1647
+ return false;
1648
+ }
1608
1649
  }
1650
+
1609
1651
  });
1610
1652
  return ret;
1611
1653
  };
1612
- var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
1654
+
1613
1655
  $.extend($.expr[":"], {
1614
1656
  "valid-element": function(elem){
1615
1657
  return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
@@ -2135,7 +2177,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2135
2177
  src.server = tmp;
2136
2178
  }
2137
2179
 
2138
- tmp = elem.attr('type');
2180
+ tmp = elem.attr('type') || elem.attr('data-type');
2139
2181
  if(tmp){
2140
2182
  src.type = tmp;
2141
2183
  src.container = $.trim(tmp.split(';')[0]);
@@ -2159,6 +2201,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2159
2201
  }
2160
2202
  }
2161
2203
  }
2204
+
2205
+ if(!src.container){
2206
+ $(elem).attr('data-wsrecheckmimetype', '');
2207
+ }
2208
+
2162
2209
  tmp = elem.attr('media');
2163
2210
  if(tmp){
2164
2211
  src.media = tmp;
@@ -2392,15 +2439,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2392
2439
 
2393
2440
  var handleThird = (function(){
2394
2441
  var requested;
2442
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
2395
2443
  return function( mediaElem, ret, data ){
2444
+ //readd to ready
2396
2445
 
2397
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
2398
- if(mediaelement.createSWF){
2446
+
2447
+ webshims.ready(readyType, function(){
2448
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2399
2449
  mediaelement.createSWF( mediaElem, ret, data );
2400
2450
  } else if(!requested) {
2401
2451
  requested = true;
2402
2452
  loadThird();
2403
- //readd to ready
2453
+
2404
2454
  handleThird( mediaElem, ret, data );
2405
2455
  }
2406
2456
  });