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
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjVkNmUzNDI2Nzc2YzQ2YzEyZmU2OGU4YzNkMDhkODVkYjRiZDgzZQ==
5
- data.tar.gz: !binary |-
6
- NWRiNWEzN2FlYTVlOWFmNGEwNzI3NzNkMTk3MWYyMzZkZGMxNDJmNQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- ODdjNWY5MWQ2ZGI3NmQ5OTZjYzUzZGQ0ZmMwMzE3ZjE2MmU4MWYwN2E0OGM4
10
- ZDllYWE5YWI5ZTNmYzY1YzI4ZjBkZDFmMjI0ZWE5MjU2NGNhY2Q2MTI0YTYx
11
- MzU0MTlhZWE1YTM3NmI4M2UwOTgwOTAyOTg1OGQwMDFhNzg2MjU=
12
- data.tar.gz: !binary |-
13
- YmExN2NjMmFjNTFlNzVkMDgxMWJhNGZmZjg0ZTNiY2QxYjA1ZTJhY2M3NjQx
14
- MjIyODI4YTEyMzM3M2QxYjJiZjJkNGE5MDkwZDFhMWFhY2QyMDNhYzQ1ODdm
15
- MTVlZGQ1MTc1OTMxODdlYWJlZGVkYzU5MWFhZDg2ZmUxZDgzYTA=
2
+ SHA1:
3
+ metadata.gz: bd71d4a931e677f0ccdfbe32415634a08db05ace
4
+ data.tar.gz: 1eac083125384b526e9d8624f53a3504b489cbdd
5
+ SHA512:
6
+ metadata.gz: abef891b0184f6acdf4ae7d31e60d1a709c5bef44e0b74ed23334adc9f173d70ef2ea26fe9d86d29d2f3c09e107e4868902e538df661649e7086a97b9cdfbaa2
7
+ data.tar.gz: c06603fb300e0f60ea8a147dfbe28887819eafb68f74848f25956b85c397057f94faef9b664bd13717dc9547f5bee760cb510cf9ff997e9bf0795c66195c65a2
@@ -1,6 +1,6 @@
1
1
  module Webshims
2
2
  module Rails
3
- VERSION = "1.11.2"
4
- WEBSHIMS_VERSION = "1.11.2"
3
+ VERSION = "1.11.3"
4
+ WEBSHIMS_VERSION = "1.11.3"
5
5
  end
6
6
  end
@@ -27,7 +27,7 @@
27
27
 
28
28
 
