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
@@ -1412,6 +1412,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1412
1412
  if(!langCfg['datetime-local']){
1413
1413
  langCfg['datetime-local'] = {};
1414
1414
  }
1415
+ if(!langCfg.time){
1416
+ langCfg.time = {};
1417
+ }
1415
1418
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1416
1419
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
1417
1420
  }
@@ -2215,6 +2215,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2215
2215
  if(!langCfg['datetime-local']){
2216
2216
  langCfg['datetime-local'] = {};
2217
2217
  }
2218
+ if(!langCfg.time){
2219
+ langCfg.time = {};
2220
+ }
2218
2221
  if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
2219
2222
  langCfg['datetime-local'].currentText = langCfg.time.currentText;
2220
2223
  }
@@ -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){
@@ -2492,7 +2530,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2492
2530
  src.server = tmp;
2493
2531
  }
2494
2532
 
2495
- tmp = elem.attr('type');
2533
+ tmp = elem.attr('type') || elem.attr('data-type');
2496
2534
  if(tmp){
2497
2535
  src.type = tmp;
2498
2536
  src.container = $.trim(tmp.split(';')[0]);
@@ -2516,6 +2554,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2516
2554
  }
2517
2555
  }
2518
2556
  }
2557
+
2558
+ if(!src.container){
2559
+ $(elem).attr('data-wsrecheckmimetype', '');
2560
+ }
2561
+
2519
2562
  tmp = elem.attr('media');
