webshims-rails 1.12.3 → 1.12.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +75 -31
  4. data/vendor/assets/javascripts/webshims/shims/color-picker.js +14 -14
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +83 -459
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +92 -69
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +90 -54
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +104 -494
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +66 -228
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +2 -0
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +42 -40
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +105 -494
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +90 -54
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +90 -54
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +123 -471
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +85 -474
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +85 -205
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +103 -45
  19. data/vendor/assets/javascripts/webshims/shims/combos/22.js +41 -40
  20. data/vendor/assets/javascripts/webshims/shims/combos/23.js +63 -454
  21. data/vendor/assets/javascripts/webshims/shims/combos/24.js +52 -36
  22. data/vendor/assets/javascripts/webshims/shims/combos/25.js +123 -471
  23. data/vendor/assets/javascripts/webshims/shims/combos/26.js +2 -15
  24. data/vendor/assets/javascripts/webshims/shims/combos/27.js +38 -266
  25. data/vendor/assets/javascripts/webshims/shims/combos/28.js +20 -20
  26. data/vendor/assets/javascripts/webshims/shims/combos/3.js +24 -20
  27. data/vendor/assets/javascripts/webshims/shims/combos/30.js +24 -20
  28. data/vendor/assets/javascripts/webshims/shims/combos/31.js +22 -20
  29. data/vendor/assets/javascripts/webshims/shims/combos/4.js +4 -15
  30. data/vendor/assets/javascripts/webshims/shims/combos/5.js +90 -54
  31. data/vendor/assets/javascripts/webshims/shims/combos/6.js +90 -54
  32. data/vendor/assets/javascripts/webshims/shims/combos/7.js +87 -474
  33. data/vendor/assets/javascripts/webshims/shims/combos/8.js +87 -474
  34. data/vendor/assets/javascripts/webshims/shims/combos/9.js +92 -69
  35. data/vendor/assets/javascripts/webshims/shims/combos/99.js +1724 -0
  36. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +2 -15
  37. data/vendor/assets/javascripts/webshims/shims/form-core.js +19 -4
  38. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +39 -5
  39. data/vendor/assets/javascripts/webshims/shims/form-message.js +2 -0
  40. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +69 -37
  41. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +18 -20
  42. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +34 -16
  43. data/vendor/assets/javascripts/webshims/shims/form-validation.js +12 -9
  44. data/vendor/assets/javascripts/webshims/shims/form-validators.js +21 -5
  45. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +16 -13
  46. data/vendor/assets/javascripts/webshims/shims/geolocation.js +3 -3
  47. data/vendor/assets/javascripts/webshims/shims/jajax.js +1262 -0
  48. data/vendor/assets/javascripts/webshims/shims/jme/b.js +576 -0
  49. data/vendor/assets/javascripts/webshims/shims/jme/c.js +1148 -0
  50. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +373 -0
  51. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +711 -0
  52. data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
  53. data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +36 -0
  54. data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +16 -18
  57. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +25 -188
  58. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +58 -2
  59. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +130 -66
  60. data/vendor/assets/javascripts/webshims/shims/range-ui.js +21 -17
  61. data/vendor/assets/javascripts/webshims/shims/sizzle.js +1634 -1613
  62. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +5 -5
  63. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +5 -1
  64. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +13 -9
  65. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +136 -0
  66. data/vendor/assets/javascripts/webshims/shims/swfmini.js +38 -266
  67. data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -3
  68. data/vendor/assets/javascripts/webshims/shims/track.js +41 -40
  69. metadata +13 -2
