webshims-rails 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +261 -261
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +534 -534
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +60 -60
  5. data/vendor/assets/javascripts/webshims/minified/extras/custom-validity.js +1 -1
  6. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +24 -24
  7. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/README +82 -82
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +35 -34
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +79 -82
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +45 -44
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +43 -42
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +28 -27
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +4 -4
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +57 -59
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +64 -66
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +53 -54
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +64 -66
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +72 -73
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +42 -46
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +52 -50
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +55 -59
  22. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +66 -64
  23. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +80 -82
  24. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +60 -59
  25. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +79 -81
  26. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +101 -104
  27. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +94 -95
  28. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +26 -29
  29. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +33 -36
  30. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +51 -54
  31. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +27 -28
  32. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +27 -28
  33. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +39 -38
  34. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +65 -68
  35. data/vendor/assets/javascripts/webshims/minified/shims/details.js +4 -4
  36. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +23 -22
  37. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +19 -22
  38. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +14 -14
  39. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +9 -9
  40. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +18 -19
  41. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +45 -43
  42. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +33 -33
  43. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +34 -34
  44. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +12 -12
  45. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +23 -0
  46. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-native-fix.js +1 -1
  47. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +26 -30
  48. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +3 -3
  49. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +689 -686
  50. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  51. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -9
  52. data/vendor/assets/javascripts/webshims/minified/shims/track.js +21 -21
  53. data/vendor/assets/javascripts/webshims/polyfiller.js +1191 -1175
  54. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1754 -1714
  55. data/vendor/assets/javascripts/webshims/shims/combos/10.js +3247 -3320
  56. data/vendor/assets/javascripts/webshims/shims/combos/11.js +1633 -1588
  57. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1636 -1591
  58. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1100 -1058
  59. data/vendor/assets/javascripts/webshims/shims/combos/14.js +476 -476
  60. data/vendor/assets/javascripts/webshims/shims/combos/15.js +316 -314
  61. data/vendor/assets/javascripts/webshims/shims/combos/16.js +2094 -2104
  62. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2258 -2267
  63. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1380 -1364
  64. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2239 -2247
  65. data/vendor/assets/javascripts/webshims/shims/combos/2.js +2339 -2294
  66. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1493 -1606
  67. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1733 -1635
  68. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2295 -2408
  69. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2269 -2168
  70. data/vendor/assets/javascripts/webshims/shims/combos/24.js +2775 -2780
  71. data/vendor/assets/javascripts/webshims/shims/combos/25.js +1505 -1456
  72. data/vendor/assets/javascripts/webshims/shims/combos/26.js +2111 -2115
  73. data/vendor/assets/javascripts/webshims/shims/combos/27.js +3264 -3331
  74. data/vendor/assets/javascripts/webshims/shims/combos/3.js +3020 -2970
  75. data/vendor/assets/javascripts/webshims/shims/combos/4.js +770 -822
  76. data/vendor/assets/javascripts/webshims/shims/combos/5.js +1025 -1077
  77. data/vendor/assets/javascripts/webshims/shims/combos/59.js +1706 -1753
  78. data/vendor/assets/javascripts/webshims/shims/combos/6.js +444 -433
  79. data/vendor/assets/javascripts/webshims/shims/combos/7.js +699 -688
  80. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1488 -1445
  81. data/vendor/assets/javascripts/webshims/shims/combos/9.js +2445 -2518
  82. data/vendor/assets/javascripts/webshims/shims/details.js +148 -146
  83. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +952 -912
  84. data/vendor/assets/javascripts/webshims/shims/es5.js +802 -802
  85. data/vendor/assets/javascripts/webshims/shims/excanvas.js +924 -924
  86. data/vendor/assets/javascripts/webshims/shims/form-core.js +606 -659
  87. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +681 -676
  88. data/vendor/assets/javascripts/webshims/shims/form-message.js +164 -163
  89. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +255 -255
  90. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +383 -383
  91. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +61 -50
  92. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1569 -1472
  93. data/vendor/assets/javascripts/webshims/shims/geolocation.js +168 -168
  94. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ar.js +32 -32
  95. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ch-ZN.js +32 -32
  96. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-de.txt +33 -33
  97. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-el.js +32 -32
  98. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-en.txt +34 -34
  99. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-es.js +31 -31
  100. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-fr.js +32 -32
  101. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-he.js +32 -32
  102. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hi.js +32 -32
  103. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hu.js +32 -32
  104. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-it.js +32 -32
  105. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ja.js +32 -32
  106. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-nl.js +32 -32
  107. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-pt-PT.js +32 -32
  108. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ru.js +31 -31
  109. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-sv.js +32 -32
  110. data/vendor/assets/javascripts/webshims/shims/json-storage.js +308 -308
  111. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +536 -533
  112. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +861 -0
  113. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +98 -98
  114. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +957 -1073
  115. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +543 -543
  116. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +689 -686
  117. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  118. data/vendor/assets/javascripts/webshims/shims/track-ui.js +9 -8
  119. data/vendor/assets/javascripts/webshims/shims/track.js +17 -11
  120. metadata +6 -6
  121. data/vendor/assets/javascripts/webshims/minified/shims/form-native-fix.js +0 -7
  122. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/README +0 -62
  123. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +0 -82
  124. data/vendor/assets/javascripts/webshims/shims/form-native-fix.js +0 -261