29
29
  var webshims = {
30
- version: '1.11.2',
30
+ version: '1.11.3',
31
31
  cfg: {
32
32
 
33
33
  //addCacheBuster: false,
@@ -1010,7 +1010,7 @@
1010
1010
  // ,fieldWrapper: undefined
1011
1011
  // ,fx: 'slide'
1012
1012
  },
1013
- availableLangs: ['ar', 'ch-ZN', 'el', 'es', 'fr', 'he', 'hi', 'hu', 'it', 'ja', 'lt', 'nl', 'pl', 'pt-PT', 'ru', 'sv'] //en and de are directly implemented in core
1013
+ availableLangs: ['ar', 'ch-ZN', 'cs', 'el', 'es', 'fr', 'he', 'hi', 'hu', 'it', 'ja', 'lt', 'nl', 'pl', 'pt', 'pt-BR', 'pt-PT', 'ru', 'sv'] //en and de are directly implemented in core
1014
1014
  // ,customMessages: false,
1015
1015
  // overridePlaceholder: false, // might be good for IE10
1016
1016
  // replaceValidationUI: false
@@ -1176,7 +1176,6 @@
1176
1176
  noAutoCallback: true,
1177
1177
  options: {
1178
1178
  preferFlash: false,
1179
- player: 'jaris',
1180
1179
  vars: {},
1181
1180
  params: {},
1182
1181
  attrs: {},
@@ -1191,7 +1190,7 @@
1191
1190
 
1192
1191
  addPolyfill('mediaelement-jaris', {
1193
1192
  f: 'mediaelement',
1194
- d: ['swfmini', DOMSUPPORT],
1193
+ d: ['mediaelement-core', 'swfmini', DOMSUPPORT],
1195
1194
  test: function(){
1196
1195
  if(!Modernizr.audio || !Modernizr.video || webshims.mediaelement.loadSwf){
1197
1196
  return false;
@@ -498,17 +498,21 @@ webshims.register('form-core', function($, webshims, window, document, undefined
498
498
  /*
499
499
  * Selectors for all browsers
500
500
  */
501
+ var rElementsGroup = /^(?:form|fieldset)$/i;
501
502
  var hasInvalid = function(elem){
502
503
  var ret = false;
503
504
  $(elem).jProp('elements').each(function(){
504
- ret = $(this).is(':invalid');
505
- if(ret){
506
- return false;
505
+ if(!rElementsGroup.test(elem.nodeName || '')){
506
+ ret = $(this).is(':invalid');
507
+ if(ret){
508
+ return false;
509
+ }
507
510
  }
511
+
508
512
  });
509
513
  return ret;
510
514
  };
511
- var rElementsGroup = /^(?:form)$/i;///^(?:form|fieldset)$/i
515
+
512
516
  $.extend($.expr[":"], {
513
517
  "valid-element": function(elem){
514
518
  return rElementsGroup.test(elem.nodeName || '') ? !hasInvalid(elem) :!!($.prop(elem, 'willValidate') && isValid(elem));
@@ -801,7 +805,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
801
805
  src.server = tmp;
802
806
  }
803
807
 
804
- tmp = elem.attr('type');
808
+ tmp = elem.attr('type') || elem.attr('data-type');
805
809
  if(tmp){
806
810
  src.type = tmp;
807
811
  src.container = $.trim(tmp.split(';')[0]);
@@ -825,6 +829,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
825
829
  }
826
830
  }
827
831
  }
832
+
833
+ if(!src.container){
834
+ $(elem).attr('data-wsrecheckmimetype', '');
835
+ }
836
+
828
837
  tmp = elem.attr('media');
829
838
  if(tmp){
830
839
  src.media = tmp;
@@ -1058,15 +1067,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1058
1067
 
1059
1068
  var handleThird = (function(){
1060
1069
  var requested;
1070
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
1061
1071
  return function( mediaElem, ret, data ){
1072
+ //readd to ready
1062
1073
 
1063
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
1064
- if(mediaelement.createSWF){
1074
+
1075
+ webshims.ready(readyType, function(){
1076
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
1065
1077
  mediaelement.createSWF( mediaElem, ret, data );
1066
1078
  } else if(!requested) {
1067
1079
  requested = true;
1068
1080
  loadThird();
1069
- //readd to ready
1081
+
1070
1082
  handleThird( mediaElem, ret, data );
1071
1083
  }
1072
1084
  });
@@ -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){
@@ -1924,6 +1962,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1924
1962
  if(!langCfg['datetime-local']){
1925
1963
  langCfg['datetime-local'] = {};
1926
1964
  }
1965
+ if(!langCfg.time){
1966
+ langCfg.time = {};
1967
+ }
1927
1968
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1928
1969
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
1929
1970
  }
@@ -823,6 +823,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
823
823
  if(!langCfg['datetime-local']){
824
824
  langCfg['datetime-local'] = {};
825
825
  }
826
+ if(!langCfg.time){
827
+ langCfg.time = {};
828
+ }
826
829
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
827
830
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
828
831
  }
@@ -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
  });
@@ -136,7 +136,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
136
136
  src.server = tmp;
137
137
  }
138
138
 
139
- tmp = elem.attr('type');
139
+ tmp = elem.attr('type') || elem.attr('data-type');
140
140
  if(tmp){
141
141
  src.type = tmp;
142
142
  src.container = $.trim(tmp.split(';')[0]);
@@ -160,6 +160,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
160
160
  }
161
161
  }
162
162
  }
163
+
164
+ if(!src.container){
165
+ $(elem).attr('data-wsrecheckmimetype', '');
166
+ }
167
+
163
168
  tmp = elem.attr('media');
164
169
  if(tmp){
165
170
  src.media = tmp;
@@ -393,15 +398,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
393
398
 
394
399
  var handleThird = (function(){
395
400
  var requested;
401
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
396
402
  return function( mediaElem, ret, data ){
403
+ //readd to ready
397
404
 
398
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
399
- if(mediaelement.createSWF){
405
+
406
+ webshims.ready(readyType, function(){
407
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
400
408
  mediaelement.createSWF( mediaElem, ret, data );
401
409
  } else if(!requested) {
402
410
  requested = true;
403
411
  loadThird();
404
- //readd to ready
412
+
405
413
  handleThird( mediaElem, ret, data );
406
414
  }
407
415
  });
@@ -806,6 +806,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
806
806
  "use strict";
807
807
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
808
808
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
809
+ var has = Object.prototype.hasOwnProperty;
809
810
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
810
811
 
811
812
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
@@ -878,6 +879,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
878
879
  //proxying attribute
879
880
  var olds = {};
880
881
  var havePolyfill = {};
882
+ var hasPolyfillMethod = {};
881
883
  var extendedProps = {};
882
884
  var extendQ = {};
883
885
  var modifyProps = {};
@@ -983,6 +985,39 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
983
985
  };
984
986
  });
985
987
 
988
+ //add support for $('video').trigger('play') in case extendNative is set to false
989
+ if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
990
+ (function(oldTrigger){
991
+ $.event.trigger = function(event, data, elem, onlyHandlers){
992
+
993
+ if(!hasPolyfillMethod[event] || onlyHandlers || !elem || elem.nodeType !== 1){
994
+ return oldTrigger.apply(this, arguments);
995
+ }
996
+ var ret, isOrig, origName;
997
+ var origFn = elem[event];
998
+ var polyfilledFn = $.prop(elem, event);
999
+ var changeFn = polyfilledFn && origFn != polyfilledFn;
1000
+ if(changeFn){
1001
+ origName = '__ws'+event;
1002
+ isOrig = (event in elem) && has.call(elem, event);
1003
+ elem[event] = polyfilledFn;
1004
+ elem[origName] = origFn;
1005
+ }
1006
+
1007
+ ret = oldTrigger.apply(this, arguments);
1008
+ if (changeFn) {
1009
+ if(isOrig){
1010
+ elem[event] = origFn;
1011
+ } else {
1012
+ delete elem[event];
1013
+ }
1014
+ delete elem[origName];
1015
+ }
1016
+
1017
+ return ret;
1018
+ };
1019
+ })($.event.trigger);
1020
+ }
986
1021
 
987
1022
  ['removeAttr', 'prop', 'attr'].forEach(function(type){
988
1023
  olds[type] = $[type];
@@ -1067,6 +1102,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1067
1102
  }
1068
1103
  var oldDesc = extendedProps[nodeName][prop][type];
1069
1104
  var getSup = function(propType, descriptor, oDesc){
1105
+ var origProp;
1070
1106
  if(descriptor && descriptor[propType]){
1071
1107
  return descriptor[propType];
1072
1108
  }
@@ -1083,8 +1119,10 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1083
1119
  };
1084
1120
  }
1085
1121
  if(type == 'prop' && propType == 'value' && desc.value.apply){
1122
+ origProp = '__ws'+prop;
1123
+ hasPolyfillMethod[prop] = true;
1086
1124
  return function(value){
1087
- var sup = olds[type](this, prop);
1125
+ var sup = this[origProp] || olds[type](this, prop);
1088
1126
  if(sup && sup.apply){
1089
1127
  sup = sup.apply(this, arguments);
1090
1128
  }
@@ -1122,7 +1160,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1122
1160
 
1123
1161
  var extendNativeValue = (function(){
1124
1162
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
1125
- var has = Object.prototype.hasOwnProperty;
1163
+
1126
1164
  //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
1127
1165
  var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
1128
1166
  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));
@@ -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));
@@ -3170,7 +3212,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3170
3212
  src.server = tmp;
3171
3213
  }
3172
3214
 
3173
- tmp = elem.attr('type');
3215
+ tmp = elem.attr('type') || elem.attr('data-type');
3174
3216
  if(tmp){
3175
3217
  src.type = tmp;
3176
3218
  src.container = $.trim(tmp.split(';')[0]);
@@ -3194,6 +3236,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3194
3236
  }
3195
3237
  }
3196
3238
  }
3239
+
3240
+ if(!src.container){
3241
+ $(elem).attr('data-wsrecheckmimetype', '');
3242
+ }
3243
+
3197
3244
  tmp = elem.attr('media');
3198
3245
  if(tmp){
3199
3246
  src.media = tmp;
@@ -3427,15 +3474,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3427
3474
 
3428
3475
  var handleThird = (function(){
3429
3476
  var requested;
3477
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
3430
3478
  return function( mediaElem, ret, data ){
3479
+ //readd to ready
3431
3480
 
3432
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
3433
- if(mediaelement.createSWF){
3481
+
3482
+ webshims.ready(readyType, function(){
3483
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
3434
3484
  mediaelement.createSWF( mediaElem, ret, data );
3435
3485
  } else if(!requested) {
3436
3486
  requested = true;
3437
3487
  loadThird();
3438
- //readd to ready
3488
+
3439
3489
  handleThird( mediaElem, ret, data );
3440
3490
  }
3441
3491
  });