@@ -2062,7 +2062,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2062
2062
  $.each({ Height: "getHeight", Width: "getWidth" }, function(name, type){
2063
2063
  var body = document.body;
2064
2064
  var doc = document.documentElement;
2065
- docObserve[type] = function(){
2065
+ docObserve[type] = function (){
2066
2066
  return Math.max(
2067
2067
  body[ "scroll" + name ], doc[ "scroll" + name ],
2068
2068
  body[ "offset" + name ], doc[ "offset" + name ],
@@ -2077,24 +2077,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2077
2077
  this._create();
2078
2078
  this.height = docObserve.getHeight();
2079
2079
  this.width = docObserve.getWidth();
2080
- setInterval(this.test, 600);
2080
+ setInterval(this.test, 999);
2081
2081
  $(this.test);
2082
2082
  webshims.ready('WINDOWLOAD', this.test);
2083
2083
  $(document).on('updatelayout.webshim pageinit popupafteropen panelbeforeopen tabsactivate collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel', this.handler);
2084
2084
  $(window).on('resize', this.handler);
2085
- (function(){
2086
- var oldAnimate = $.fn.animate;
2087
- var animationTimer;
2088
-
2089
- $.fn.animate = function(){
2090
- clearTimeout(animationTimer);
2091
- animationTimer = setTimeout(function(){
2092
- docObserve.test();
2093
- }, 99);
2094
-
2095
- return oldAnimate.apply(this, arguments);
2096
- };
2097
- })();
2098
2085
  }
2099
2086
  }
2100
2087
  };
@@ -2591,7 +2578,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2591
2578
  });
2592
2579
  ;(function(Modernizr, webshims){
2593
2580
  "use strict";
2594
- var $ = webshims.$;
2595
2581
  var hasNative = Modernizr.audio && Modernizr.video;
2596
2582
  var supportsLoop = false;
2597
2583
  var bugs = webshims.bugs;
@@ -2604,6 +2590,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2604
2590
  }
2605
2591
  });
2606
2592
  };
2593
+
2607
2594
  var wsCfg = webshims.cfg;
2608
2595
  var options = wsCfg.mediaelement;
2609
2596
  var hasFullTrackSupport;
@@ -2612,74 +2599,36 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2612
2599
  webshims.error("mediaelement wasn't implemented but loaded");
2613
2600
  return;
2614
2601
  }
2602
+
2615
2603
  if(hasNative){
2616
2604
  var videoElem = document.createElement('video');
2617
2605
  Modernizr.videoBuffered = ('buffered' in videoElem);
2618
2606
  Modernizr.mediaDefaultMuted = ('defaultMuted' in videoElem);
2619
2607
  supportsLoop = ('loop' in videoElem);
2620
-
2608
+ Modernizr.mediaLoop = supportsLoop;
2609
+
2621
2610
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
2622
2611
 
2623
- if(!Modernizr.videoBuffered ){
2612
+ if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && navigator.userAgent.indexOf('MSIE') != -1 && 'ActiveXObject' in window) ){
2624
2613
  webshims.addPolyfill('mediaelement-native-fix', {
2625
2614
  d: ['dom-support']
2626
2615
  });
2627
2616
  webshims.loader.loadList(['mediaelement-native-fix']);
2628
2617
  }
2629
-
2630
- if(!options.preferFlash){
2631
- var noSwitch = {
2632
- 1: 1
2633
- };
2634
- var switchOptions = function(e){
2635
- var media, error, parent;
2636
- if(!options.preferFlash &&
2637
- ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
2638
- (media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code]
2639
- ){
2640
-
2641
- $(function(){
2642
- if(hasSwf && !options.preferFlash){
2643
- loadSwf();
2644
- webshims.ready('WINDOWLOAD '+swfType, function(){
2645
- setTimeout(function(){
2646
- if(!options.preferFlash && webshims.mediaelement.createSWF && !media.is('.nonnative-api-active')){
2647
- options.preferFlash = true;
2648
- document.removeEventListener('error', switchOptions, true);
2649
- $('audio, video').each(function(){
2650
- webshims.mediaelement.selectSource(this);
2651
- });
2652
- webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error')+ 'first error: '+ error);
2653
- }
2654
- }, 9);
2655
- });
2656
- } else{
2657
- document.removeEventListener('error', switchOptions, true);
2658
- }
2659
- });
2660
- }
2661
- };
2662
- document.addEventListener('error', switchOptions, true);
2663
- $('audio, video').each(function(){
2664
- var error = $.prop(this, 'error');
2665
- if(error && !noSwitch[error]){
2666
- switchOptions({target: this});
2667
- return false;
2668
- }
2669
- });
2670
- }
2671
2618
  }
2672
2619
 
