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
@@ -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
  })
@@ -1549,6 +1560,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
1549
1560
  "use strict";
1550
1561
  var mediaelement = webshims.mediaelement;
1551
1562
  var id = new Date().getTime();
1563
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
1552
1564
  //descriptions are not really shown, but they are inserted into the dom
1553
1565
  var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
1554
1566
  var notImplemented = function(){
@@ -1936,7 +1948,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
1936
1948
  }
1937
1949
 
1938
1950
  trackData = webshims.data(track, 'trackData', {track: obj});
1939
- mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]').andSelf()[0] == track));
1951
+ mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track));
1940
1952
  } else {
1941
1953
  if(supportTrackMod){
1942
1954
  copyProps.forEach(function(copyProp){
@@ -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,52 +909,53 @@ 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
  //additional tests for partial implementation of forms features
952
956
  (function($){
953
957
  "use strict";
958
+ var isWebkit = /webkit/i.test(navigator.userAgent);
954
959
  var Modernizr = window.Modernizr;
955
960
  var webshims = $.webshims;
956
961
  var bugs = webshims.bugs;
@@ -993,80 +998,80 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
993
998
 
994
999
  if(!Modernizr.formvalidation || bugs.bustedValidity){
995
1000
  testRequiredFind();
996
- return;
997
- }
998
-
999
- //create delegatable events
1000
- webshims.capturingEvents(['input']);
1001
- webshims.capturingEvents(['invalid'], true);
1002
-
1003
- if(window.opera || window.testGoodWithFix){
1004
-
1005
- form.appendTo('head');
1006
-
1007
- testRequiredFind();
1008
- bugs.validationMessage = !(inputElem.prop('validationMessage'));
1009
-
1010
- webshims.reTest(['form-native-extend', 'form-message']);
1001
+ } else {
1002
+ //create delegatable events
1003
+ webshims.capturingEvents(['input']);
1004
+ webshims.capturingEvents(['invalid'], true);
1011
1005
 
1012
- form.remove();
1006
+ if(window.opera || window.testGoodWithFix){
1013
1007
 
1014
- $(function(){
1015
- onDomextend(function(){
1016
-
1017
- //Opera shows native validation bubbles in case of input.checkValidity()
1018
- // Opera 11.6/12 hasn't fixed this issue right, it's buggy
1019
- var preventDefault = function(e){
1020
- e.preventDefault();
1021
- };
1008
+ form.appendTo('head');
1009
+
1010
+ testRequiredFind();
1011
+ bugs.validationMessage = !(inputElem.prop('validationMessage'));
1012
+
1013
+ webshims.reTest(['form-native-extend', 'form-message']);
1014
+
1015
+ form.remove();
1022
1016
 
1023
- ['form', 'input', 'textarea', 'select'].forEach(function(name){
1024
- var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
1025
- prop: {
1026
- value: function(){
1027
- if (!webshims.fromSubmit) {
1028
- $(this).on('invalid.checkvalidity', preventDefault);
1029
- }
1030
-
1031
- webshims.fromCheckValidity = true;
1032
- var ret = desc.prop._supvalue.apply(this, arguments);
1033
- if (!webshims.fromSubmit) {
1034
- $(this).unbind('invalid.checkvalidity', preventDefault);
1017
+ $(function(){
1018
+ onDomextend(function(){
1019
+
1020
+ //Opera shows native validation bubbles in case of input.checkValidity()
1021
+ // Opera 11.6/12 hasn't fixed this issue right, it's buggy
1022
+ var preventDefault = function(e){
1023
+ e.preventDefault();
1024
+ };
1025
+
1026
+ ['form', 'input', 'textarea', 'select'].forEach(function(name){
1027
+ var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
1028
+ prop: {
1029
+ value: function(){
1030
+ if (!webshims.fromSubmit) {
1031
+ $(this).on('invalid.checkvalidity', preventDefault);
1032
+ }
1033
+
1034
+ webshims.fromCheckValidity = true;
1035
+ var ret = desc.prop._supvalue.apply(this, arguments);
1036
+ if (!webshims.fromSubmit) {
1037
+ $(this).unbind('invalid.checkvalidity', preventDefault);
1038
+ }
1039
+ webshims.fromCheckValidity = false;
1040
+ return ret;
1035
1041
  }
1036
- webshims.fromCheckValidity = false;
1037
- return ret;
1038
1042
  }
1039
- }
1043
+ });
1040
1044
  });
1045
+
1041
1046
  });
1042
-
1043
1047
  });
1044
- });
1048
+ }
1049
+
1050
+ if(isWebkit && !webshims.bugs.bustedValidity){
1051
+ (function(){
1052
+ var elems = /^(?:textarea|input)$/i;
1053
+ var form = false;
1054
+
1055
+ document.addEventListener('contextmenu', function(e){
1056
+ if(elems.test( e.target.nodeName || '') && (form = e.target.form)){
1057
+ setTimeout(function(){
1058
+ form = false;
1059
+ }, 1);
1060
+ }
1061
+ }, false);
1062
+
1063
+ $(window).on('invalid', function(e){
1064
+ if(e.originalEvent && form && form == e.target.form){
1065
+ e.wrongWebkitInvalid = true;
1066
+ e.stopImmediatePropagation();
1067
+ }
1068
+ });
1069
+
1070
+ })();
1071
+ }
1045
1072
  }
1046
1073
 
1047
- if($.browser.webkit && !webshims.bugs.bustedValidity){
1048
- (function(){
1049
- var elems = /^(?:textarea|input)$/i;
1050
- var form = false;
1051
-
1052
- document.addEventListener('contextmenu', function(e){
1053
- if(elems.test( e.target.nodeName || '') && (form = e.target.form)){
1054
- setTimeout(function(){
1055
- form = false;
1056
- }, 1);
1057
- }
1058
- }, false);
1059
-
1060
- $(window).on('invalid', function(e){
1061
- if(e.originalEvent && form && form == e.target.form){
1062
- e.wrongWebkitInvalid = true;
1063
- e.stopImmediatePropagation();
1064
- }
1065
- });
1066
-
1067
- })();
1068
- }
1069
- })(jQuery);
1074
+
1070
1075
 
1071
1076
  jQuery.webshims.register('form-core', function($, webshims, window, document, undefined, options){
1072
1077
  "use strict";
@@ -1181,7 +1186,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1181
1186
  return false;
1182
1187
  };
1183
1188
 
1184
- if(Modernizr.formvalidation && $.browser.webkit && !webshims.bugs.bustedValidity && webshims.browserVersion < 27){
1189
+ if(Modernizr.formvalidation && isWebkit && !webshims.bugs.bustedValidity){
1185
1190
  (function(){
1186
1191
  var retriggerRadioValidity = function(){
1187
1192
  var validity;
@@ -1360,7 +1365,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1360
1365
 
1361
1366
 
1362
1367
  var setRoot = function(){
1363
- webshims.scrollRoot = ($.browser.webkit || document.compatMode == 'BackCompat') ?
1368
+ webshims.scrollRoot = (isWebkit || document.compatMode == 'BackCompat') ?
1364
1369
  $(document.body) :
1365
1370
  $(document.documentElement)
1366
1371
  ;
@@ -1382,7 +1387,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1382
1387
 
1383
1388
  /* some extra validation UI */
1384
1389
  webshims.validityAlert = (function(){
1385
- var alertElem = (!$.browser.msie || parseInt($.browser.version, 10) > 7) ? 'span' : 'label';
1390
+ var alertElem = 'span';
1386
1391
  var errorBubble;
1387
1392
  var hideTimer = false;
1388
1393
  var focusTimer = false;
@@ -1497,7 +1502,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1497
1502
  errorBubble = api.errorBubble = $('<'+alertElem+' class="validity-alert-wrapper" role="alert"><span class="validity-alert"><span class="va-arrow"><span class="va-arrow-box"></span></span><span class="va-box"></span></span></'+alertElem+'>').css({position: 'absolute', display: 'none'});
1498
1503
  webshims.ready('DOM', function(){
1499
1504
  errorBubble.appendTo('body');
1500
- if($.fn.bgIframe && $.browser.msie && parseInt($.browser.version, 10) < 7){
1505
+ if($.fn.bgIframe){
1501
1506
  errorBubble.bgIframe();
1502
1507
  }
1503
1508
  });
@@ -1577,8 +1582,9 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1577
1582
  });
1578
1583
  });
1579
1584
  }
1580
-
1581
1585
  });
1586
+
1587
+ })(jQuery);
1582
1588
  (function($, Modernizr, webshims){
1583
1589
  "use strict";
1584
1590
  var hasNative = Modernizr.audio && Modernizr.video;
@@ -1631,7 +1637,9 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
1631
1637
  if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
1632
1638
  options.preferFlash = true;
1633
1639
  document.removeEventListener('error', switchOptions, true);
1634
- $('audio, video').mediaLoad();
1640
+ $('audio, video').each(function(){
1641
+ webshims.mediaelement.selectSource(this);
1642
+ });
1635
1643
  webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
1636
1644
  } else if(!hasSwf){
1637
1645
  document.removeEventListener('error', switchOptions, true);
@@ -2035,7 +2043,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2035
2043
  data = data || webshims.data(elem, 'mediaelement');
2036
2044
  stepSources(elem, data, options.preferFlash || undefined, _srces);
2037
2045
  };
2038
-
2046
+ mediaelement.selectSource = selectSource;
2039
2047
 
2040
2048
  $(document).on('ended', function(e){
2041
2049
  var data = webshims.data(e.target, 'mediaelement');
@@ -2101,52 +2109,57 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2101
2109
  var media = $('video, audio', context)
2102
2110
  .add(insertedElement.filter('video, audio'))
2103
2111
  .each(function(){
2104
- if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
2112
+ var data = webshims.data(this, 'mediaelement');
2113
+
2114
+ if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){
2115
+ //IE controls not visible bug
2105
2116
  $(this).prop('preload', 'metadata').mediaLoad();
2106
2117
  } else {
2107
- selectSource(this);
2118
+ selectSource(this, data);
2108
2119
  }
2109
2120
 
2110
-
2111
-
2112
2121
  if(hasNative){
2113
- var bufferTimer;
2114
- var lastBuffered;
2115
- var elem = this;
2116
- var getBufferedString = function(){
2117
- var buffered = $.prop(elem, 'buffered');
2118
- if(!buffered){return;}
2119
- var bufferString = "";
2120
- for(var i = 0, len = buffered.length; i < len;i++){
2121
- bufferString += buffered.end(i);
2122
- }
2123
- return bufferString;
2124
- };
2125
- var testBuffer = function(){
2126
- var buffered = getBufferedString();
2127
- if(buffered != lastBuffered){
2128
- lastBuffered = buffered;
2129
- $(elem).triggerHandler('progress');
2130
- }
2131
- };
2132
2122
 
2133
- $(this)
2134
- .on({
2135
- 'play loadstart progress': function(e){
2136
- if(e.type == 'progress'){
2137
- lastBuffered = getBufferedString();
2138
- }
2139
- clearTimeout(bufferTimer);
2140
- bufferTimer = setTimeout(testBuffer, 999);
2141
- },
2142
- 'emptied stalled mediaerror abort suspend': function(e){
2143
- if(e.type == 'emptied'){
2144
- lastBuffered = false;
2145
- }
2146
- clearTimeout(bufferTimer);
2123
+ //FF progress bug
2124
+ (function(){
2125
+ var bufferTimer;
2126
+ var lastBuffered;
2127
+ var elem = this;
2128
+ var getBufferedString = function(){
2129
+ var buffered = $.prop(elem, 'buffered');
2130
+ if(!buffered){return;}
2131
+ var bufferString = "";
2132
+ for(var i = 0, len = buffered.length; i < len;i++){
2133
+ bufferString += buffered.end(i);
2147
2134
  }
2148
- })
2149
- ;
2135
+ return bufferString;
2136
+ };
2137
+ var testBuffer = function(){
2138
+ var buffered = getBufferedString();
2139
+ if(buffered != lastBuffered){
2140
+ lastBuffered = buffered;
2141
+ $(elem).triggerHandler('progress');
2142
+ }
2143
+ };
2144
+
2145
+ $(this)
2146
+ .on({
2147
+ 'play loadstart progress': function(e){
2148
+ if(e.type == 'progress'){
2149
+ lastBuffered = getBufferedString();
2150
+ }
2151
+ clearTimeout(bufferTimer);
2152
+ bufferTimer = setTimeout(testBuffer, 999);
2153
+ },
2154
+ 'emptied stalled mediaerror abort suspend': function(e){
2155
+ if(e.type == 'emptied'){
2156
+ lastBuffered = false;
2157
+ }
2158
+ clearTimeout(bufferTimer);
2159
+ }
2160
+ })
2161
+ ;
2162
+ })();
2150
2163
  }
2151
2164
 
2152
2165
  })
@@ -2180,6 +2193,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
2180
2193
  "use strict";
2181
2194
  var mediaelement = webshims.mediaelement;
2182
2195
  var id = new Date().getTime();
2196
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
2183
2197
  //descriptions are not really shown, but they are inserted into the dom
2184
2198
  var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
2185
2199
  var notImplemented = function(){
@@ -2567,7 +2581,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
2567
2581
  }
2568
2582
 
2569
2583
  trackData = webshims.data(track, 'trackData', {track: obj});
2570
- mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]').andSelf()[0] == track));
2584
+ mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track));
2571
2585
  } else {
2572
2586
  if(supportTrackMod){
2573
2587
  copyProps.forEach(function(copyProp){