webshims-rails 0.4.5 → 0.4.6

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