2673
2620
  if(Modernizr.track && !bugs.track){
2674
2621
  (function(){
2675
-
2676
- if(!bugs.track){
2677
- bugs.track = typeof $('<track />')[0].readyState != 'number';
2678
- }
2679
-
2680
2622
  if(!bugs.track){
2623
+
2624
+ if(window.VTTCue && !window.TextTrackCue){
2625
+ window.TextTrackCue = window.VTTCue;
2626
+ } else if(!window.VTTCue){
2627
+ window.VTTCue = window.TextTrackCue;
2628
+ }
2629
+
2681
2630
  try {
2682
- new TextTrackCue(2, 3, '');
2631
+ new VTTCue(2, 3, '');
2683
2632
  } catch(e){
2684
2633
  bugs.track = true;
2685
2634
  }
@@ -2715,6 +2664,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2715
2664
  }
2716
2665
  data.streamId = data.streamId.join('/');
2717
2666
  };
2667
+
2718
2668
  var getSrcObj = function(elem, nodeName){
2719
2669
  elem = $(elem);
2720
2670
  var src = {src: elem.attr('src') || '', elem: elem, srcProp: elem.prop('src')};
@@ -2784,14 +2734,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2784
2734
  });
2785
2735
  }
2786
2736
  };
2787
- // var loadMediaGroup = function(){
2788
- // if(!loadMediaGroup.loaded){
2789
- // loadMediaGroup.loaded = true;
2790
- // webshims.ready(window.MediaController ? 'WINDOWLOAD' : 'DOM', function(){
2791
- // webshims.loader.loadList(['mediagroup']);
2792
- // });
2793
- // }
2794
- // };
2737
+
2795
2738
  var loadYt = (function(){
2796
2739
  var loaded;
2797
2740
  return function(){
@@ -2816,10 +2759,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2816
2759
  d: ['dom-support']
2817
2760
  });
2818
2761
 
2819
-
2820
- // webshims.addModule('mediagroup', {
2821
- // d: ['mediaelement', 'dom-support']
2822
- // });
2762
+
2823
2763
 
2824
2764
  mediaelement.mimeTypes = {
2825
2765
  audio: {
@@ -2853,7 +2793,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2853
2793
 
2854
2794
  mediaelement.mimeTypes.source = $.extend({}, mediaelement.mimeTypes.audio, mediaelement.mimeTypes.video);
2855
2795
 
2856
- mediaelement.getTypeForSrc = function(src, nodeName, data){
2796
+ mediaelement.getTypeForSrc = function(src, nodeName){
2857
2797
  if(src.indexOf('youtube.com/watch?') != -1 || src.indexOf('youtube.com/v/') != -1){
2858
2798
  return 'video/youtube';
2859
2799
  }
@@ -2891,32 +2831,13 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2891
2831
  }
2892
2832
  return srces;
2893
2833
  } else {
2894
- mediaElem.removeAttr('src').removeAttr('type').find('source').remove();
2895
- if(!$.isArray(srces)){
2896
- srces = [srces];
2897
- }
2898
- srces.forEach(function(src){
2899
- if(typeof src == 'string'){
2900
- src = {src: src};
2901
- }
2902
- mediaElem.append($(document.createElement('source')).attr(src));
2903
- });
2904
-
2834
+ webshims.error('setting sources was removed.');
2905
2835
  }
2906
2836
  };
2907
2837
 
2908
2838
 
2909
- $.fn.loadMediaSrc = function(srces, poster){
2910
- return this.each(function(){
2911
- if(poster !== undefined){
2912
- $(this).removeAttr('poster');
2913
- if(poster){
2914
- $.attr(this, 'poster', poster);
2915
- }
2916
- }
2917
- mediaelement.srces(this, srces);
2918
- $(this).mediaLoad();
2919
- });
2839
+ $.fn.loadMediaSrc = function(){
2840
+ webshims.error('loadMediaSrc was removed.');
2920
2841
  };
2921
2842
 
2922
2843
  mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
@@ -2992,8 +2913,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2992
2913
  var readyType = hasSwf ? swfType : 'mediaelement-yt';
2993
2914
  return function( mediaElem, ret, data ){
2994
2915
  //readd to ready
2995
-
2996
-
2916
+
2997
2917
  webshims.ready(readyType, function(){
2998
2918
  if(mediaelement.createSWF && $(mediaElem).parent()[0]){
2999
2919
  mediaelement.createSWF( mediaElem, ret, data );
@@ -3069,7 +2989,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3069
2989
 
3070
2990
  });
3071
2991
 
3072
- var handleMedia = false;
2992
+ var handleMedia = false;
3073
2993
  var initMediaElements = function(){
3074
2994
  var testFixMedia = function(){
3075
2995
  if(webshims.implement(this, 'mediaelement')){
@@ -3077,50 +2997,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3077
2997
  if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
3078
2998
  $.prop(this, 'muted', true);
3079
2999
  }
3080
- //fixes for FF 12 and IE9/10 || does not hurt, if run in other browsers
3081
- if(hasNative && (!supportsLoop || ('ActiveXObject' in window))){
3082
- var bufferTimer;
3083
- var lastBuffered;
3084
- var elem = this;
3085
- var getBufferedString = function(){
3086
- var buffered = $.prop(elem, 'buffered');
3087
- if(!buffered){return;}
3088
- var bufferString = "";
3089
- for(var i = 0, len = buffered.length; i < len;i++){
3090
- bufferString += buffered.end(i);
3091
- }
3092
- return bufferString;
3093
- };
3094
- var testBuffer = function(){
3095
- var buffered = getBufferedString();
3096
- if(buffered != lastBuffered){
3097
- lastBuffered = buffered;
3098
- webshims.info('needed to trigger progress manually');
3099
- $(elem).triggerHandler('progress');
3100
- }
3101
- };
3102
-
3103
- $(this)
3104
- .on({
3105
- 'play loadstart progress': function(e){
3106
- if(e.type == 'progress'){
3107
- lastBuffered = getBufferedString();
3108
- }
3109
- clearTimeout(bufferTimer);
3110
- bufferTimer = setTimeout(testBuffer, 400);
3111
- },
3112
- 'emptied stalled mediaerror abort suspend': function(e){
3113
- if(e.type == 'emptied'){
3114
- lastBuffered = false;
3115
- }
3116
- clearTimeout(bufferTimer);
3117
- }
3118
- })
3119
- ;
3120
- if('ActiveXObject' in window && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay],.nonnative-api-active)')){
3121
- $(this).prop('preload', 'metadata').mediaLoad();
3122
- }
3123
- }
3124
3000
  }
3125
3001
 
3126
3002
  };
@@ -3133,7 +3009,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3133
3009
  }
3134
3010
 
3135
3011
  ['audio', 'video'].forEach(function(nodeName){
3136
- var supLoad, supController;
3012
+ var supLoad;
3137
3013
  supLoad = webshims.defineNodeNameProperty(nodeName, 'load', {
3138
3014
  prop: {
3139
3015
  value: function(){
@@ -3166,58 +3042,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3166
3042
  }
3167
3043
  }
3168
3044
  });
3169
-
3170
- // supController = webshims.defineNodeNameProperty(nodeName, 'controller', {
3171
- // prop: {
3172
- // get: function(type){
3173
- // if(!loadMediaGroup.loaded){
3174
- // loadMediaGroup();
3175
- // }
3176
- // if(mediaelement.controller){
3177
- // return mediaelement.controller[nodeName].get.apply(this, arguments);
3178
- // }
3179
- // return supController.prop._supget && supController.prop._supget.apply(this, arguments);
3180
- // },
3181
- // set: function(){
3182
- // var that = this;
3183
- // var args = arguments;
3184
- // if(!loadMediaGroup.loaded){
3185
- // loadMediaGroup();
3186
- // }
3187
- // if(mediaelement.controller){
3188
- // return mediaelement.controller[nodeName].set.apply(that, args);
3189
- // } else {
3190
- // webshims.ready('mediagroup', function(){
3191
- // mediaelement.controller[nodeName].set.apply(that, args);
3192
- // });
3193
- // }
3194
- // return supController.prop._supset && supController.prop._supset.apply(this, arguments);
3195
- // }
3196
- // }
3197
- // });
3198
-
3199
- // webshims.ready('mediagroup', function(){
3200
- // mediaelement.controller[nodeName].sup = supController;
3201
- // });
3202
3045
  });
3203
-
3204
- // webshims.onNodeNamesPropertyModify(['audio', 'video'], ['mediaGroup'], {
3205
- // set: function(){
3206
- // var that = this;
3207
- // var args = arguments;
3208
- // if(!loadMediaGroup.loaded){
3209
- // loadMediaGroup();
3210
- // }
3211
- // if(mediaelement.mediagroup){
3212
- // mediaelement.mediagroup.set.apply(that, args);
3213
- // } else {
3214
- // webshims.ready('mediagroup', function(){
3215
- // mediaelement.mediagroup.set.apply(that, args);
3216
- // });
3217
- // }
3218
- // },
3219
- // initAttr: true
3220
- // });
3046
+
3221
3047
 
3222
3048
  webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], {
3223
3049
  set: function(){
@@ -3240,9 +3066,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3240
3066
  if(!loadTrackUi.loaded && $('track', media).length){
3241
3067
  loadTrackUi();
3242
3068
  }
3243
- // if(!loadMediaGroup.loaded && this.getAttribute('mediagroup')){
3244
- // loadMediaGroup();
3245
- // }
3246
3069
  media = null;
3247
3070
  });
3248
3071
  });
