webshims-rails 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/extras/mousepress.js +1 -1
  3. data/vendor/assets/javascripts/webshims/minified/extras/mousepress.js +1 -1
  4. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +1 -1
  5. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +1 -1
  6. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +1 -1
  7. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +1 -1
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +1 -1
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +1 -1
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/14.js +1 -1
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +1 -1
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +1 -1
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +1 -1
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +1 -1
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +1 -1
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +1 -1
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +1 -1
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +1 -1
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +1 -1
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +1 -1
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +1 -1
  22. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +1 -1
  23. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +1 -1
  24. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +1 -1
  25. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +1 -1
  26. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +1 -1
  27. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +1 -1
  28. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +1 -1
  29. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +1 -1
  30. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +1 -1
  31. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +1 -1
  32. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +1 -1
  33. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +1 -1
  34. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +1 -1
  35. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +1 -1
  36. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +1 -1
  37. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +1 -1
  38. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +1 -1
  39. data/vendor/assets/javascripts/webshims/minified/shims/geolocation.js +1 -1
  40. data/vendor/assets/javascripts/webshims/minified/shims/json-storage.js +1 -1
  41. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +1 -1
  42. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +1 -1
  43. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +1 -1
  44. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +1 -1
  45. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +1 -1
  46. data/vendor/assets/javascripts/webshims/minified/shims/track.js +1 -1
  47. data/vendor/assets/javascripts/webshims/polyfiller.js +10 -7
  48. data/vendor/assets/javascripts/webshims/shims/combos/1.js +51 -48
  49. data/vendor/assets/javascripts/webshims/shims/combos/10.js +126 -105
  50. data/vendor/assets/javascripts/webshims/shims/combos/11.js +50 -47
  51. data/vendor/assets/javascripts/webshims/shims/combos/12.js +97 -86
  52. data/vendor/assets/javascripts/webshims/shims/combos/13.js +49 -45
  53. data/vendor/assets/javascripts/webshims/shims/combos/14.js +2 -2
  54. data/vendor/assets/javascripts/webshims/shims/combos/15.js +1 -1
  55. data/vendor/assets/javascripts/webshims/shims/combos/16.js +168 -155
  56. data/vendor/assets/javascripts/webshims/shims/combos/17.js +168 -155
  57. data/vendor/assets/javascripts/webshims/shims/combos/18.js +9 -24
  58. data/vendor/assets/javascripts/webshims/shims/combos/19.js +121 -116
  59. data/vendor/assets/javascripts/webshims/shims/combos/2.js +82 -93
  60. data/vendor/assets/javascripts/webshims/shims/combos/20.js +75 -57
  61. data/vendor/assets/javascripts/webshims/shims/combos/21.js +11 -24
  62. data/vendor/assets/javascripts/webshims/shims/combos/22.js +77 -60
  63. data/vendor/assets/javascripts/webshims/shims/combos/23.js +59 -65
  64. data/vendor/assets/javascripts/webshims/shims/combos/24.js +169 -157
  65. data/vendor/assets/javascripts/webshims/shims/combos/25.js +99 -87
  66. data/vendor/assets/javascripts/webshims/shims/combos/26.js +170 -156
  67. data/vendor/assets/javascripts/webshims/shims/combos/27.js +128 -106
  68. data/vendor/assets/javascripts/webshims/shims/combos/3.js +83 -95
  69. data/vendor/assets/javascripts/webshims/shims/combos/4.js +71 -69
  70. data/vendor/assets/javascripts/webshims/shims/combos/5.js +71 -69
  71. data/vendor/assets/javascripts/webshims/shims/combos/59.js +72 -71
  72. data/vendor/assets/javascripts/webshims/shims/combos/6.js +8 -22
  73. data/vendor/assets/javascripts/webshims/shims/combos/7.js +8 -22
  74. data/vendor/assets/javascripts/webshims/shims/combos/8.js +97 -86
  75. data/vendor/assets/javascripts/webshims/shims/combos/9.js +124 -102
  76. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +49 -45
  77. data/vendor/assets/javascripts/webshims/shims/es5.js +2 -3
  78. data/vendor/assets/javascripts/webshims/shims/form-core.js +72 -70
  79. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +1 -2
  80. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +8 -22
  81. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +11 -24
  82. data/vendor/assets/javascripts/webshims/shims/geolocation.js +1 -1
  83. data/vendor/assets/javascripts/webshims/shims/json-storage.js +1 -1
  84. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +48 -41
  85. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +26 -15
  86. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +27 -16
  87. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +18 -6
  88. data/vendor/assets/javascripts/webshims/shims/track-ui.js +2 -1
  89. data/vendor/assets/javascripts/webshims/shims/track.js +2 -1
  90. metadata +2 -2