@@ -1,534 +1,537 @@
1
- (function($, Modernizr, webshims){
2
- "use strict";
3
- var hasNative = Modernizr.audio && Modernizr.video;
4
- var supportsLoop = false;
5
- var options = webshims.cfg.mediaelement;
6
- var bugs = webshims.bugs;
7
- var loadSwf = function(){
8
- webshims.ready('mediaelement-swf', function(){
9
- if(!webshims.mediaelement.createSWF){
10
- webshims.modules["mediaelement-swf"].test = $.noop;
11
- webshims.reTest(["mediaelement-swf"], hasNative);
12
- }
13
- });
14
- };
15
- var hasSwf;
16
- if(hasNative){
17
- var videoElem = document.createElement('video');
18
- Modernizr.videoBuffered = ('buffered' in videoElem);
19
- supportsLoop = ('loop' in videoElem);
20
-
21
- webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
22
-
23
- if(!Modernizr.videoBuffered){
24
- webshims.addPolyfill('mediaelement-native-fix', {
25
- f: 'mediaelement',
26
- test: Modernizr.videoBuffered,
27
- d: ['dom-support']
28
- });
29
-
30
- webshims.reTest('mediaelement-native-fix');
31
- }
32
- }
33
-
34
- if(hasNative && !options.preferFlash){
35
- var switchOptions = function(e){
36
- var parent = e.target.parentNode;
37
- if(!options.preferFlash && ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) ){
38
- webshims.ready('DOM mediaelement', function(){
39
- if(hasSwf){
40
- loadSwf();
41
- }
42
- webshims.ready('WINDOWLOAD mediaelement-swf', function(){
43
- setTimeout(function(){
44
- if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
45
- options.preferFlash = true;
46
- document.removeEventListener('error', switchOptions, true);
47
- $('audio, video').mediaLoad();
48
- webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
49
- } else if(!hasSwf){
50
- document.removeEventListener('error', switchOptions, true);
51
- }
52
- }, 20);
53
- });
54
- });
55
- }
56
- };
57
- document.addEventListener('error', switchOptions, true);
58
- $('audio, video').each(function(){
59
- if(this.error){
60
- switchOptions({target: this});
61
- }
62
- });
63
- }
64
-
65
- bugs.track = false;
66
-
67
- if(Modernizr.track){
68
- (function(){
69
-
70
- if(!bugs.track){
71
- bugs.track = typeof $('<track />')[0].readyState != 'number';
72
- }
73
-
74
- if(!bugs.track){
75
- try {
76
- new TextTrackCue(2, 3, '');
77
- } catch(e){
78
- bugs.track = true;
79
- }
80
- }
81
-
82
- var trackOptions = webshims.cfg.track;
83
- var trackListener = function(e){
84
- $(e.target).filter('track').each(changeApi);
85
- };
86
- var changeApi = function(){
87
- if(bugs.track || (!trackOptions.override && $.prop(this, 'readyState') == 3)){
88
- trackOptions.override = true;
89
- webshims.reTest('track');
90
- document.removeEventListener('error', trackListener, true);
91
- if(this && $.nodeName(this, 'track')){
92
- webshims.error("track support was overwritten. Please check your vtt including your vtt mime-type");
93
- } else {
94
- webshims.info("track support was overwritten. due to bad browser support");
95
- }
96
- }
97
- };
98
- var detectTrackError = function(){
99
- document.addEventListener('error', trackListener, true);
100
-
101
- if(bugs.track){
102
- changeApi();
103
- } else {
104
- $('track').each(changeApi);
105
- }
106
- };
107
- if(!trackOptions.override){
108
- if(webshims.isReady('track')){
109
- detectTrackError();
110
- } else {
111
- $(detectTrackError);
112
- }
113
- }
114
- })();
115
-
116
- }
117
-
118
- webshims.register('mediaelement-core', function($, webshims, window, document, undefined){
119
- hasSwf = swfobject.hasFlashPlayerVersion('9.0.115');
120
-
121
- var mediaelement = webshims.mediaelement;
122
-
123
- var getSrcObj = function(elem, nodeName){
124
- elem = $(elem);
125
- var src = {src: elem.attr('src') || '', elem: elem, srcProp: elem.prop('src')};
126
- if(!src.src){return src;}
127
- var tmp = elem.attr('type');
128
- if(tmp){
129
- src.type = tmp;
130
- src.container = $.trim(tmp.split(';')[0]);
131
- } else {
132
- if(!nodeName){
133
- nodeName = elem[0].nodeName.toLowerCase();
134
- if(nodeName == 'source'){
135
- nodeName = (elem.closest('video, audio')[0] || {nodeName: 'video'}).nodeName.toLowerCase();
136
- }
137
- }
138
- tmp = mediaelement.getTypeForSrc(src.src, nodeName );
139
-
140
- if(tmp){
141
- src.type = tmp;
142
- src.container = tmp;
143
- }
144
- }
145
- tmp = elem.attr('media');
146
- if(tmp){
147
- src.media = tmp;
148
- }
149
- return src;
150
- };
151
-
152
-
153
-
154
- var hasYt = !hasSwf && ('postMessage' in window) && hasNative;
155
-
156
- var loadYt = (function(){
157
- var loaded;
158
- return function(){
159
- if(loaded || !hasYt){return;}
160
- loaded = true;
161
- webshims.loader.loadScript("https://www.youtube.com/player_api");
162
- $(function(){
163
- webshims.polyfill("mediaelement-yt");
164
- });
165
- };
166
- })();
167
- var loadThird = function(){
168
- if(hasSwf){
169
- loadSwf();
170
- } else {
171
- loadYt();
172
- }
173
- };
174
-
175
- webshims.addPolyfill('mediaelement-yt', {
176
- test: !hasYt,
177
- d: ['dom-support']
178
- });
179
-
180
- mediaelement.mimeTypes = {
181
- audio: {
182
- //ogm shouldn´t be used!
183
- 'audio/ogg': ['ogg','oga', 'ogm'],
184
- 'audio/ogg;codecs="opus"': 'opus',
185
- 'audio/mpeg': ['mp2','mp3','mpga','mpega'],
186
- 'audio/mp4': ['mp4','mpg4', 'm4r', 'm4a', 'm4p', 'm4b', 'aac'],
187
- 'audio/wav': ['wav'],
188
- 'audio/3gpp': ['3gp','3gpp'],
189
- 'audio/webm': ['webm'],
190
- 'audio/fla': ['flv', 'f4a', 'fla'],
191
- 'application/x-mpegURL': ['m3u8', 'm3u']
192
- },
193
- video: {
194
- //ogm shouldn´t be used!
195
- 'video/ogg': ['ogg','ogv', 'ogm'],
196
- 'video/mpeg': ['mpg','mpeg','mpe'],
197
- 'video/mp4': ['mp4','mpg4', 'm4v'],
198
- 'video/quicktime': ['mov','qt'],
199
- 'video/x-msvideo': ['avi'],
200
- 'video/x-ms-asf': ['asf', 'asx'],
201
- 'video/flv': ['flv', 'f4v'],
202
- 'video/3gpp': ['3gp','3gpp'],
203
- 'video/webm': ['webm'],
204
- 'application/x-mpegURL': ['m3u8', 'm3u'],
205
- 'video/MP2T': ['ts']
206
- }
207
- }
208
- ;
209
-
210
- mediaelement.mimeTypes.source = $.extend({}, mediaelement.mimeTypes.audio, mediaelement.mimeTypes.video);
211
-
212
- mediaelement.getTypeForSrc = function(src, nodeName){
213
- if(src.indexOf('youtube.com/watch?') != -1 || src.indexOf('youtube.com/v/') != -1){
214
- return 'video/youtube';
215
- }
216
- src = src.split('?')[0].split('.');
217
- src = src[src.length - 1];
218
- var mt;
219
-
220
- $.each(mediaelement.mimeTypes[nodeName], function(mimeType, exts){
221
- if(exts.indexOf(src) !== -1){
222
- mt = mimeType;
223
- return false;
224
- }
225
- });
226
- return mt;
227
- };
228
-
229
-
230
- mediaelement.srces = function(mediaElem, srces){
231
- mediaElem = $(mediaElem);
232
- if(!srces){
233
- srces = [];
234
- var nodeName = mediaElem[0].nodeName.toLowerCase();
235
- var src = getSrcObj(mediaElem, nodeName);
236
-
237
- if(!src.src){
238
-
239
- $('source', mediaElem).each(function(){
240
- src = getSrcObj(this, nodeName);
241
- if(src.src){srces.push(src);}
242
- });
243
- } else {
244
- srces.push(src);
245
- }
246
- return srces;
247
- } else {
248
- mediaElem.removeAttr('src').removeAttr('type').find('source').remove();
249
- if(!$.isArray(srces)){
250
- srces = [srces];
251
- }
252
- srces.forEach(function(src){
253
- var source = document.createElement('source');
254
- if(typeof src == 'string'){
255
- src = {src: src};
256
- }
257
- source.setAttribute('src', src.src);
258
- if(src.type){
259
- source.setAttribute('type', src.type);
260
- }
261
- if(src.media){
262
- source.setAttribute('media', src.media);
263
- }
264
- mediaElem.append(source);
265
- });
266
-
267
- }
268
- };
269
-
270
-
271
- $.fn.loadMediaSrc = function(srces, poster){
272
- return this.each(function(){
273
- if(poster !== undefined){
274
- $(this).removeAttr('poster');
275
- if(poster){
276
- $.attr(this, 'poster', poster);
277
- }
278
- }
279
- mediaelement.srces(this, srces);
280
- $(this).mediaLoad();
281
- });
282
- };
283
-
284
- 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', 'jwplayer/jwplayer', 'video/youtube'];
285
-
286
- mediaelement.canThirdPlaySrces = function(mediaElem, srces){
287
- var ret = '';
288
- if(hasSwf || hasYt){
289
- mediaElem = $(mediaElem);
290
- srces = srces || mediaelement.srces(mediaElem);
291
- $.each(srces, function(i, src){
292
- if(src.container && src.src && ((hasSwf && mediaelement.swfMimeTypes.indexOf(src.container) != -1) || (hasYt && src.container == 'video/youtube'))){
293
- ret = src;
294
- return false;
295
- }
296
- });
297
-
298
- }
299
-
300
- return ret;
301
- };
302
-
303
- var nativeCanPlayType = {};
304
- mediaelement.canNativePlaySrces = function(mediaElem, srces){
305
- var ret = '';
306
- if(hasNative){
307
- mediaElem = $(mediaElem);
308
- var nodeName = (mediaElem[0].nodeName || '').toLowerCase();
309
- if(!nativeCanPlayType[nodeName]){return ret;}
310
- srces = srces || mediaelement.srces(mediaElem);
311
-
312
- $.each(srces, function(i, src){
313
- if(src.type && nativeCanPlayType[nodeName].prop._supvalue.call(mediaElem[0], src.type) ){
314
- ret = src;
315
- return false;
316
- }
317
- });
318
- }
319
- return ret;
320
- };
321
-
322
- mediaelement.setError = function(elem, message){
323
- if(!message){
324
- message = "can't play sources";
325
- }
326
-
327
- $(elem).pause().data('mediaerror', message);
328
- webshims.warn('mediaelementError: '+ message);
329
- setTimeout(function(){
330
- if($(elem).data('mediaerror')){
331
- $(elem).trigger('mediaerror');
332
- }
333
- }, 1);
334
- };
335
-
336
- var handleThird = (function(){
337
- var requested;
338
- return function( mediaElem, ret, data ){
339
- webshims.ready(hasSwf ? 'mediaelement-swf' : 'mediaelement-yt', function(){
340
- if(mediaelement.createSWF){
341
- mediaelement.createSWF( mediaElem, ret, data );
342
- } else if(!requested) {
343
- requested = true;
344
- loadThird();
345
- //readd to ready
346
- handleThird( mediaElem, ret, data );
347
- }
348
- });
349
- if(!requested && hasYt && !mediaelement.createSWF){
350
- loadYt();
351
- }
352
- };
353
- })();
354
-
355
- var stepSources = function(elem, data, useSwf, _srces, _noLoop){
356
- var ret;
357
- if(useSwf || (useSwf !== false && data && data.isActive == 'third')){
358
- ret = mediaelement.canThirdPlaySrces(elem, _srces);
359
- if(!ret){
360
- if(_noLoop){
361
- mediaelement.setError(elem, false);
362
- } else {
363
- stepSources(elem, data, false, _srces, true);
364
- }
365
- } else {
366
- handleThird(elem, ret, data);
367
- }
368
- } else {
369
- ret = mediaelement.canNativePlaySrces(elem, _srces);
370
- if(!ret){
371
- if(_noLoop){
372
- mediaelement.setError(elem, false);
373
- if(data && data.isActive == 'third') {
374
- mediaelement.setActive(elem, 'html5', data);
375
- }
376
- } else {
377
- stepSources(elem, data, true, _srces, true);
378
- }
379
- } else if(data && data.isActive == 'third') {
380
- mediaelement.setActive(elem, 'html5', data);
381
- }
382
- }
383
- };
384
- var stopParent = /^(?:embed|object|datalist)$/i;
385
- var selectSource = function(elem, data){
386
- var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
387
- var _srces = mediaelement.srces(elem);
388
- var parent = elem.parentNode;
389
-
390
- clearTimeout(baseData.loadTimer);
391
- $.data(elem, 'mediaerror', false);
392
-
393
- if(!_srces.length || !parent || parent.nodeType != 1 || stopParent.test(parent.nodeName || '')){return;}
394
- data = data || webshims.data(elem, 'mediaelement');
395
- stepSources(elem, data, options.preferFlash || undefined, _srces);
396
- };
397
-
398
-
399
- $(document).bind('ended', function(e){
400
- var data = webshims.data(e.target, 'mediaelement');
401
- if( supportsLoop && (!data || data.isActive == 'html5') && !$.prop(e.target, 'loop')){return;}
402
- setTimeout(function(){
403
- if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;}
404
- $(e.target).prop('currentTime', 0).play();
405
- }, 1);
406
-
407
- });
408
- if(!supportsLoop){
409
- webshims.defineNodeNamesBooleanProperty(['audio', 'video'], 'loop');
410
- }
411
-
412
- ['audio', 'video'].forEach(function(nodeName){
413
- var supLoad = webshims.defineNodeNameProperty(nodeName, 'load', {
414
- prop: {
415
- value: function(){
416
- var data = webshims.data(this, 'mediaelement');
417
- selectSource(this, data);
418
- if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
419
- supLoad.prop._supvalue.apply(this, arguments);
420
- }
421
- }
422
- }
423
- });
424
- nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
425
- prop: {
426
- value: function(type){
427
- var ret = '';
428
- if(hasNative && nativeCanPlayType[nodeName].prop._supvalue){
429
- ret = nativeCanPlayType[nodeName].prop._supvalue.call(this, type);
430
- if(ret == 'no'){
431
- ret = '';
432
- }
433
- }
434
- if(!ret && hasSwf){
435
- type = $.trim((type || '').split(';')[0]);
436
- if(mediaelement.swfMimeTypes.indexOf(type) != -1){
437
- ret = 'maybe';
438
- }
439
- }
440
- return ret;
441
- }
442
- }
443
- });
444
- });
445
- webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], {
446
- set: function(){
447
- var elem = this;
448
- var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
449
- clearTimeout(baseData.loadTimer);
450
- baseData.loadTimer = setTimeout(function(){
451
- selectSource(elem);
452
- elem = null;
453
- }, 9);
454
- }
455
- });
456
-
457
- var initMediaElements = function(){
458
-
459
- webshims.addReady(function(context, insertedElement){
460
- $('video, audio', context)
461
- .add(insertedElement.filter('video, audio'))
462
- .each(function(){
463
- if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
464
- $(this).prop('preload', 'metadata').mediaLoad();
465
- } else {
466
- selectSource(this);
467
- }
468
-
469
-
470
-
471
- if(hasNative){
472
- var bufferTimer;
473
- var lastBuffered;
474
- var elem = this;
475
- var getBufferedString = function(){
476
- var buffered = $.prop(elem, 'buffered');
477
- if(!buffered){return;}
478
- var bufferString = "";
479
- for(var i = 0, len = buffered.length; i < len;i++){
480
- bufferString += buffered.end(i);
481
- }
482
- return bufferString;
483
- };
484
- var testBuffer = function(){
485
- var buffered = getBufferedString();
486
- if(buffered != lastBuffered){
487
- lastBuffered = buffered;
488
- $(elem).triggerHandler('progress');
489
- }
490
- };
491
-
492
- $(this)
493
- .bind('play loadstart progress', function(e){
494
- if(e.type == 'progress'){
495
- lastBuffered = getBufferedString();
496
- }
497
- clearTimeout(bufferTimer);
498
- bufferTimer = setTimeout(testBuffer, 999);
499
- })
500
- .bind('emptied stalled mediaerror abort suspend', function(e){
501
- if(e.type == 'emptied'){
502
- lastBuffered = false;
503
- }
504
- clearTimeout(bufferTimer);
505
- })
506
- ;
507
- }
508
-
509
- })
510
- ;
511
- });
512
- };
513
-
514
- if(Modernizr.track && !bugs.track){
515
- webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
516
- get: function(){
517
- return this._shimActiveCues || this.activeCues;
518
- }
519
- });
520
- }
521
- //set native implementation ready, before swf api is retested
522
- if(hasNative){
523
- webshims.isReady('mediaelement-core', true);
524
- initMediaElements();
525
- webshims.ready('WINDOWLOAD mediaelement', loadThird);
526
- } else {
527
- webshims.ready('mediaelement-swf', initMediaElements);
528
- }
529
- $(function(){
530
- webshims.loader.loadList(['track-ui']);
531
- });
532
-
533
- });
1
+ (function($, Modernizr, webshims){
2
+ "use strict";
3
+ var hasNative = Modernizr.audio && Modernizr.video;
4
+ var supportsLoop = false;
5
+ var options = webshims.cfg.mediaelement;
6
+ var bugs = webshims.bugs;
7
+ var swfType = options.player == 'jwplayer' ? 'mediaelement-swf' : 'mediaelement-jaris'
8
+ var loadSwf = function(){
9
+ webshims.ready(swfType, function(){
10
+ if(!webshims.mediaelement.createSWF){
11
+ webshims.mediaelement.loadSwf = true;
12
+ webshims.reTest([swfType], hasNative);
13
+ }
14
+ });
15
+ };
16
+ var hasSwf;
17
+ if(hasNative){
18
+ var videoElem = document.createElement('video');
19
+ Modernizr.videoBuffered = ('buffered' in videoElem);
20
+ supportsLoop = ('loop' in videoElem);
21
+
22
+ webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
23
+
24
+ if(!Modernizr.videoBuffered){
25
+ webshims.addPolyfill('mediaelement-native-fix', {
26
+ f: 'mediaelement',
27
+ test: Modernizr.videoBuffered,
28
+ d: ['dom-support']
29
+ });
30
+
31
+ webshims.reTest('mediaelement-native-fix');
32
+ }
33
+ }
34
+
35
+ if(hasNative && !options.preferFlash){
36
+ var switchOptions = function(e){
37
+ var parent = e.target.parentNode;
38
+ if(!options.preferFlash && ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) ){
39
+ webshims.ready('DOM mediaelement', function(){
40
+ if(hasSwf){
41
+ loadSwf();
42
+ }
43
+ webshims.ready('WINDOWLOAD '+swfType, function(){
44
+ setTimeout(function(){
45
+ if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
46
+ options.preferFlash = true;
47
+ document.removeEventListener('error', switchOptions, true);
48
+ $('audio, video').mediaLoad();
49
+ webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
50
+ } else if(!hasSwf){
51
+ document.removeEventListener('error', switchOptions, true);
52
+ }
53
+ }, 20);
54
+ });
55
+ });
56
+ }
57
+ };
58
+ document.addEventListener('error', switchOptions, true);
59
+ $('audio, video').each(function(){
60
+ if(this.error){
61
+ switchOptions({target: this});
62
+ }
63
+ });
64
+ }
65
+
66
+ bugs.track = false;
67
+
68
+ if(Modernizr.track){
69
+ (function(){
70
+
71
+ if(!bugs.track){
72
+ bugs.track = typeof $('<track />')[0].readyState != 'number';
73
+ }
74
+
75
+ if(!bugs.track){
76
+ try {
77
+ new TextTrackCue(2, 3, '');
78
+ } catch(e){
79
+ bugs.track = true;
80
+ }
81
+ }
82
+
83
+ var trackOptions = webshims.cfg.track;
84
+ var trackListener = function(e){
85
+ $(e.target).filter('track').each(changeApi);
86
+ };
87
+ var changeApi = function(){
88
+ if(bugs.track || (!trackOptions.override && $.prop(this, 'readyState') == 3)){
89
+ trackOptions.override = true;
90
+ webshims.reTest('track');
91
+ document.removeEventListener('error', trackListener, true);
92
+ if(this && $.nodeName(this, 'track')){
93
+ webshims.error("track support was overwritten. Please check your vtt including your vtt mime-type");
94
+ } else {
95
+ webshims.info("track support was overwritten. due to bad browser support");
96
+ }
97
+ }
98
+ };
99
+ var detectTrackError = function(){
100
+ document.addEventListener('error', trackListener, true);
101
+
102
+ if(bugs.track){
103
+ changeApi();
104
+ } else {
105
+ $('track').each(changeApi);
106
+ }
107
+ };
108
+ if(!trackOptions.override){
109
+ if(webshims.isReady('track')){
110
+ detectTrackError();
111
+ } else {
112
+ $(detectTrackError);
113
+ }
114
+ }
115
+ })();
116
+
117
+ }
118
+
119
+ webshims.register('mediaelement-core', function($, webshims, window, document, undefined){
120
+ hasSwf = swfobject.hasFlashPlayerVersion('9.0.115');
121
+
122
+ var mediaelement = webshims.mediaelement;
123
+
124
+ var getSrcObj = function(elem, nodeName){
125
+ elem = $(elem);
126
+ var src = {src: elem.attr('src') || '', elem: elem, srcProp: elem.prop('src')};
127
+ if(!src.src){return src;}
128
+ var tmp = elem.attr('type');
129
+ if(tmp){
130
+ src.type = tmp;
131
+ src.container = $.trim(tmp.split(';')[0]);
132
+ } else {
133
+ if(!nodeName){
134
+ nodeName = elem[0].nodeName.toLowerCase();
135
+ if(nodeName == 'source'){
136
+ nodeName = (elem.closest('video, audio')[0] || {nodeName: 'video'}).nodeName.toLowerCase();
137
+ }
138
+ }
139
+ tmp = mediaelement.getTypeForSrc(src.src, nodeName );
140
+
141
+ if(tmp){
142
+ src.type = tmp;
143
+ src.container = tmp;
144
+ }
145
+ }
146
+ tmp = elem.attr('media');
147
+ if(tmp){
148
+ src.media = tmp;
149
+ }
150
+ return src;
151
+ };
152
+
153
+
154
+
155
+ var hasYt = !hasSwf && ('postMessage' in window) && hasNative;
156
+
157
+ var loadYt = (function(){
158
+ var loaded;
159
+ return function(){
160
+ if(loaded || !hasYt){return;}
161
+ loaded = true;
162
+ webshims.loader.loadScript("https://www.youtube.com/player_api");
163
+ $(function(){
164
+ webshims.polyfill("mediaelement-yt");
165
+ });
166
+ };
167
+ })();
168
+ var loadThird = function(){
169
+ if(hasSwf){
170
+ loadSwf();
171
+ } else {
172
+ loadYt();
173
+ }
174
+ };
175
+
176
+ webshims.addPolyfill('mediaelement-yt', {
177
+ test: !hasYt,
178
+ d: ['dom-support']
179
+ });
180
+
181
+ mediaelement.mimeTypes = {
182
+ audio: {
183
+ //ogm shouldn´t be used!
184
+ 'audio/ogg': ['ogg','oga', 'ogm'],
185
+ 'audio/ogg;codecs="opus"': 'opus',
186
+ 'audio/mpeg': ['mp2','mp3','mpga','mpega'],
187
+ 'audio/mp4': ['mp4','mpg4', 'm4r', 'm4a', 'm4p', 'm4b', 'aac'],
188
+ 'audio/wav': ['wav'],
189
+ 'audio/3gpp': ['3gp','3gpp'],
190
+ 'audio/webm': ['webm'],
191
+ 'audio/fla': ['flv', 'f4a', 'fla'],
192
+ 'application/x-mpegURL': ['m3u8', 'm3u']
193
+ },
194
+ video: {
195
+ //ogm shouldn´t be used!
196
+ 'video/ogg': ['ogg','ogv', 'ogm'],
197
+ 'video/mpeg': ['mpg','mpeg','mpe'],
198
+ 'video/mp4': ['mp4','mpg4', 'm4v'],
199
+ 'video/quicktime': ['mov','qt'],
200
+ 'video/x-msvideo': ['avi'],
201
+ 'video/x-ms-asf': ['asf', 'asx'],
202
+ 'video/flv': ['flv', 'f4v'],
203
+ 'video/3gpp': ['3gp','3gpp'],
204
+ 'video/webm': ['webm'],
205
+ 'application/x-mpegURL': ['m3u8', 'm3u'],
206
+ 'video/MP2T': ['ts']
207
+ }
208
+ }
209
+ ;
210
+
211
+ mediaelement.mimeTypes.source = $.extend({}, mediaelement.mimeTypes.audio, mediaelement.mimeTypes.video);
212
+
213
+ mediaelement.getTypeForSrc = function(src, nodeName){
214
+ if(src.indexOf('youtube.com/watch?') != -1 || src.indexOf('youtube.com/v/') != -1){
215
+ return 'video/youtube';
216
+ }
217
+ src = src.split('?')[0].split('.');
218
+ src = src[src.length - 1];
219
+ var mt;
220
+
221
+ $.each(mediaelement.mimeTypes[nodeName], function(mimeType, exts){
222
+ if(exts.indexOf(src) !== -1){
223
+ mt = mimeType;
224
+ return false;
225
+ }
226
+ });
227
+ return mt;
228
+ };
229
+
230
+
231
+ mediaelement.srces = function(mediaElem, srces){
232
+ mediaElem = $(mediaElem);
233
+ if(!srces){
234
+ srces = [];
235
+ var nodeName = mediaElem[0].nodeName.toLowerCase();
236
+ var src = getSrcObj(mediaElem, nodeName);
237
+
238
+ if(!src.src){
239
+
240
+ $('source', mediaElem).each(function(){
241
+ src = getSrcObj(this, nodeName);
242
+ if(src.src){srces.push(src);}
243
+ });
244
+ } else {
245
+ srces.push(src);
246
+ }
247
+ return srces;
248
+ } else {
249
+ mediaElem.removeAttr('src').removeAttr('type').find('source').remove();
250
+ if(!$.isArray(srces)){
251
+ srces = [srces];
252
+ }
253
+ srces.forEach(function(src){
254
+ var source = document.createElement('source');
255
+ if(typeof src == 'string'){
256
+ src = {src: src};
257
+ }
258
+ source.setAttribute('src', src.src);
259
+ if(src.type){
260
+ source.setAttribute('type', src.type);
261
+ }
262
+ if(src.media){
263
+ source.setAttribute('media', src.media);
264
+ }
265
+ mediaElem.append(source);
266
+ });
267
+
268
+ }
269
+ };
270
+
271
+
272
+ $.fn.loadMediaSrc = function(srces, poster){
273
+ return this.each(function(){
274
+ if(poster !== undefined){
275
+ $(this).removeAttr('poster');
276
+ if(poster){
277
+ $.attr(this, 'poster', poster);
278
+ }
279
+ }
280
+ mediaelement.srces(this, srces);
281
+ $(this).mediaLoad();
282
+ });
283
+ };
284
+
285
+ 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', 'jwplayer/jwplayer', 'video/youtube'];
286
+
287
+ mediaelement.canThirdPlaySrces = function(mediaElem, srces){
288
+ var ret = '';
289
+ if(hasSwf || hasYt){
290
+ mediaElem = $(mediaElem);
291
+ srces = srces || mediaelement.srces(mediaElem);
292
+ $.each(srces, function(i, src){
293
+ if(src.container && src.src && ((hasSwf && mediaelement.swfMimeTypes.indexOf(src.container) != -1) || (hasYt && src.container == 'video/youtube'))){
294
+ ret = src;
295
+ return false;
296
+ }
297
+ });
298
+
299
+ }
300
+
301
+ return ret;
302
+ };
303
+
304
+ var nativeCanPlayType = {};
305
+ mediaelement.canNativePlaySrces = function(mediaElem, srces){
306
+ var ret = '';
307
+ if(hasNative){
308
+ mediaElem = $(mediaElem);
309
+ var nodeName = (mediaElem[0].nodeName || '').toLowerCase();
310
+ if(!nativeCanPlayType[nodeName]){return ret;}
311
+ srces = srces || mediaelement.srces(mediaElem);
312
+
313
+ $.each(srces, function(i, src){
314
+ if(src.type && nativeCanPlayType[nodeName].prop._supvalue.call(mediaElem[0], src.type) ){
315
+ ret = src;
316
+ return false;
317
+ }
318
+ });
319
+ }
320
+ return ret;
321
+ };
322
+
323
+ mediaelement.setError = function(elem, message){
324
+ if(!message){
325
+ message = "can't play sources";
326
+ }
327
+
328
+ $(elem).pause().data('mediaerror', message);
329
+ webshims.warn('mediaelementError: '+ message);
330
+ setTimeout(function(){
331
+ if($(elem).data('mediaerror')){
332
+ $(elem).trigger('mediaerror');
333
+ }
334
+ }, 1);
335
+ };
336
+
337
+ var handleThird = (function(){
338
+ var requested;
339
+ return function( mediaElem, ret, data ){
340
+ webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
341
+ if(mediaelement.createSWF){
342
+ mediaelement.createSWF( mediaElem, ret, data );
343
+ } else if(!requested) {
344
+ requested = true;
345
+ loadThird();
346
+ //readd to ready
347
+ handleThird( mediaElem, ret, data );
348
+ }
349
+ });
350
+ if(!requested && hasYt && !mediaelement.createSWF){
351
+ loadYt();
352
+ }
353
+ };
354
+ })();
355
+
356
+ var stepSources = function(elem, data, useSwf, _srces, _noLoop){
357
+ var ret;
358
+ if(useSwf || (useSwf !== false && data && data.isActive == 'third')){
359
+ ret = mediaelement.canThirdPlaySrces(elem, _srces);
360
+ if(!ret){
361
+ if(_noLoop){
362
+ mediaelement.setError(elem, false);
363
+ } else {
364
+ stepSources(elem, data, false, _srces, true);
365
+ }
366
+ } else {
367
+ handleThird(elem, ret, data);
368
+ }
369
+ } else {
370
+ ret = mediaelement.canNativePlaySrces(elem, _srces);
371
+ if(!ret){
372
+ if(_noLoop){
373
+ mediaelement.setError(elem, false);
374
+ if(data && data.isActive == 'third') {
375
+ mediaelement.setActive(elem, 'html5', data);
376
+ }
377
+ } else {
378
+ stepSources(elem, data, true, _srces, true);
379
+ }
380
+ } else if(data && data.isActive == 'third') {
381
+ mediaelement.setActive(elem, 'html5', data);
382
+ }
383
+ }
384
+ };
385
+ var stopParent = /^(?:embed|object|datalist)$/i;
386
+ var selectSource = function(elem, data){
387
+ var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
388
+ var _srces = mediaelement.srces(elem);
389
+ var parent = elem.parentNode;
390
+
391
+ clearTimeout(baseData.loadTimer);
392
+ $.data(elem, 'mediaerror', false);
393
+
394
+ if(!_srces.length || !parent || parent.nodeType != 1 || stopParent.test(parent.nodeName || '')){return;}
395
+ data = data || webshims.data(elem, 'mediaelement');
396
+ stepSources(elem, data, options.preferFlash || undefined, _srces);
397
+ };
398
+
399
+
400
+ $(document).on('ended', function(e){
401
+ var data = webshims.data(e.target, 'mediaelement');
402
+ if( supportsLoop && (!data || data.isActive == 'html5') && !$.prop(e.target, 'loop')){return;}
403
+ setTimeout(function(){
404
+ if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;}
405
+ $(e.target).prop('currentTime', 0).play();
406
+ }, 1);
407
+
408
+ });
409
+ if(!supportsLoop){
410
+ webshims.defineNodeNamesBooleanProperty(['audio', 'video'], 'loop');
411
+ }
412
+
413
+ ['audio', 'video'].forEach(function(nodeName){
414
+ var supLoad = webshims.defineNodeNameProperty(nodeName, 'load', {
415
+ prop: {
416
+ value: function(){
417
+ var data = webshims.data(this, 'mediaelement');
418
+ selectSource(this, data);
419
+ if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
420
+ supLoad.prop._supvalue.apply(this, arguments);
421
+ }
422
+ }
423
+ }
424
+ });
425
+ nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
426
+ prop: {
427
+ value: function(type){
428
+ var ret = '';
429
+ if(hasNative && nativeCanPlayType[nodeName].prop._supvalue){
430
+ ret = nativeCanPlayType[nodeName].prop._supvalue.call(this, type);
431
+ if(ret == 'no'){
432
+ ret = '';
433
+ }
434
+ }
435
+ if(!ret && hasSwf){
436
+ type = $.trim((type || '').split(';')[0]);
437
+ if(mediaelement.swfMimeTypes.indexOf(type) != -1){
438
+ ret = 'maybe';
439
+ }
440
+ }
441
+ return ret;
442
+ }
443
+ }
444
+ });
445
+ });
446
+ webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], {
447
+ set: function(){
448
+ var elem = this;
449
+ var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
450
+ clearTimeout(baseData.loadTimer);
451
+ baseData.loadTimer = setTimeout(function(){
452
+ selectSource(elem);
453
+ elem = null;
454
+ }, 9);
455
+ }
456
+ });
457
+
458
+ var initMediaElements = function(){
459
+
460
+ webshims.addReady(function(context, insertedElement){
461
+ $('video, audio', context)
462
+ .add(insertedElement.filter('video, audio'))
463
+ .each(function(){
464
+ if($.browser.msie && webshims.browserVersion > 8 && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])')){
465
+ $(this).prop('preload', 'metadata').mediaLoad();
466
+ } else {
467
+ selectSource(this);
468
+ }
469
+
470
+
471
+
472
+ if(hasNative){
473
+ var bufferTimer;
474
+ var lastBuffered;
475
+ var elem = this;
476
+ var getBufferedString = function(){
477
+ var buffered = $.prop(elem, 'buffered');
478
+ if(!buffered){return;}
479
+ var bufferString = "";
480
+ for(var i = 0, len = buffered.length; i < len;i++){
481
+ bufferString += buffered.end(i);
482
+ }
483
+ return bufferString;
484
+ };
485
+ var testBuffer = function(){
486
+ var buffered = getBufferedString();
487
+ if(buffered != lastBuffered){
488
+ lastBuffered = buffered;
489
+ $(elem).triggerHandler('progress');
490
+ }
491
+ };
492
+
493
+ $(this)
494
+ .on({
495
+ 'play loadstart progress': function(e){
496
+ if(e.type == 'progress'){
497
+ lastBuffered = getBufferedString();
498
+ }
499
+ clearTimeout(bufferTimer);
500
+ bufferTimer = setTimeout(testBuffer, 999);
501
+ },
502
+ 'emptied stalled mediaerror abort suspend': function(e){
503
+ if(e.type == 'emptied'){
504
+ lastBuffered = false;
505
+ }
506
+ clearTimeout(bufferTimer);
507
+ }
508
+ })
509
+ ;
510
+ }
511
+
512
+ })
513
+ ;
514
+ });
515
+ };
516
+
517
+ if(Modernizr.track && !bugs.track){
518
+ webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
519
+ get: function(){
520
+ return this._shimActiveCues || this.activeCues;
521
+ }
522
+ });
523
+ }
524
+ //set native implementation ready, before swf api is retested
525
+ if(hasNative){
526
+ webshims.isReady('mediaelement-core', true);
527
+ initMediaElements();
528
+ webshims.ready('WINDOWLOAD mediaelement', loadThird);
529
+ } else {
530
+ webshims.ready(swfType, initMediaElements);
531
+ }
532
+ $(function(){
533
+ webshims.loader.loadList(['track-ui']);
534
+ });
535
+
536
+ });
534
537
  })(jQuery, Modernizr, jQuery.webshims);