@@ -3282,6 +3105,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3282
3105
  }
3283
3106
  webshims.ready('track', loadTrackUi);
3284
3107
  });
3108
+
3285
3109
  })(Modernizr, webshims);
3286
3110
  ;webshims.register('mediaelement-jaris', function($, webshims, window, document, undefined, options){
3287
3111
  "use strict";
@@ -4369,6 +4193,13 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
4369
4193
  loadedSwf--;
4370
4194
  try {
4371
4195
  elems[i].api_pause();
4196
+ if(elems[i].readyState == 4){
4197
+ for (prop in elems[i]) {
4198
+ if (typeof elems[i][prop] == "function") {
4199
+ elems[i][prop] = null;
4200
+ }
4201
+ }
4202
+ }
4372
4203
  } catch(er){}
4373
4204
  }
4374
4205
  }
@@ -4432,6 +4263,17 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
4432
4263
  }
4433
4264
 
4434
4265
  }, 'prop');
4266
+
4267
+
4268
+ if(hasFlash){
4269
+ webshims.ready('WINDOWLOAD', function(){
4270
+ setTimeout(function(){
4271
+ if(!loadedSwf){
4272
+ document.createElement('img').src = playerSwfPath;
4273
+ }
4274
+ }, 9);
4275
+ });
4276
+ }
4435
4277
  } else if(!('media' in document.createElement('source'))){
4436
4278
  webshims.reflectProperties('source', ['media']);
4437
4279
  }