@@ -392,9 +392,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
392
392
  var adjustInputWithBtn = (function(){
393
393
  var fns = {"padding-box": "innerWidth", "border-box": "outerWidth", "content-box": "width"};
394
394
  var boxSizing = Modernizr.prefixed && Modernizr.prefixed("boxSizing");
395
- if($.browser.msie && webshims.browserVersion < 8){
396
- boxSizing = false;
397
- }
395
+
398
396
  var getWidth = function(input){
399
397
  var widthFn = "width";
400
398
  if(boxSizing){
@@ -573,7 +571,6 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
573
571
  trigger: [0.595,0.395],
574
572
  normal: [0.565,0.425]
575
573
  };
576
- var subPixelCorrect = (!$.browser.msie || webshims.browserVersion > 6) ? 0 : 0.45;
577
574
 
578
575
  var configureDatePicker = function(elem, datePicker, change, _wrapper){
579
576
  var stopFocusout;
@@ -810,8 +807,8 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
810
807
 
811
808
  data = configureDatePicker(elem, date, change);
812
809
 
813
- $(elem)
814
- .on('updateshadowdom', function(){
810
+ $(document)
811
+ .onTrigger('updateshadowdom', function(){
815
812
  if (data.trigger[0]) {
816
813
  elem.css({display: ''});
817
814
  if(elem[0].offsetWidth || elem[0].offsetHeight){
@@ -827,16 +824,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
827
824
  }
828
825
  elem.css({display: 'none'});
829
826
  })
830
- .triggerHandler('updateshadowdom')
831
827
  ;
832
- if (data.trigger[0]) {
833
- setTimeout(function(){
834
- webshims.ready('WINDOWLOAD', function(){
835
- $(elem).triggerHandler('updateshadowdom');
836
- });
837
- }, 9);
838
- }
839
-
840
828
  };
841
829
 
842
830
 
@@ -900,8 +888,8 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
900
888
  this.common(elem, range, replaceInputUI.range.attrs);
901
889
 
902
890
 
903
- elem
904
- .on('updateshadowdom', function(){
891
+ $(document)
892
+ .onTrigger('updateshadowdom', function(){
905
893
  elem.css({display: ''});
906
894
  if (elem[0].offsetWidth || elem[0].offsetHeight) {
907
895
  var attr = getDimensions(elem);
@@ -914,7 +902,6 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
914
902
  }
915
903
  elem.css({display: 'none'});
916
904
  })
917
- .triggerHandler('updateshadowdom')
918
905
  ;
919
906
 
920
907
 
@@ -1232,7 +1219,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1232
1219
  uiEvents.triggerChange(step);
1233
1220
  }
1234
1221
  })
1235
- .on(($.browser.msie) ? 'keydown' : 'keypress', function(e){
1222
+ .on('keypress', function(e){
1236
1223
  var step = stepKeys[e.keyCode];
1237
1224
  if(step){
1238
1225
  uiEvents.step(step);
@@ -1267,15 +1254,14 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1267
1254
  webshims.data(elem, 'step-controls', controls);
1268
1255
  if(options.calculateWidth){
1269
1256
  var init;
1270
- jElm
1271
- .on('updateshadowdom', function(){
1257
+ $(document)
1258
+ .onTrigger('updateshadowdom', function(){
1272
1259
  if(!init && (elem.offsetWidth || elem.offsetHeight)){
1273
1260
  init = true;
1274
1261
  adjustInputWithBtn(jElm, controls);
1275
1262
  controls.css('marginTop', (jElm.outerHeight() - controls.outerHeight()) / 2);
1276
1263
  }
1277
1264
  })
1278
- .triggerHandler('updateshadowdom')
1279
1265
  ;
1280
1266
  }
1281
1267
  });
@@ -648,9 +648,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
648
648
  var adjustInputWithBtn = (function(){
649
649
  var fns = {"padding-box": "innerWidth", "border-box": "outerWidth", "content-box": "width"};
650
650
  var boxSizing = Modernizr.prefixed && Modernizr.prefixed("boxSizing");
651
- if($.browser.msie && webshims.browserVersion < 8){
652
- boxSizing = false;
653
- }
651
+
654
652
  var getWidth = function(input){
655
653
  var widthFn = "width";
656
654
  if(boxSizing){
@@ -829,7 +827,6 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
829
827
  trigger: [0.595,0.395],
830
828
  normal: [0.565,0.425]
831
829
  };
832
- var subPixelCorrect = (!$.browser.msie || webshims.browserVersion > 6) ? 0 : 0.45;
833
830
 
834
831
  var configureDatePicker = function(elem, datePicker, change, _wrapper){
835
832
  var stopFocusout;
@@ -1066,8 +1063,8 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1066
1063
 
1067
1064
  data = configureDatePicker(elem, date, change);
1068
1065
 
1069
- $(elem)
1070
- .on('updateshadowdom', function(){
1066
+ $(document)
1067
+ .onTrigger('updateshadowdom', function(){
1071
1068
  if (data.trigger[0]) {
1072
1069
  elem.css({display: ''});
1073
1070
  if(elem[0].offsetWidth || elem[0].offsetHeight){
@@ -1083,16 +1080,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1083
1080
  }
1084
1081
  elem.css({display: 'none'});
1085
1082
  })
1086
- .triggerHandler('updateshadowdom')
1087
1083
  ;
1088
- if (data.trigger[0]) {
1089
- setTimeout(function(){
1090
- webshims.ready('WINDOWLOAD', function(){
1091
- $(elem).triggerHandler('updateshadowdom');
1092
- });
1093
- }, 9);
1094
- }
1095
-
1096
1084
  };
1097
1085
 
1098
1086
 
@@ -1156,8 +1144,8 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1156
1144
  this.common(elem, range, replaceInputUI.range.attrs);
1157
1145
 
1158
1146
 
1159
- elem
1160
- .on('updateshadowdom', function(){
1147
+ $(document)
1148
+ .onTrigger('updateshadowdom', function(){
1161
1149
  elem.css({display: ''});
1162
1150
  if (elem[0].offsetWidth || elem[0].offsetHeight) {
1163
1151
  var attr = getDimensions(elem);
@@ -1170,7 +1158,6 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1170
1158
  }
1171
1159
  elem.css({display: 'none'});
1172
1160
  })
1173
- .triggerHandler('updateshadowdom')
1174
1161
  ;
1175
1162
 
1176
1163
 
@@ -1488,7 +1475,7 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1488
1475
  uiEvents.triggerChange(step);
1489
1476
  }
1490
1477
  })
1491
- .on(($.browser.msie) ? 'keydown' : 'keypress', function(e){
1478
+ .on('keypress', function(e){
1492
1479
  var step = stepKeys[e.keyCode];
1493
1480
  if(step){
1494
1481
  uiEvents.step(step);
@@ -1523,15 +1510,14 @@ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, do
1523
1510
  webshims.data(elem, 'step-controls', controls);
1524
1511
  if(options.calculateWidth){
1525
1512
  var init;
1526
- jElm
1527
- .on('updateshadowdom', function(){
1513
+ $(document)
1514
+ .onTrigger('updateshadowdom', function(){
1528
1515
  if(!init && (elem.offsetWidth || elem.offsetHeight)){
1529
1516
  init = true;
1530
1517
  adjustInputWithBtn(jElm, controls);
1531
1518
  controls.css('marginTop', (jElm.outerHeight() - controls.outerHeight()) / 2);
1532
1519
  }
1533
1520
  })
1534
- .triggerHandler('updateshadowdom')
1535
1521
  ;
1536
1522
  }
1537
1523
  });
@@ -16,6 +16,11 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
16
16
  var singleVal = function(elem, name, val, pass, _argless){
17
17
  return (_argless) ? oldVal.call($(elem)) : oldVal.call($(elem), val);
18
18
  };
19
+
20
+ $.fn.onTrigger = function(evt, fn){
21
+ return this.on(evt, fn).each(fn);
22
+ };
23
+
19
24
  $.fn.val = function(val){
20
25
  var elem = this[0];
21
26
  if(arguments.length && val == null){
@@ -210,14 +215,14 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
210
215
  });
211
216
 
212
217
  //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
213
- var isExtendNativeSave = (!$.browser.msie || parseInt($.browser.version, 10) > 8);
218
+ var isExtendNativeSave = Modernizr.ES5;
214
219
  var extendNativeValue = (function(){
215
220
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
216
221
  var has = Object.prototype.hasOwnProperty;
217
222
  return function(nodeName, prop, desc){
218
- var elem = document.createElement(nodeName);
219
- var elemProto = webshims.getPrototypeOf(elem);
220
- if( isExtendNativeSave && elemProto && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
223
+ var elem;
224
+ var elemProto;
225
+ if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
221
226
  var sup = elem[prop];
222
227
  desc._supvalue = function(){
223
228
  if(sup && sup.apply){
@@ -417,7 +422,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
417
422
  docObserve.width = docObserve.getWidth();
418
423
 
419
424
  }
420
- $.event.trigger('updateshadowdom');
425
+ $(document).triggerHandler('updateshadowdom');
421
426
  }, (e.type == 'resize') ? 50 : 9);
422
427
  },
423
428
  _create: function(){
@@ -461,7 +466,6 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
461
466
  };
462
467
 
463
468
 
464
- $.event.customEvent.updateshadowdom = true;
465
469
  webshims.docObserve = function(){
466
470
  webshims.ready('DOM', function(){
467
471
  docObserve.start();
@@ -905,47 +909,47 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
905
909
  });
906
910
  //html5a11y
907
911
  (function($, document){
908
- var browserVersion = $.webshims.browserVersion;
909
- if($.browser.mozilla && browserVersion > 5){return;}
910
- if (!$.browser.msie || (browserVersion < 12 && browserVersion > 7)) {
911
- var elemMappings = {
912
- article: "article",
913
- aside: "complementary",
914
- section: "region",
915
- nav: "navigation",
916
- address: "contentinfo"
917
- };
918
- var addRole = function(elem, role){
919
- var hasRole = elem.getAttribute('role');
920
- if (!hasRole) {
921
- elem.setAttribute('role', role);
922
- }
923
- };
924
-
925
- $.webshims.addReady(function(context, contextElem){
926
- $.each(elemMappings, function(name, role){
927
- var elems = $(name, context).add(contextElem.filter(name));
928
- for (var i = 0, len = elems.length; i < len; i++) {
929
- addRole(elems[i], role);
930
- }
931
- });
932
- if (context === document) {
933
- var header = document.getElementsByTagName('header')[0];
934
- var footers = document.getElementsByTagName('footer');
935
- var footerLen = footers.length;
936
- if (header && !$(header).closest('section, article')[0]) {
937
- addRole(header, 'banner');
938
- }
939
- if (!footerLen) {
940
- return;
941
- }
942
- var footer = footers[footerLen - 1];
943
- if (!$(footer).closest('section, article')[0]) {
944
- addRole(footer, 'contentinfo');
945
- }
912
+ //if we support basic styleing or do not support ARIA (assumed) abort
913
+ if(!Modernizr.localstorage || ('hidden' in document.createElement('a'))){return;}
914
+
915
+ var elemMappings = {
916
+ article: "article",
917
+ aside: "complementary",
918
+ section: "region",
919
+ nav: "navigation",
920
+ address: "contentinfo"
921
+ };
922
+ var addRole = function(elem, role){
923
+ var hasRole = elem.getAttribute('role');
924
+ if (!hasRole) {
925
+ elem.setAttribute('role', role);
926
+ }
927
+ };
928
+
929
+ $.webshims.addReady(function(context, contextElem){
930
+ $.each(elemMappings, function(name, role){
931
+ var elems = $(name, context).add(contextElem.filter(name));
932
+ for (var i = 0, len = elems.length; i < len; i++) {
933
+ addRole(elems[i], role);
946
934
  }
947
935
  });
948
- }
936
+ if (context === document) {
937
+ var header = document.getElementsByTagName('header')[0];
938
+ var footers = document.getElementsByTagName('footer');
939
+ var footerLen = footers.length;
940
+ if (header && !$(header).closest('section, article')[0]) {
941
+ addRole(header, 'banner');
942
+ }
943
+ if (!footerLen) {
944
+ return;
945
+ }
946
+ var footer = footers[footerLen - 1];
947
+ if (!$(footer).closest('section, article')[0]) {
948
+ addRole(footer, 'contentinfo');
949
+ }
950
+ }
951
+ });
952
+
949
953
  })(jQuery, document);
950
954
 
951
955
  (function($, Modernizr, webshims){
@@ -1000,7 +1004,9 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1000
1004
  if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
1001
1005
  options.preferFlash = true;
1002
1006
  document.removeEventListener('error', switchOptions, true);
1003
- $('audio, video').mediaLoad();
1007
+ $('audio, video').each(function(){
1008
+ webshims.mediaelement.selectSource(this);
1009
+ });
1004
1010
  webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
1005
1011
  } else if(!hasSwf){
1006
1012
  document.removeEventListener('error', switchOptions, true);
@@ -1404,7 +1410,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1404
1410
  data = data || webshims.data(elem, 'mediaelement');
1405
1411
  stepSources(elem, data, options.preferFlash || undefined, _srces);
1406
1412
  };
1407
-
1413
+ mediaelement.selectSource = selectSource;
1408
1414
 
1409
1415
  $(document).on('ended', function(e){
1410
1416
  var data = webshims.data(e.target, 'mediaelement');
@@ -1470,52 +1476,57 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1470
1476
  var media = $('video, audio', context)
1471
1477
  .add(insertedElement.filter('video, audio'))
1472
1478
  .each(function(){
1473
- if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
1479
+ var data = webshims.data(this, 'mediaelement');
1480
+
1481
+ if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){
1482
+ //IE controls not visible bug
1474
1483
  $(this).prop('preload', 'metadata').mediaLoad();
1475
1484
  } else {
1476
- selectSource(this);
1485
+ selectSource(this, data);
1477
1486
  }
1478
1487
 
1479
-
1480
-
1481
1488
  if(hasNative){
1482
- var bufferTimer;
1483
- var lastBuffered;
1484
- var elem = this;
1485
- var getBufferedString = function(){
1486
- var buffered = $.prop(elem, 'buffered');
1487
- if(!buffered){return;}
1488
- var bufferString = "";
1489
- for(var i = 0, len = buffered.length; i < len;i++){
1490
- bufferString += buffered.end(i);
1491
- }
1492
- return bufferString;
1493
- };
1494
- var testBuffer = function(){
1495
- var buffered = getBufferedString();
1496
- if(buffered != lastBuffered){
1497
- lastBuffered = buffered;
1498
- $(elem).triggerHandler('progress');
1499
- }
1500
- };
1501
1489
 
1502
- $(this)
1503
- .on({
1504
- 'play loadstart progress': function(e){
1505
- if(e.type == 'progress'){
1506
- lastBuffered = getBufferedString();
1507
- }
1508
- clearTimeout(bufferTimer);
1509
- bufferTimer = setTimeout(testBuffer, 999);
1510
- },
1511
- 'emptied stalled mediaerror abort suspend': function(e){
1512
- if(e.type == 'emptied'){
1513
- lastBuffered = false;
1514
- }
1515
- clearTimeout(bufferTimer);
1490
+ //FF progress bug
1491
+ (function(){
1492
+ var bufferTimer;
1493
+ var lastBuffered;
1494
+ var elem = this;
1495
+ var getBufferedString = function(){
1496
+ var buffered = $.prop(elem, 'buffered');
1497
+ if(!buffered){return;}
1498
+ var bufferString = "";
1499
+ for(var i = 0, len = buffered.length; i < len;i++){
1500
+ bufferString += buffered.end(i);
1516
1501
  }
1517
- })
1518
- ;
1502
+ return bufferString;
1503
+ };
1504
+ var testBuffer = function(){
1505
+ var buffered = getBufferedString();
1506
+ if(buffered != lastBuffered){
1507
+ lastBuffered = buffered;
1508
+ $(elem).triggerHandler('progress');
1509
+ }
1510
+ };
1511
+
1512
+ $(this)
1513
+ .on({
1514
+ 'play loadstart progress': function(e){
1515
+ if(e.type == 'progress'){
1516
+ lastBuffered = getBufferedString();
1517
+ }
1518
+ clearTimeout(bufferTimer);
1519
+ bufferTimer = setTimeout(testBuffer, 999);
1520
+ },
1521
+ 'emptied stalled mediaerror abort suspend': function(e){
1522
+ if(e.type == 'emptied'){
1523
+ lastBuffered = false;
1524
+ }
1525
+ clearTimeout(bufferTimer);
1526
+ }
1527
+ })
1528
+ ;
1529
+ })();
1519
1530
  }
1520
1531
 
1521
1532
  })
@@ -16,6 +16,11 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
16
16
  var singleVal = function(elem, name, val, pass, _argless){
17
17
  return (_argless) ? oldVal.call($(elem)) : oldVal.call($(elem), val);
18
18
  };
19
+
20
+ $.fn.onTrigger = function(evt, fn){
21
+ return this.on(evt, fn).each(fn);
22
+ };
23
+
19
24
  $.fn.val = function(val){
20
25
  var elem = this[0];
21
26
  if(arguments.length && val == null){
@@ -210,14 +215,14 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
210
215
  });
211
216
 
212
217
  //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
213
- var isExtendNativeSave = (!$.browser.msie || parseInt($.browser.version, 10) > 8);
218
+ var isExtendNativeSave = Modernizr.ES5;
214
219
  var extendNativeValue = (function(){
215
220
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
216
221
  var has = Object.prototype.hasOwnProperty;
217
222
  return function(nodeName, prop, desc){
218
- var elem = document.createElement(nodeName);
219
- var elemProto = webshims.getPrototypeOf(elem);
220
- if( isExtendNativeSave && elemProto && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
223
+ var elem;
224
+ var elemProto;
225
+ if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
221
226
  var sup = elem[prop];
222
227
  desc._supvalue = function(){
223
228
  if(sup && sup.apply){
@@ -417,7 +422,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
417
422
  docObserve.width = docObserve.getWidth();
418
423
 
419
424
  }
420
- $.event.trigger('updateshadowdom');
425
+ $(document).triggerHandler('updateshadowdom');
421
426
  }, (e.type == 'resize') ? 50 : 9);
422
427
  },
423
428
  _create: function(){
@@ -461,7 +466,6 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
461
466
  };
462
467
 
463
468
 
464
- $.event.customEvent.updateshadowdom = true;
465
469
  webshims.docObserve = function(){
466
470
  webshims.ready('DOM', function(){
467
471
  docObserve.start();
@@ -905,47 +909,47 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
905
909
  });
906
910
  //html5a11y
907
911
  (function($, document){
908
- var browserVersion = $.webshims.browserVersion;
909
- if($.browser.mozilla && browserVersion > 5){return;}
910
- if (!$.browser.msie || (browserVersion < 12 && browserVersion > 7)) {
911
- var elemMappings = {
912
- article: "article",
913
- aside: "complementary",
914
- section: "region",
915
- nav: "navigation",
916
- address: "contentinfo"
917
- };
918
- var addRole = function(elem, role){
919
- var hasRole = elem.getAttribute('role');
920
- if (!hasRole) {
921
- elem.setAttribute('role', role);
922
- }
923
- };
924
-
925
- $.webshims.addReady(function(context, contextElem){
926
- $.each(elemMappings, function(name, role){
927
- var elems = $(name, context).add(contextElem.filter(name));
928
- for (var i = 0, len = elems.length; i < len; i++) {
929
- addRole(elems[i], role);
930
- }
931
- });
932
- if (context === document) {
933
- var header = document.getElementsByTagName('header')[0];
934
- var footers = document.getElementsByTagName('footer');
935
- var footerLen = footers.length;
936
- if (header && !$(header).closest('section, article')[0]) {
937
- addRole(header, 'banner');
938
- }
939
- if (!footerLen) {
940
- return;
941
- }
942
- var footer = footers[footerLen - 1];
943
- if (!$(footer).closest('section, article')[0]) {
944
- addRole(footer, 'contentinfo');
945
- }
912
+ //if we support basic styleing or do not support ARIA (assumed) abort
913
+ if(!Modernizr.localstorage || ('hidden' in document.createElement('a'))){return;}
914
+
915
+ var elemMappings = {
916
+ article: "article",
917
+ aside: "complementary",
918
+ section: "region",
919
+ nav: "navigation",
920
+ address: "contentinfo"
921
+ };
922
+ var addRole = function(elem, role){
923
+ var hasRole = elem.getAttribute('role');
924
+ if (!hasRole) {
925
+ elem.setAttribute('role', role);
926
+ }
927
+ };
928
+
929
+ $.webshims.addReady(function(context, contextElem){
930
+ $.each(elemMappings, function(name, role){
931
+ var elems = $(name, context).add(contextElem.filter(name));
932
+ for (var i = 0, len = elems.length; i < len; i++) {
933
+ addRole(elems[i], role);
946
934
  }
947
935
  });
948
- }
936
+ if (context === document) {
937
+ var header = document.getElementsByTagName('header')[0];
938
+ var footers = document.getElementsByTagName('footer');
939
+ var footerLen = footers.length;
940
+ if (header && !$(header).closest('section, article')[0]) {
941
+ addRole(header, 'banner');
942
+ }
943
+ if (!footerLen) {
944
+ return;
945
+ }
946
+ var footer = footers[footerLen - 1];
947
+ if (!$(footer).closest('section, article')[0]) {
948
+ addRole(footer, 'contentinfo');
949
+ }
950
+ }
951
+ });
952
+
949
953
  })(jQuery, document);
950
954
 
951
955
  (function($, Modernizr, webshims){
@@ -1000,7 +1004,9 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1000
1004
  if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
1001
1005
  options.preferFlash = true;
1002
1006
  document.removeEventListener('error', switchOptions, true);
1003
- $('audio, video').mediaLoad();
1007
+ $('audio, video').each(function(){
1008
+ webshims.mediaelement.selectSource(this);
1009
+ });
1004
1010
  webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
1005
1011
  } else if(!hasSwf){
1006
1012
  document.removeEventListener('error', switchOptions, true);
@@ -1404,7 +1410,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1404
1410
  data = data || webshims.data(elem, 'mediaelement');
1405
1411
  stepSources(elem, data, options.preferFlash || undefined, _srces);
1406
1412
  };
1407
-
1413
+ mediaelement.selectSource = selectSource;
1408
1414
 
1409
1415
  $(document).on('ended', function(e){
1410
1416
  var data = webshims.data(e.target, 'mediaelement');
@@ -1470,52 +1476,57 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1470
1476
  var media = $('video, audio', context)
1471
1477
  .add(insertedElement.filter('video, audio'))
1472
1478
  .each(function(){
1473
- if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
1479
+ var data = webshims.data(this, 'mediaelement');
1480
+
1481
+ if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){
1482
+ //IE controls not visible bug
1474
1483
  $(this).prop('preload', 'metadata').mediaLoad();
1475
1484
  } else {
1476
- selectSource(this);
1485
+ selectSource(this, data);
1477
1486
  }
1478
1487
 
1479
-
1480
-
1481
1488
  if(hasNative){
1482
- var bufferTimer;
1483
- var lastBuffered;
1484
- var elem = this;
1485
- var getBufferedString = function(){
1486
- var buffered = $.prop(elem, 'buffered');
1487
- if(!buffered){return;}
1488
- var bufferString = "";
1489
- for(var i = 0, len = buffered.length; i < len;i++){
1490
- bufferString += buffered.end(i);
1491
- }
1492
- return bufferString;
1493
- };
1494
- var testBuffer = function(){
1495
- var buffered = getBufferedString();
1496
- if(buffered != lastBuffered){
1497
- lastBuffered = buffered;
1498
- $(elem).triggerHandler('progress');
1499
- }
1500
- };
1501
1489
 
1502
- $(this)
1503
- .on({
1504
- 'play loadstart progress': function(e){
1505
- if(e.type == 'progress'){
1506
- lastBuffered = getBufferedString();
1507
- }
1508
- clearTimeout(bufferTimer);
1509
- bufferTimer = setTimeout(testBuffer, 999);
1510
- },
1511
- 'emptied stalled mediaerror abort suspend': function(e){
1512
- if(e.type == 'emptied'){
1513
- lastBuffered = false;
1514
- }
1515
- clearTimeout(bufferTimer);
1490
+ //FF progress bug
1491
+ (function(){
1492
+ var bufferTimer;
1493
+ var lastBuffered;
1494
+ var elem = this;
1495
+ var getBufferedString = function(){
1496
+ var buffered = $.prop(elem, 'buffered');
1497
+ if(!buffered){return;}
1498
+ var bufferString = "";
1499
+ for(var i = 0, len = buffered.length; i < len;i++){
1500
+ bufferString += buffered.end(i);
1516
1501
  }
1517
- })
1518
- ;
1502
+ return bufferString;
1503
+ };
1504
+ var testBuffer = function(){
1505
+ var buffered = getBufferedString();
1506
+ if(buffered != lastBuffered){
1507
+ lastBuffered = buffered;
1508
+ $(elem).triggerHandler('progress');
1509
+ }
1510
+ };
1511
+
1512
+ $(this)
1513
+ .on({
1514
+ 'play loadstart progress': function(e){
1515
+ if(e.type == 'progress'){
1516
+ lastBuffered = getBufferedString();
1517
+ }
1518
+ clearTimeout(bufferTimer);
1519
+ bufferTimer = setTimeout(testBuffer, 999);
1520
+ },
1521
+ 'emptied stalled mediaerror abort suspend': function(e){
1522
+ if(e.type == 'emptied'){
1523
+ lastBuffered = false;
1524
+ }
1525
+ clearTimeout(bufferTimer);
1526
+ }
1527
+ })
1528
+ ;
1529
+ })();
1519
1530
  }
1520
1531
 
1521
1532
  })
@@ -2002,19 +2013,29 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2002
2013
  var hidevents = hideEvtArray.map(function(evt){
2003
2014
  return evt +'.webshimspolyfill';
2004
2015
  }).join(' ');
2005
-
2016
+ var opposite = {
2017
+ 'html5': 'third',
2018
+ 'third': 'html5'
2019
+ };
2006
2020
  var hidePlayerEvents = function(event){
2007
2021
  var data = webshims.data(event.target, 'mediaelement');
2008
2022
  if(!data){return;}
2009
2023
  var isNativeHTML5 = ( event.originalEvent && event.originalEvent.type === event.type );
2010
2024
  if( isNativeHTML5 == (data.activating == 'third') ){
2011
2025
  event.stopImmediatePropagation();
2012
- if(stopEvents[event.type] && data.isActive != data.activating){
2013
- $(event.target).pause();
2026
+ if(stopEvents[event.type]){
2027
+ if(data.isActive != data.activating){
2028
+ $(event.target).pause();
2029
+ } else {
2030
+ data.isActive = opposite[data.isActive];
2031
+ $(event.target).pause();
2032
+ data.isActive = opposite[data.isActive];
2033
+ }
2014
2034
  }
2015
2035
  }
2016
2036
  };
2017
2037
 
2038
+
2018
2039
  addMediaToStopEvents = function(elem){
2019
2040
  $(elem)
2020
2041
  .off(hidevents)
@@ -2146,6 +2167,10 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2146
2167
  overflow: 'hidden'
2147
2168
  })
2148
2169
  ;
2170
+ var setDimensions = function(){
2171
+ setElementDimension(data, $.prop(elem, 'controls'));
2172
+ };
2173
+
2149
2174
  data = webshims.data(elem, 'mediaelement', webshims.objectCreate(playerStateObj, {
2150
2175
  actionQueue: {
2151
2176
  value: []
@@ -2218,9 +2243,9 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2218
2243
 
2219
2244
  options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
2220
2245
 
2221
- $(elem).on('updatemediaelementdimensions updateshadowdom', function(){
2222
- setElementDimension(data, $.prop(elem, 'controls'));
2223
- });
2246
+
2247
+ $(document).on('updateshadowdom', setDimensions);
2248
+ $(elem).on('updatemediaelementdimensions', setDimensions);
2224
2249
 
2225
2250
 
2226
2251
  swfobject.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.0", false, vars, params, attrs, function(swfData){
@@ -2423,9 +2448,8 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2423
2448
  mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop');
2424
2449
  });
2425
2450
 
2426
- if(hasFlash){
2451
+ if(hasFlash && $.cleanData){
2427
2452
  var oldClean = $.cleanData;
2428
- var gcBrowser = $.browser.msie && webshims.browserVersion < 9;
2429
2453
  var flashNames = {
2430
2454
  object: 1,
2431
2455
  OBJECT: 1
@@ -2442,15 +2466,13 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2442
2466
  elems[i][SENDEVENT]('play', false);
2443
2467
  } catch(er){}
2444
2468
  }
2445
- if(gcBrowser){
2446
- try {
2447
- for (prop in elems[i]) {
2448
- if (typeof elems[i][prop] == "function") {
2449
- elems[i][prop] = null;
2450
- }
2469
+ try {
2470
+ for (prop in elems[i]) {
2471
+ if (typeof elems[i][prop] == "function") {
2472
+ elems[i][prop] = null;
2451
2473
  }
2452
- } catch(er){}
2453
- }
2474
+ }
2475
+ } catch(er){}
2454
2476
  }
2455
2477
  }
2456
2478