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
@@ -664,8 +664,7 @@ var prepareString = "a"[0] != "a",
664
664
  var defineProperty = 'defineProperty';
665
665
  var advancedObjectProperties = !!(Object.create && Object.defineProperties && Object.getOwnPropertyDescriptor);
666
666
  //safari5 has defineProperty-interface, but it can't be used on dom-object
667
- //only do this test in non-IE browsers, because this hurts dhtml-behavior in some IE8 versions
668
- if (advancedObjectProperties && !$.browser.msie && Object[defineProperty] && Object.prototype.__defineGetter__) {
667
+ if (advancedObjectProperties && Object[defineProperty] && Object.prototype.__defineGetter__) {
669
668
  (function(){
670
669
  try {
671
670
  var foo = document.createElement('foo');
@@ -683,7 +682,7 @@ var prepareString = "a"[0] != "a",
683
682
  })();
684
683
  }
685
684
 
686
- Modernizr.objectAccessor = !!((advancedObjectProperties || (Object.prototype.__defineGetter__ && Object.prototype.__lookupSetter__)) && (!$.browser.opera || shims.browserVersion >= 11));
685
+ Modernizr.objectAccessor = !!((advancedObjectProperties || (Object.prototype.__defineGetter__ && Object.prototype.__lookupSetter__)));
687
686
  Modernizr.advancedObjectProperties = advancedObjectProperties;
688
687
 
689
688
  if((!advancedObjectProperties || !Object.create || !Object.defineProperties || !Object.getOwnPropertyDescriptor || !Object.defineProperty)){
@@ -819,6 +818,11 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
819
818
  var singleVal = function(elem, name, val, pass, _argless){
820
819
  return (_argless) ? oldVal.call($(elem)) : oldVal.call($(elem), val);
821
820
  };
821
+
822
+ $.fn.onTrigger = function(evt, fn){
823
+ return this.on(evt, fn).each(fn);
824
+ };
825
+
822
826
  $.fn.val = function(val){
823
827
  var elem = this[0];
824
828
  if(arguments.length && val == null){
@@ -1013,14 +1017,14 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1013
1017
  });
1014
1018
 
1015
1019
  //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
1016
- var isExtendNativeSave = (!$.browser.msie || parseInt($.browser.version, 10) > 8);
1020
+ var isExtendNativeSave = Modernizr.ES5;
1017
1021
  var extendNativeValue = (function(){
1018
1022
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
1019
1023
  var has = Object.prototype.hasOwnProperty;
1020
1024
  return function(nodeName, prop, desc){
1021
- var elem = document.createElement(nodeName);
1022
- var elemProto = webshims.getPrototypeOf(elem);
1023
- if( isExtendNativeSave && elemProto && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
1025
+ var elem;
1026
+ var elemProto;
1027
+ if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
1024
1028
  var sup = elem[prop];
1025
1029
  desc._supvalue = function(){
1026
1030
  if(sup && sup.apply){
@@ -1220,7 +1224,7 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1220
1224
  docObserve.width = docObserve.getWidth();
1221
1225
 
1222
1226
  }
1223
- $.event.trigger('updateshadowdom');
1227
+ $(document).triggerHandler('updateshadowdom');
1224
1228
  }, (e.type == 'resize') ? 50 : 9);
1225
1229
  },
1226
1230
  _create: function(){
@@ -1264,7 +1268,6 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1264
1268
  };
1265
1269
 
1266
1270
 
1267
- $.event.customEvent.updateshadowdom = true;
1268
1271
  webshims.docObserve = function(){
1269
1272
  webshims.ready('DOM', function(){
1270
1273
  docObserve.start();
@@ -1708,47 +1711,47 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1708
1711
  });
1709
1712
  //html5a11y
1710
1713
  (function($, document){
1711
- var browserVersion = $.webshims.browserVersion;
1712
- if($.browser.mozilla && browserVersion > 5){return;}
1713
- if (!$.browser.msie || (browserVersion < 12 && browserVersion > 7)) {
1714
- var elemMappings = {
1715
- article: "article",
1716
- aside: "complementary",
1717
- section: "region",
1718
- nav: "navigation",
1719
- address: "contentinfo"
1720
- };
1721
- var addRole = function(elem, role){
1722
- var hasRole = elem.getAttribute('role');
1723
- if (!hasRole) {
1724
- elem.setAttribute('role', role);
1725
- }
1726
- };
1727
-
1728
- $.webshims.addReady(function(context, contextElem){
1729
- $.each(elemMappings, function(name, role){
1730
- var elems = $(name, context).add(contextElem.filter(name));
1731
- for (var i = 0, len = elems.length; i < len; i++) {
1732
- addRole(elems[i], role);
1733
- }
1734
- });
1735
- if (context === document) {
1736
- var header = document.getElementsByTagName('header')[0];
1737
- var footers = document.getElementsByTagName('footer');
1738
- var footerLen = footers.length;
1739
- if (header && !$(header).closest('section, article')[0]) {
1740
- addRole(header, 'banner');
1741
- }
1742
- if (!footerLen) {
1743
- return;
1744
- }
1745
- var footer = footers[footerLen - 1];
1746
- if (!$(footer).closest('section, article')[0]) {
1747
- addRole(footer, 'contentinfo');
1748
- }
1714
+ //if we support basic styleing or do not support ARIA (assumed) abort
1715
+ if(!Modernizr.localstorage || ('hidden' in document.createElement('a'))){return;}
1716
+
1717
+ var elemMappings = {
1718
+ article: "article",
1719
+ aside: "complementary",
1720
+ section: "region",
1721
+ nav: "navigation",
1722
+ address: "contentinfo"
1723
+ };
1724
+ var addRole = function(elem, role){
1725
+ var hasRole = elem.getAttribute('role');
1726
+ if (!hasRole) {
1727
+ elem.setAttribute('role', role);
1728
+ }
1729
+ };
1730
+
1731
+ $.webshims.addReady(function(context, contextElem){
1732
+ $.each(elemMappings, function(name, role){
1733
+ var elems = $(name, context).add(contextElem.filter(name));
1734
+ for (var i = 0, len = elems.length; i < len; i++) {
1735
+ addRole(elems[i], role);
1749
1736
  }
1750
1737
  });
1751
- }
1738
+ if (context === document) {
1739
+ var header = document.getElementsByTagName('header')[0];
1740
+ var footers = document.getElementsByTagName('footer');
1741
+ var footerLen = footers.length;
1742
+ if (header && !$(header).closest('section, article')[0]) {
1743
+ addRole(header, 'banner');
1744
+ }
1745
+ if (!footerLen) {
1746
+ return;
1747
+ }
1748
+ var footer = footers[footerLen - 1];
1749
+ if (!$(footer).closest('section, article')[0]) {
1750
+ addRole(footer, 'contentinfo');
1751
+ }
1752
+ }
1753
+ });
1754
+
1752
1755
  })(jQuery, document);
1753
1756
 
1754
1757
  (function($, Modernizr, webshims){
@@ -1803,7 +1806,9 @@ jQuery.webshims.register('dom-extend', function($, webshims, window, document, u
1803
1806
  if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
1804
1807
  options.preferFlash = true;
1805
1808
  document.removeEventListener('error', switchOptions, true);
1806
- $('audio, video').mediaLoad();
1809
+ $('audio, video').each(function(){
1810
+ webshims.mediaelement.selectSource(this);
1811
+ });
1807
1812
  webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
1808
1813
  } else if(!hasSwf){
1809
1814
  document.removeEventListener('error', switchOptions, true);
@@ -2207,7 +2212,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2207
2212
  data = data || webshims.data(elem, 'mediaelement');
2208
2213
  stepSources(elem, data, options.preferFlash || undefined, _srces);
2209
2214
  };
2210
-
2215
+ mediaelement.selectSource = selectSource;
2211
2216
 
2212
2217
  $(document).on('ended', function(e){
2213
2218
  var data = webshims.data(e.target, 'mediaelement');
@@ -2273,52 +2278,57 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2273
2278
  var media = $('video, audio', context)
2274
2279
  .add(insertedElement.filter('video, audio'))
2275
2280
  .each(function(){
2276
- if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
2281
+ var data = webshims.data(this, 'mediaelement');
2282
+
2283
+ if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){
2284
+ //IE controls not visible bug
2277
2285
  $(this).prop('preload', 'metadata').mediaLoad();
2278
2286
  } else {
2279
- selectSource(this);
2287
+ selectSource(this, data);
2280
2288
  }
2281
2289
 
2282
-
2283
-
2284
2290
  if(hasNative){
2285
- var bufferTimer;
2286
- var lastBuffered;
2287
- var elem = this;
2288
- var getBufferedString = function(){
2289
- var buffered = $.prop(elem, 'buffered');
2290
- if(!buffered){return;}
2291
- var bufferString = "";
2292
- for(var i = 0, len = buffered.length; i < len;i++){
2293
- bufferString += buffered.end(i);
2294
- }
2295
- return bufferString;
2296
- };
2297
- var testBuffer = function(){
2298
- var buffered = getBufferedString();
2299
- if(buffered != lastBuffered){
2300
- lastBuffered = buffered;
2301
- $(elem).triggerHandler('progress');
2302
- }
2303
- };
2304
2291
 
2305
- $(this)
2306
- .on({
2307
- 'play loadstart progress': function(e){
2308
- if(e.type == 'progress'){
2309
- lastBuffered = getBufferedString();
2310
- }
2311
- clearTimeout(bufferTimer);
2312
- bufferTimer = setTimeout(testBuffer, 999);
2313
- },
2314
- 'emptied stalled mediaerror abort suspend': function(e){
2315
- if(e.type == 'emptied'){
2316
- lastBuffered = false;
2317
- }
2318
- clearTimeout(bufferTimer);
2292
+ //FF progress bug
2293
+ (function(){
2294
+ var bufferTimer;
2295
+ var lastBuffered;
2296
+ var elem = this;
2297
+ var getBufferedString = function(){
2298
+ var buffered = $.prop(elem, 'buffered');
2299
+ if(!buffered){return;}
2300
+ var bufferString = "";
2301
+ for(var i = 0, len = buffered.length; i < len;i++){
2302
+ bufferString += buffered.end(i);
2319
2303
  }
2320
- })
2321
- ;
2304
+ return bufferString;
2305
+ };
2306
+ var testBuffer = function(){
2307
+ var buffered = getBufferedString();
2308
+ if(buffered != lastBuffered){
2309
+ lastBuffered = buffered;
2310
+ $(elem).triggerHandler('progress');
2311
+ }
2312
+ };
2313
+
2314
+ $(this)
2315
+ .on({
2316
+ 'play loadstart progress': function(e){
2317
+ if(e.type == 'progress'){
2318
+ lastBuffered = getBufferedString();
2319
+ }
2320
+ clearTimeout(bufferTimer);
2321
+ bufferTimer = setTimeout(testBuffer, 999);
2322
+ },
2323
+ 'emptied stalled mediaerror abort suspend': function(e){
2324
+ if(e.type == 'emptied'){
2325
+ lastBuffered = false;
2326
+ }
2327
+ clearTimeout(bufferTimer);
2328
+ }
2329
+ })
2330
+ ;
2331
+ })();
2322
2332
  }
2323
2333
 
2324
2334
  })
@@ -2805,19 +2815,29 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2805
2815
  var hidevents = hideEvtArray.map(function(evt){
2806
2816
  return evt +'.webshimspolyfill';
2807
2817
  }).join(' ');
2808
-
2818
+ var opposite = {
2819
+ 'html5': 'third',
2820
+ 'third': 'html5'
2821
+ };
2809
2822
  var hidePlayerEvents = function(event){
2810
2823
  var data = webshims.data(event.target, 'mediaelement');
2811
2824
  if(!data){return;}
2812
2825
  var isNativeHTML5 = ( event.originalEvent && event.originalEvent.type === event.type );
2813
2826
  if( isNativeHTML5 == (data.activating == 'third') ){
2814
2827
  event.stopImmediatePropagation();
2815
- if(stopEvents[event.type] && data.isActive != data.activating){
2816
- $(event.target).pause();
2828
+ if(stopEvents[event.type]){
2829
+ if(data.isActive != data.activating){
2830
+ $(event.target).pause();
2831
+ } else {
2832
+ data.isActive = opposite[data.isActive];
2833
+ $(event.target).pause();
2834
+ data.isActive = opposite[data.isActive];
2835
+ }
2817
2836
  }
2818
2837
  }
2819
2838
  };
2820
2839
 
2840
+
2821
2841
  addMediaToStopEvents = function(elem){
2822
2842
  $(elem)
2823
2843
  .off(hidevents)
@@ -2949,6 +2969,10 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
2949
2969
  overflow: 'hidden'
2950
2970
  })
2951
2971
  ;
2972
+ var setDimensions = function(){
2973
+ setElementDimension(data, $.prop(elem, 'controls'));
2974
+ };
2975
+
2952
2976
  data = webshims.data(elem, 'mediaelement', webshims.objectCreate(playerStateObj, {
2953
2977
  actionQueue: {
2954
2978
  value: []
@@ -3021,9 +3045,9 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
3021
3045
 
3022
3046
  options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
3023
3047
 
3024
- $(elem).on('updatemediaelementdimensions updateshadowdom', function(){
3025
- setElementDimension(data, $.prop(elem, 'controls'));
3026
- });
3048
+
3049
+ $(document).on('updateshadowdom', setDimensions);
3050
+ $(elem).on('updatemediaelementdimensions', setDimensions);
3027
3051
 
3028
3052
 
3029
3053
  swfobject.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.0", false, vars, params, attrs, function(swfData){
@@ -3226,9 +3250,8 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
3226
3250
  mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop');
3227
3251
  });
3228
3252
 
3229
- if(hasFlash){
3253
+ if(hasFlash && $.cleanData){
3230
3254
  var oldClean = $.cleanData;
3231
- var gcBrowser = $.browser.msie && webshims.browserVersion < 9;
3232
3255
  var flashNames = {
3233
3256
  object: 1,
3234
3257
  OBJECT: 1
@@ -3245,15 +3268,13 @@ jQuery.webshims.register('mediaelement-swf', function($, webshims, window, docum
3245
3268
  elems[i][SENDEVENT]('play', false);
3246
3269
  } catch(er){}
3247
3270
  }
3248
- if(gcBrowser){
3249
- try {
3250
- for (prop in elems[i]) {
3251
- if (typeof elems[i][prop] == "function") {
3252
- elems[i][prop] = null;
3253
- }
3271
+ try {
3272
+ for (prop in elems[i]) {
3273
+ if (typeof elems[i][prop] == "function") {
3274
+ elems[i][prop] = null;
3254
3275
  }
3255
- } catch(er){}
3256
- }
3276
+ }
3277
+ } catch(er){}
3257
3278
  }
3258
3279
  }
3259
3280
 
@@ -3313,6 +3334,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
3313
3334
  "use strict";
3314
3335
  var mediaelement = webshims.mediaelement;
3315
3336
  var id = new Date().getTime();
3337
+ var ADDBACK = $.fn.addBack ? 'addBack' : 'andSelf';
3316
3338
  //descriptions are not really shown, but they are inserted into the dom
3317
3339
  var showTracks = {subtitles: 1, captions: 1, descriptions: 1};
3318
3340
  var notImplemented = function(){
@@ -3700,7 +3722,7 @@ jQuery.webshims.register('track', function($, webshims, window, document, undefi
3700
3722
  }
3701
3723
 
3702
3724
  trackData = webshims.data(track, 'trackData', {track: obj});
3703
- mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]').andSelf()[0] == track));
3725
+ mediaelement.loadTextTrack(mediaelem, track, trackData, ($.prop(track, 'default') && $(track).siblings('track[default]')[ADDBACK]()[0] == track));
3704
3726
  } else {
3705
3727
  if(supportTrackMod){
3706
3728
  copyProps.forEach(function(copyProp){
@@ -1,6 +1,7 @@
1
1
  //additional tests for partial implementation of forms features
2
2
  (function($){
3
3
  "use strict";
4
+ var isWebkit = /webkit/i.test(navigator.userAgent);
4
5
  var Modernizr = window.Modernizr;
5
6
  var webshims = $.webshims;
6
7
  var bugs = webshims.bugs;
@@ -43,80 +44,80 @@
43
44
 
44
45
  if(!Modernizr.formvalidation || bugs.bustedValidity){
45
46
  testRequiredFind();
46
- return;
47
- }
48
-
49
- //create delegatable events
50
- webshims.capturingEvents(['input']);
51
- webshims.capturingEvents(['invalid'], true);
52
-
53
- if(window.opera || window.testGoodWithFix){
54
-
55
- form.appendTo('head');
56
-
57
- testRequiredFind();
58
- bugs.validationMessage = !(inputElem.prop('validationMessage'));
59
-
60
- webshims.reTest(['form-native-extend', 'form-message']);
47
+ } else {
48
+ //create delegatable events
49
+ webshims.capturingEvents(['input']);
50
+ webshims.capturingEvents(['invalid'], true);
61
51
 
62
- form.remove();
52
+ if(window.opera || window.testGoodWithFix){
63
53
 
64
- $(function(){
65
- onDomextend(function(){
66
-
67
- //Opera shows native validation bubbles in case of input.checkValidity()
68
- // Opera 11.6/12 hasn't fixed this issue right, it's buggy
69
- var preventDefault = function(e){
70
- e.preventDefault();
71
- };
54
+ form.appendTo('head');
55
+
56
+ testRequiredFind();
57
+ bugs.validationMessage = !(inputElem.prop('validationMessage'));
58
+
59
+ webshims.reTest(['form-native-extend', 'form-message']);
60
+
61
+ form.remove();
72
62
 
73
- ['form', 'input', 'textarea', 'select'].forEach(function(name){
74
- var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
75
- prop: {
76
- value: function(){
77
- if (!webshims.fromSubmit) {
78
- $(this).on('invalid.checkvalidity', preventDefault);
79
- }
80
-
81
- webshims.fromCheckValidity = true;
82
- var ret = desc.prop._supvalue.apply(this, arguments);
83
- if (!webshims.fromSubmit) {
84
- $(this).unbind('invalid.checkvalidity', preventDefault);
63
+ $(function(){
64
+ onDomextend(function(){
65
+
66
+ //Opera shows native validation bubbles in case of input.checkValidity()
67
+ // Opera 11.6/12 hasn't fixed this issue right, it's buggy
68
+ var preventDefault = function(e){
69
+ e.preventDefault();
70
+ };
71
+
72
+ ['form', 'input', 'textarea', 'select'].forEach(function(name){
73
+ var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
74
+ prop: {
75
+ value: function(){
76
+ if (!webshims.fromSubmit) {
77
+ $(this).on('invalid.checkvalidity', preventDefault);
78
+ }
79
+
80
+ webshims.fromCheckValidity = true;
81
+ var ret = desc.prop._supvalue.apply(this, arguments);
82
+ if (!webshims.fromSubmit) {
83
+ $(this).unbind('invalid.checkvalidity', preventDefault);
84
+ }
85
+ webshims.fromCheckValidity = false;
86
+ return ret;
85
87
  }
86
- webshims.fromCheckValidity = false;
87
- return ret;
88
88
  }
89
- }
89
+ });
90
90
  });
91
+
91
92
  });
92
-
93
93
  });
94
- });
94
+ }
95
+
96
+ if(isWebkit && !webshims.bugs.bustedValidity){
97
+ (function(){
98
+ var elems = /^(?:textarea|input)$/i;
99
+ var form = false;
100
+
101
+ document.addEventListener('contextmenu', function(e){
102
+ if(elems.test( e.target.nodeName || '') && (form = e.target.form)){
103
+ setTimeout(function(){
104
+ form = false;
105
+ }, 1);
106
+ }
107
+ }, false);
108
+
109
+ $(window).on('invalid', function(e){
110
+ if(e.originalEvent && form && form == e.target.form){
111
+ e.wrongWebkitInvalid = true;
112
+ e.stopImmediatePropagation();
113
+ }
114
+ });
115
+
116
+ })();
117
+ }
95
118
  }
96
119
 
97
- if($.browser.webkit && !webshims.bugs.bustedValidity){
98
- (function(){
99
- var elems = /^(?:textarea|input)$/i;
100
- var form = false;
101
-
102
- document.addEventListener('contextmenu', function(e){
103
- if(elems.test( e.target.nodeName || '') && (form = e.target.form)){
104
- setTimeout(function(){
105
- form = false;
106
- }, 1);
107
- }
108
- }, false);
109
-
110
- $(window).on('invalid', function(e){
111
- if(e.originalEvent && form && form == e.target.form){
112
- e.wrongWebkitInvalid = true;
113
- e.stopImmediatePropagation();
114
- }
115
- });
116
-
117
- })();
118
- }
119
- })(jQuery);
120
+
120
121
 
121
122
  jQuery.webshims.register('form-core', function($, webshims, window, document, undefined, options){
122
123
  "use strict";
@@ -231,7 +232,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
231
232
  return false;
232
233
  };
233
234
 
234
- if(Modernizr.formvalidation && $.browser.webkit && !webshims.bugs.bustedValidity && webshims.browserVersion < 27){
235
+ if(Modernizr.formvalidation && isWebkit && !webshims.bugs.bustedValidity){
235
236
  (function(){
236
237
  var retriggerRadioValidity = function(){
237
238
  var validity;
@@ -410,7 +411,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
410
411
 
411
412
 
412
413
  var setRoot = function(){
413
- webshims.scrollRoot = ($.browser.webkit || document.compatMode == 'BackCompat') ?
414
+ webshims.scrollRoot = (isWebkit || document.compatMode == 'BackCompat') ?
414
415
  $(document.body) :
415
416
  $(document.documentElement)
416
417
  ;
@@ -432,7 +433,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
432
433
 
433
434
  /* some extra validation UI */
434
435
  webshims.validityAlert = (function(){
435
- var alertElem = (!$.browser.msie || parseInt($.browser.version, 10) > 7) ? 'span' : 'label';
436
+ var alertElem = 'span';
436
437
  var errorBubble;
437
438
  var hideTimer = false;
438
439
  var focusTimer = false;
@@ -547,7 +548,7 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
547
548
  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'});
548
549
  webshims.ready('DOM', function(){
549
550
  errorBubble.appendTo('body');
550
- if($.fn.bgIframe && $.browser.msie && parseInt($.browser.version, 10) < 7){
551
+ if($.fn.bgIframe){
551
552
  errorBubble.bgIframe();
552
553
  }
553
554
  });
@@ -627,8 +628,9 @@ jQuery.webshims.register('form-core', function($, webshims, window, document, un
627
628
  });
628
629
  });
629
630
  }
630
-
631
631
  });
632
+
633
+ })(jQuery);
632
634
  if(!Modernizr.formvalidation || jQuery.webshims.bugs.bustedValidity){
633
635
  jQuery.webshims.register('form-shim-extend', function($, webshims, window, document){
634
636
  "use strict";
@@ -982,7 +984,7 @@ webshims.defineNodeNamesBooleanProperty(['input', 'textarea', 'select'], 'requir
982
984
  set: function(value){
983
985
  $(this).getShadowFocusElement().attr('aria-required', !!(value)+'');
984
986
  },
985
- initAttr: (!$.browser.msie || webshims.browserVersion > 7)//only if we have aria-support
987
+ initAttr: (Modernizr.localstorage)//only if we have aria-support
986
988
  });
987
989
 
988
990
  webshims.reflectProperties(['input'], ['pattern']);
@@ -1297,14 +1299,13 @@ webshims.defineNodeNameProperty('form', 'noValidate', {
1297
1299
  }
1298
1300
  });
1299
1301
 
1300
- if($.browser.webkit && Modernizr.inputtypes.date){
1302
+ if(Modernizr.inputtypes.date && /webkit/i.test(navigator.userAgent)){
1301
1303
  (function(){
1302
1304
 
1303
1305
  var noInputTriggerEvts = {updateInput: 1, input: 1},
1304
1306
  fixInputTypes = {
1305
1307
  date: 1,
1306
- time: 1,
1307
- "datetime-local": 1
1308
+ time: 1
1308
1309
  },
1309
1310
  noFocusEvents = {
1310
1311
  focusout: 1,
@@ -1728,8 +1729,7 @@ try {
1728
1729
 
1729
1730
  (function(){
1730
1731
  Modernizr.textareaPlaceholder = !!('placeholder' in $('<textarea />')[0]);
1731
- var bustedTextarea = $.browser.webkit && Modernizr.textareaPlaceholder && webshims.browserVersion < 535;
1732
- if(Modernizr.input.placeholder && Modernizr.textareaPlaceholder && !bustedTextarea){return;}
1732
+ if(Modernizr.input.placeholder && Modernizr.textareaPlaceholder){return;}
1733
1733
 
1734
1734
  var isOver = (webshims.cfg.forms.placeholderType == 'over');
1735
1735
  var isResponsive = (webshims.cfg.forms.responsivePlaceholder);
@@ -1931,8 +1931,8 @@ try {
1931
1931
  data.text.css('padding'+ side, size);
1932
1932
  });
1933
1933
 
1934
- $(elem)
1935
- .on('updateshadowdom', function(){
1934
+ $(document)
1935
+ .onTrigger('updateshadowdom', function(){
1936
1936
  var height, width;
1937
1937
  if((width = elem.offsetWidth) || (height = elem.offsetHeight)){
1938
1938
  data.text
@@ -1944,7 +1944,6 @@ try {
1944
1944
  ;
1945
1945
  }
1946
1946
  })
1947
- .triggerHandler('updateshadowdom')
1948
1947
  ;
1949
1948
 
1950
1949
  } else {
@@ -2000,17 +1999,11 @@ try {
2000
1999
  attr: {
2001
2000
  set: function(val){
2002
2001
  var elem = this;
2003
- if(bustedTextarea){
2004
- webshims.data(elem, 'textareaPlaceholder', val);
2005
- elem.placeholder = '';
2006
- } else {
2007
- webshims.contentAttr(elem, 'placeholder', val);
2008
- }
2002
+ webshims.contentAttr(elem, 'placeholder', val);
2009
2003
  pHolder.update(elem, val);
2010
2004
  },
2011
2005
  get: function(){
2012
- var ret = (bustedTextarea) ? webshims.data(this, 'textareaPlaceholder') : '';
2013
- return ret || webshims.contentAttr(this, 'placeholder');
2006
+ return webshims.contentAttr(this, 'placeholder');
2014
2007
  }
2015
2008
  },
2016
2009
  reflect: true,
@@ -2026,13 +2019,9 @@ try {
2026
2019
  placeholderValueDesc[propType] = {
2027
2020
  set: function(val){
2028
2021
  var elem = this;
2029
- var placeholder;
2030
- if(bustedTextarea){
2031
- placeholder = webshims.data(elem, 'textareaPlaceholder');
2032
- }
2033
- if(!placeholder){
2034
- placeholder = webshims.contentAttr(elem, 'placeholder');
2035
- }
2022
+ var placeholder = webshims.contentAttr(elem, 'placeholder');
2023
+
2024
+
2036
2025
  $.removeData(elem, 'cachedValidity');
2037
2026
  var ret = desc[propType]._supset.call(elem, val);
2038
2027
  if(placeholder && 'value' in elem){
@@ -2593,7 +2582,6 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
2593
2582
  range: 1,
2594
2583
  date: 1
2595
2584
  };
2596
- var lteie6 = ($.browser.msie && parseInt($.browser.version, 10) < 7);
2597
2585
  var globStoredOptions = {};
2598
2586
  var getStoredOptions = function(name){
2599
2587
  if(!name){return [];}
@@ -2877,7 +2865,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
2877
2865
  this.arrayOptions = allOptions;
2878
2866
  this.shadowList.html('<div class="datalist-outer-box"><div class="datalist-box"><ul role="list">'+ list.join("\n") +'</ul></div></div>');
2879
2867
 
2880
- if($.fn.bgIframe && lteie6){
2868
+ if($.fn.bgIframe){
2881
2869
  this.shadowList.bgIframe();
2882
2870
  }
2883
2871