@@ -4490,5 +4332,43 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
4490
4332
  });
4491
4333
  })();
4492
4334
  }
4493
-
4494
- });
4335
+
4336
+
4337
+ if(hasNative && hasFlash && !options.preferFlash){
4338
+ var noSwitch = {
4339
+ 1: 1
4340
+ };
4341
+ var switchOptions = function(e){
4342
+ var media, error, parent;
4343
+ if(!options.preferFlash &&
4344
+ ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
4345
+ (media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code]
4346
+ ){
4347
+
4348
+ if(!options.preferFlash){
4349
+ if(!media.is('.nonnative-api-active')){
4350
+ options.preferFlash = true;
4351
+ document.removeEventListener('error', switchOptions, true);
4352
+ $('audio, video').each(function(){
4353
+ webshims.mediaelement.selectSource(this);
4354
+ });
4355
+ webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error')+ 'first error: '+ error);
4356
+ }
4357
+ } else{
4358
+ document.removeEventListener('error', switchOptions, true);
4359
+ }
4360
+ }
4361
+ };
4362
+ setTimeout(function(){
4363
+ document.addEventListener('error', switchOptions, true);
4364
+ $('audio, video').each(function(){
4365
+ var error = $.prop(this, 'error');
4366
+ if(error && !noSwitch[error]){
4367
+ switchOptions({target: this});
4368
+ return false;
4369
+ }
4370
+ });
4371
+ }, 9);
4372
+ }
4373
+
4374
+ });
@@ -128,8 +128,8 @@
128
128
  if($.ajax){
129
129
  createAjax();
130
130
  } else {
131
- webshims.ready('$ajax', createAjax);
132
- webshims.loader.loadList(['$ajax']);
131
+ webshims.ready('jajax', createAjax);
132
+ webshims.loader.loadList(['jajax']);
133
133
  }