2520
2563
  if(tmp){
2521
2564
  src.media = tmp;
@@ -2749,15 +2792,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2749
2792
 
2750
2793
  var handleThird = (function(){
2751
2794
  var requested;
2795
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
2752
2796
  return function( mediaElem, ret, data ){
2797
+ //readd to ready
2753
2798
 
2754
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
2755
- if(mediaelement.createSWF){
2799
+
2800
+ webshims.ready(readyType, function(){
2801
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2756
2802
  mediaelement.createSWF( mediaElem, ret, data );
2757
2803
  } else if(!requested) {
2758
2804
  requested = true;
2759
2805
  loadThird();
2760
- //readd to ready
2806
+
2761
2807
  handleThird( mediaElem, ret, data );
2762
2808
  }
2763
2809
  });
@@ -3098,15 +3144,6 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3098
3144
  lastDuration: 0
3099
3145
  }, getProps, getSetProps);
3100
3146
 
3101
- var idRep = /^jarisplayer-/;
3102
- var getSwfDataFromID = function(id){
3103
-
3104
- var elem = document.getElementById(id.replace(idRep, ''));
3105
- if(!elem){return;}
3106
- var data = webshims.data(elem, 'mediaelement');
3107
- return data.isActive == 'third' ? data : null;
3108
- };
3109
-
3110
3147
 
3111
3148
  var getSwfDataFromElem = function(elem){
3112
3149
  try {
@@ -3699,6 +3736,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3699
3736
  box = data.shadowElem;
3700
3737
  resetSwfProps(data);
3701
3738
  } else {
3739
+ $(document.getElementById('wrapper-'+ elemId )).remove();
3702
3740
  box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
3703
3741
  .css({
3704
3742
  position: 'relative',
@@ -3781,8 +3819,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3781
3819
  ;
3782
3820
  }
3783
3821
 
3784
-
3785
- if(!mediaelement.jarisEvent[data.id] || mediaelement.jarisEvent[data.id].elem != elem){
3822
+ if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
3823
+ webshims.error('something went wrong');
3824
+ return;
3825
+ } else if(!mediaelement.jarisEvent[data.id]){
3826
+
3786
3827
  mediaelement.jarisEvent[data.id] = function(jaris){
3787
3828
 
3788
3829
  if(jaris.type == 'ready'){
@@ -3988,6 +4029,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3988
4029
  descs[fn] = {
3989
4030
  value: function(){
3990
4031
  var data = getSwfDataFromElem(this);
4032
+
3991
4033
  if(data){
3992
4034
  if(data.stopPlayPause){
3993
4035
  clearTimeout(data.stopPlayPause);
@@ -4010,6 +4052,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4010
4052
 
4011
4053
  webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
4012
4054
  var data = getSwfDataFromElem(this);
4055
+
4013
4056
  $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
4014
4057
 
4015
4058
  if(data){
@@ -4143,5 +4186,60 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
4143
4186
  } else if(!('media' in document.createElement('source'))){
4144
4187
  webshims.reflectProperties('source', ['media']);
4145
4188
  }
4189
+ if(options.experimentallyMimetypeCheck){
4190
+ (function(){
4191
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
4192
+ var getMimeType = function(){
4193
+ var done;
4194
+ var unknown = 'media/unknown please provide mime type';
4195
+ var media = $(this);
4196
+ var xhrs = [];
4197
+ media
4198
+ .not('.ws-after-check')
4199
+ .find('source')
4200
+ [ADDBACK]()
4201
+ .filter('[data-wsrecheckmimetype]:not([type])')
4202
+ .each(function(){
4203
+ var source = $(this).removeAttr('data-wsrecheckmimetype');
4204
+ var error = function(){
4205
+ source.attr('data-type', unknown);
4206
+ };
4207
+ try {
4208
+ xhrs.push(
4209
+ $.ajax({
4210
+ type: 'head',
4211
+ url: $.attr(this, 'src'),
4212
+ success: function(content, status, xhr){
4213
+ var mime = xhr.getResponseHeader('Content-Type');
4214
+ if(mime){
4215
+ done = true;
4216
+ }
4217
+ source.attr('data-type', mime || unknown);
4218
+ },
4219
+ error: error
4220
+ })
4221
+ )
4222
+ ;
4223
+ } catch(er){
4224
+ error();
4225
+ }
4226
+ })
4227
+ ;
4228
+ if(xhrs.length){
4229
+ media.addClass('ws-after-check');
4230
+ $.when.apply($, xhrs).always(function(){
4231
+ media.mediaLoad();
4232
+ setTimeout(function(){
4233
+ media.removeClass('ws-after-check');
4234
+ }, 9);
4235
+ });
4236
+ }
4237
+ };
4238
+ $('audio.media-error, video.media-error').each(getMimeType);
4239
+ $(document).on('mediaerror', function(e){
4240
+ getMimeType.call(e.target);
4241
+ });
4242
+ })();
4243
+ }
4146
4244
 
4147
4245
  });
@@ -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));
@@ -2192,7 +2234,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2192
2234
  src.server = tmp;
2193
2235
  }
2194
2236
 
2195
- tmp = elem.attr('type');
2237
+ tmp = elem.attr('type') || elem.attr('data-type');
2196
2238
  if(tmp){
2197
2239
  src.type = tmp;
2198
2240
  src.container = $.trim(tmp.split(';')[0]);
@@ -2216,6 +2258,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2216
2258
  }
2217
2259
  }
2218
2260
  }
2261
+
2262
+ if(!src.container){
2263
+ $(elem).attr('data-wsrecheckmimetype', '');
2264
+ }
2265
+
2219
2266
  tmp = elem.attr('media');
2220
2267
  if(tmp){
2221
2268
  src.media = tmp;
@@ -2449,15 +2496,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2449
2496
 
2450
2497
  var handleThird = (function(){
2451
2498
  var requested;
2499
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
2452
2500
  return function( mediaElem, ret, data ){
2501
+ //readd to ready
2453
2502
 
2454
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
2455
- if(mediaelement.createSWF){
2503
+
2504
+ webshims.ready(readyType, function(){
2505
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2456
2506
  mediaelement.createSWF( mediaElem, ret, data );
2457
2507
  } else if(!requested) {
2458
2508
  requested = true;
2459
2509
  loadThird();
2460
- //readd to ready
2510
+
2461
2511
  handleThird( mediaElem, ret, data );
2462
2512
  }
2463
2513
  });
@@ -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){
@@ -2040,7 +2078,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2040
2078
  src.server = tmp;
2041
2079
  }
2042
2080
 
2043
- tmp = elem.attr('type');
2081
+ tmp = elem.attr('type') || elem.attr('data-type');
2044
2082
  if(tmp){
2045
2083
  src.type = tmp;
2046
2084
  src.container = $.trim(tmp.split(';')[0]);
@@ -2064,6 +2102,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2064
2102
  }
2065
2103
  }
2066
2104
  }
2105
+
2106
+ if(!src.container){
2107
+ $(elem).attr('data-wsrecheckmimetype', '');
2108
+ }
2109
+
2067
2110
  tmp = elem.attr('media');
2068
2111
  if(tmp){
2069
2112
  src.media = tmp;
@@ -2297,15 +2340,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2297
2340
 
2298
2341
  var handleThird = (function(){
2299
2342
  var requested;
2343
+ var readyType = hasSwf ? swfType : 'mediaelement-yt';
2300
2344
  return function( mediaElem, ret, data ){
2345
+ //readd to ready
2346
+
2301
2347
 
2302
- webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
2303
- if(mediaelement.createSWF){
2348
+ webshims.ready(readyType, function(){
2349
+ if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2304
2350
  mediaelement.createSWF( mediaElem, ret, data );
2305
2351
  } else if(!requested) {
2306
2352
  requested = true;
2307
2353
  loadThird();
2308
- //readd to ready
2354
+
2309
2355
  handleThird( mediaElem, ret, data );
2310
2356
  }
2311
2357
  });
@@ -2646,15 +2692,6 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
2646
2692
  lastDuration: 0
2647
2693
  }, getProps, getSetProps);
2648
2694
 
2649
- var idRep = /^jarisplayer-/;
2650
- var getSwfDataFromID = function(id){
2651
-
2652
- var elem = document.getElementById(id.replace(idRep, ''));
2653
- if(!elem){return;}
2654
- var data = webshims.data(elem, 'mediaelement');
2655
- return data.isActive == 'third' ? data : null;
2656
- };
2657
-
2658
2695
 
2659
2696
  var getSwfDataFromElem = function(elem){
2660
2697
  try {
@@ -3247,6 +3284,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3247
3284
  box = data.shadowElem;
3248
3285
  resetSwfProps(data);
3249
3286
  } else {
3287
+ $(document.getElementById('wrapper-'+ elemId )).remove();
3250
3288
  box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
3251
3289
  .css({
3252
3290
  position: 'relative',
@@ -3329,8 +3367,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3329
3367
  ;
3330
3368
  }
3331
3369
 
3332
-
3333
- if(!mediaelement.jarisEvent[data.id] || mediaelement.jarisEvent[data.id].elem != elem){
3370
+ if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
3371
+ webshims.error('something went wrong');
3372
+ return;
3373
+ } else if(!mediaelement.jarisEvent[data.id]){
3374
+
3334
3375
  mediaelement.jarisEvent[data.id] = function(jaris){
3335
3376
 
3336
3377
  if(jaris.type == 'ready'){
@@ -3536,6 +3577,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3536
3577
  descs[fn] = {
3537
3578
  value: function(){
3538
3579
  var data = getSwfDataFromElem(this);
3580
+
3539
3581
  if(data){
3540
3582
  if(data.stopPlayPause){
3541
3583
  clearTimeout(data.stopPlayPause);
@@ -3558,6 +3600,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3558
3600
 
3559
3601
  webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
3560
3602
  var data = getSwfDataFromElem(this);
3603
+
3561
3604
  $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
3562
3605
 
3563
3606
  if(data){
@@ -3691,5 +3734,60 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
3691
3734
  } else if(!('media' in document.createElement('source'))){
3692
3735
  webshims.reflectProperties('source', ['media']);
3693
3736
  }
3737
+ if(options.experimentallyMimetypeCheck){
3738
+ (function(){
3739
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
3740
+ var getMimeType = function(){
3741
+ var done;
3742
+ var unknown = 'media/unknown please provide mime type';
3743
+ var media = $(this);
3744
+ var xhrs = [];
3745
+ media
3746
+ .not('.ws-after-check')
3747
+ .find('source')
3748
+ [ADDBACK]()
3749
+ .filter('[data-wsrecheckmimetype]:not([type])')
3750
+ .each(function(){
3751
+ var source = $(this).removeAttr('data-wsrecheckmimetype');
3752
+ var error = function(){
3753
+ source.attr('data-type', unknown);
3754
+ };
3755
+ try {
3756
+ xhrs.push(
3757
+ $.ajax({
3758
+ type: 'head',
3759
+ url: $.attr(this, 'src'),
3760
+ success: function(content, status, xhr){
3761
+ var mime = xhr.getResponseHeader('Content-Type');
3762
+ if(mime){
3763
+ done = true;
3764
+ }
3765
+ source.attr('data-type', mime || unknown);
3766
+ },
3767
+ error: error
3768
+ })
3769
+ )
3770
+ ;
3771
+ } catch(er){
3772
+ error();
3773
+ }
3774
+ })
3775
+ ;
3776
+ if(xhrs.length){
3777
+ media.addClass('ws-after-check');
3778
+ $.when.apply($, xhrs).always(function(){
3779
+ media.mediaLoad();
3780
+ setTimeout(function(){
3781
+ media.removeClass('ws-after-check');
3782
+ }, 9);
3783
+ });
3784
+ }
3785
+ };
3786
+ $('audio.media-error, video.media-error').each(getMimeType);
3787
+ $(document).on('mediaerror', function(e){
3788
+ getMimeType.call(e.target);
3789
+ });
3790
+ })();
3791
+ }
3694
3792
 
3695
3793
  });