134
134
  clearTimeout(googleTimer);
135
135
  if (!window.google || !window.google.loader) {
@@ -174,7 +174,7 @@
174
174
  })();
175
175
 
176
176
  webshims.ready('WINDOWLOAD', function(){
177
- webshims.loader.loadList(['$ajax']);
177
+ webshims.loader.loadList(['jajax']);
178
178
  });
179
179
  webshims.isReady('geolocation', true);
180
180
  })(webshims.$);
@@ -1412,6 +1412,13 @@
1412
1412
  loadedSwf--;
1413
1413
  try {
1414
1414
  elems[i].api_pause();
1415
+ if(elems[i].readyState == 4){
1416
+ for (prop in elems[i]) {
1417
+ if (typeof elems[i][prop] == "function") {
1418
+ elems[i][prop] = null;
1419
+ }
1420
+ }
1421
+ }
1415
1422
  } catch(er){}
1416
1423
  }
1417
1424
  }
@@ -1475,6 +1482,17 @@
1475
1482
  }
1476
1483
 
1477
1484
  }, 'prop');
1485
+
1486
+
1487
+ if(hasFlash){
1488
+ webshims.ready('WINDOWLOAD', function(){
1489
+ setTimeout(function(){
1490
+ if(!loadedSwf){
1491
+ document.createElement('img').src = playerSwfPath;
1492
+ }
1493
+ }, 9);
1494
+ });
1495
+ }
1478
1496
  } else if(!('media' in document.createElement('source'))){
1479
1497
  webshims.reflectProperties('source', ['media']);
1480
1498
  }
@@ -1533,8 +1551,47 @@
1533
1551
  });
1534
1552
  })();
1535
1553
  }
1536
-
1537
- });;webshims.register('track', function($, webshims, window, document, undefined){
1554
+
1555
+
1556
+ if(hasNative && hasFlash && !options.preferFlash){
1557
+ var noSwitch = {
1558
+ 1: 1
1559
+ };
1560
+ var switchOptions = function(e){
1561
+ var media, error, parent;
1562
+ if(!options.preferFlash &&
1563
+ ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
1564
+ (media = $(e.target).closest('audio, video')) && (error = media.prop('error')) && !noSwitch[error.code]
1565
+ ){
1566
+
1567
+ if(!options.preferFlash){
1568
+ if(!media.is('.nonnative-api-active')){
1569
+ options.preferFlash = true;
1570
+ document.removeEventListener('error', switchOptions, true);
1571
+ $('audio, video').each(function(){
1572
+ webshims.mediaelement.selectSource(this);
1573
+ });
1574
+ webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error')+ 'first error: '+ error);
1575
+ }
1576
+ } else{
1577
+ document.removeEventListener('error', switchOptions, true);
1578
+ }
1579
+ }
1580
+ };
1581
+ setTimeout(function(){
1582
+ document.addEventListener('error', switchOptions, true);
1583
+ $('audio, video').each(function(){
1584
+ var error = $.prop(this, 'error');
1585
+ if(error && !noSwitch[error]){
1586
+ switchOptions({target: this});
1587
+ return false;
1588
+ }
1589
+ });
1590
+ }, 9);
1591
+ }
1592
+
1593
+ });
1594
+ ;webshims.register('track', function($, webshims, window, document, undefined){
1538
1595
  "use strict";
1539
1596
  var mediaelement = webshims.mediaelement;
1540
1597
  var id = new Date().getTime();
@@ -1750,9 +1807,9 @@
1750
1807
  };
1751
1808
  })();
1752
1809
  var emptyDiv = $('<div />')[0];
1753
- var TextTrackCue = function(startTime, endTime, text){
1810
+ function VTTCue(startTime, endTime, text){
1754
1811
  if(arguments.length != 3){
1755
- webshims.error("wrong arguments.length for TextTrackCue.constructor");
1812
+ webshims.error("wrong arguments.length for VTTCue.constructor");
1756
1813
  }
1757
1814
 
1758
1815
  this.startTime = startTime;
@@ -1761,9 +1818,9 @@
1761
1818
 
1762
1819
 
1763
1820
  createEventTarget(this);
1764
- };
1821
+ }
1765
1822
 
1766
- TextTrackCue.prototype = {
1823
+ VTTCue.prototype = {
1767
1824
 
1768
1825
  onenter: null,
1769
1826
  onexit: null,
@@ -1805,11 +1862,14 @@
1805
1862
  // align: 'middle'
1806
1863
  };
1807
1864
 
1808
- window.TextTrackCue = TextTrackCue;
1809
-
1810
-
1811
-
1812
-
1865
+ window.VTTCue = VTTCue;
1866
+ window.TextTrackCue = function(){
1867
+ webshims.error("Use VTTCue constructor instead of abstract TextTrackCue constructor.");
1868
+ VTTCue.apply(this, arguments);
1869
+ };
1870
+
1871
+ window.TextTrackCue.prototype = VTTCue.prototype;
1872
+
1813
1873
  mediaelement.createCueList = function(){
1814
1874
  return $.extend([], cueListProto);
1815
1875
  };
@@ -1854,8 +1914,10 @@
1854
1914
  var loadEvents = 'play playing updatetrackdisplay';
1855
1915
  var obj = trackData.track;
1856
1916
  var load = function(){
1857
- var error, ajax, src, createAjax;
1858
- if(obj.mode != 'disabled' && $.attr(track, 'src') && (src = $.prop(track, 'src'))){
1917
+ var error, ajax, createAjax;
1918
+
1919
+ var src = obj.mode != 'disabled' && ($.attr(track, 'src') && $.prop(track, 'src'));
1920
+ if(src){
1859
1921
  $(mediaelem).off(loadEvents, load);
1860
1922
  if(!trackData.readyState){
1861
1923
  error = function(){
@@ -1893,8 +1955,8 @@
1893
1955
  if($.ajax){
1894
1956
  createAjax();
1895
1957
  } else {
1896
- webshims.ready('$ajax', createAjax);
1897
- webshims.loader.loadList(['$ajax']);
1958
+ webshims.ready('jajax', createAjax);
1959
+ webshims.loader.loadList(['jajax']);
1898
1960
  }
1899
1961
  } catch(er){
1900
1962
  error();
@@ -1991,19 +2053,17 @@ modified for webshims
1991
2053
  mediaelement.parseCaptionChunk = (function(){
1992
2054
  // Set up timestamp parsers
1993
2055
  var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
1994
- var GoogleTimestampParser = /^([\d\.]+)\s+\+([\d\.]+)\s*(.*)/;
1995
2056
  var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
1996
2057
  var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
1997
2058
  var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
1998
2059
 
1999
2060
  return function(subtitleElement,objectCount){
2000
- var cueDefaults = [];
2001
-
2002
- var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, cueSettings = "", id, specialCueData;
2061
+
2062
+ var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id, specialCueData;
2003
2063
  var timestampMatch, tmpCue;
2004
2064
 
2005
2065
  // WebVTT Special Cue Logic
2006
- if ((specialCueData = WebVTTDEFAULTSCueParser.exec(subtitleElement))) {
2066
+ if (WebVTTDEFAULTSCueParser.exec(subtitleElement)) {
2007
2067
  // cueDefaults = specialCueData.slice(2).join("");
2008
2068
  // cueDefaults = cueDefaults.split(/\s+/g).filter(function(def) { return def && !!def.length; });
2009
2069
  return null;
@@ -2080,7 +2140,7 @@ modified for webshims
2080
2140
  return previous;
2081
2141
  },compositeCueSettings);
2082
2142
 
2083
- // Turn back into string like the TextTrackCue constructor expects
2143
+ // Turn back into string like the VTTCue constructor expects
2084
2144
  cueSettings = "";
2085
2145
  for (var key in compositeCueSettings) {
2086
2146
  if (compositeCueSettings.hasOwnProperty(key)) {
@@ -2091,7 +2151,7 @@ modified for webshims
2091
2151
  */
2092
2152
  // The remaining lines are the subtitle payload itself (after removing an ID if present, and the time);
2093
2153
  html = subtitleParts.join("\n");
2094
- tmpCue = new TextTrackCue(timeIn, timeOut, html);
2154
+ tmpCue = new VTTCue(timeIn, timeOut, html);
2095
2155
  if(id){
2096
2156
  tmpCue.id = id;
2097
2157
  }
@@ -2100,10 +2160,10 @@ modified for webshims
2100
2160
  })();
2101
2161
 
2102
2162
  mediaelement.parseCaptions = function(captionData, track, complete) {
2103
- var subtitles = mediaelement.createCueList();
2104
- var cue, lazyProcess, regWevVTT;
2105
- var startDate;
2106
- var isWEBVTT;
2163
+
2164
+ var cue, lazyProcess, regWevVTT, startDate, isWEBVTT;
2165
+
2166
+ mediaelement.createCueList();
2107
2167
  if (captionData) {
2108
2168
 
2109
2169
  regWevVTT = /^WEBVTT(\s*FILE)?/ig;
@@ -2283,7 +2343,6 @@ modified for webshims
2283
2343
  },
2284
2344
  readyState: {
2285
2345
  get: function(){
2286
-
2287
2346
  return (webshims.data(this, 'trackData') || {readyState: 0}).readyState;
2288
2347
  },
2289
2348
  writeable: false
@@ -2348,29 +2407,27 @@ modified for webshims
2348
2407
  e.stopImmediatePropagation();
2349
2408
  }
2350
2409
  };
2351
- var startTrackImplementation = function(){
2410
+ var hideNativeTracks = function(){
2352
2411
  if(webshims.implement(this, 'track')){
2353
- var shimedTrack = $.prop(this, 'track');
2354
- var origTrack = this.track;
2355
2412
  var kind;
2356
- var readyState;
2413
+ var origTrack = this.track;
2357
2414
  if(origTrack){
2358
- kind = $.prop(this, 'kind');
2359
- readyState = getNativeReadyState(this, origTrack);
2360
- if (origTrack.mode || readyState) {
2361
- shimedTrack.mode = numericModes[origTrack.mode] || origTrack.mode;
2415
+
2416
+ if (!webshims.bugs.track && (origTrack.mode || getNativeReadyState(this, origTrack))) {
2417
+ $.prop(this, 'track').mode = numericModes[origTrack.mode] || origTrack.mode;
2362
2418
  }
2363
2419
  //disable track from showing + remove UI
2364
- if(kind != 'descriptions'){
2365
- origTrack.mode = (typeof origTrack.mode == 'string') ? 'disabled' : 0;
2366
- this.kind = 'metadata';
2367
- $(this).attr({kind: kind});
2368
- }
2420
+ kind = $.prop(this, 'kind');
2421
+ origTrack.mode = (typeof origTrack.mode == 'string') ? 'disabled' : 0;
2422
+ this.kind = 'metadata';
2423
+
2424
+ $(this).attr({kind: kind});
2369
2425
 
2370
2426
  }
2371
2427
  $(this).on('load error', stopOriginalEvent);
2372
2428
  }
2373
2429
  };
2430
+
2374
2431
  webshims.addReady(function(context, insertedElement){
2375
2432
  var insertedMedia = insertedElement.filter('video, audio, track').closest('audio, video');
2376
2433
  $('video, audio', context)
@@ -2387,10 +2444,11 @@ modified for webshims
2387
2444
  webshims.error("textTracks couldn't be copied");
2388
2445
  }
2389
2446
 
2390
- $('track', this).each(startTrackImplementation);
2447
+ $('track', this).each(hideNativeTracks);
2391
2448
  }
2392
2449
  })
2393
2450
  ;
2451
+
2394
2452
  insertedMedia.each(function(){
2395
2453
  var media = this;
2396
2454
  var baseData = webshims.data(media, 'mediaelementBase');
@@ -2406,4 +2464,4 @@ modified for webshims
2406
2464
  if(Modernizr.texttrackapi){
2407
2465
  $('video, audio').trigger('trackapichange');
2408
2466
  }
2409
- });
2467
+ });