webshims-rails 1.14.1 → 1.14.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +0 -0
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +3 -8
  5. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js +0 -0
  6. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +0 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/proxy.php +0 -0
  9. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/save.php +0 -0
  10. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/canvas2png.js +0 -0
  11. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  13. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +0 -0
  14. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/proxy.php +0 -0
  15. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/save.php +0 -0
  16. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2 -2
  17. data/vendor/assets/javascripts/webshims/shims/combos/1.js +66 -43
  18. data/vendor/assets/javascripts/webshims/shims/combos/10.js +66 -31
  19. data/vendor/assets/javascripts/webshims/shims/combos/11.js +66 -31
  20. data/vendor/assets/javascripts/webshims/shims/combos/12.js +96 -59
  21. data/vendor/assets/javascripts/webshims/shims/combos/13.js +96 -59
  22. data/vendor/assets/javascripts/webshims/shims/combos/14.js +0 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4 -1
  24. data/vendor/assets/javascripts/webshims/shims/combos/16.js +70 -44
  25. data/vendor/assets/javascripts/webshims/shims/combos/17.js +66 -31
  26. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1241 -1126
  27. data/vendor/assets/javascripts/webshims/shims/combos/19.js +1272 -1214
  28. data/vendor/assets/javascripts/webshims/shims/combos/2.js +66 -43
  29. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1272 -1214
  30. data/vendor/assets/javascripts/webshims/shims/combos/21.js +61 -92
  31. data/vendor/assets/javascripts/webshims/shims/combos/22.js +30 -16
  32. data/vendor/assets/javascripts/webshims/shims/combos/23.js +66 -43
  33. data/vendor/assets/javascripts/webshims/shims/combos/25.js +41 -85
  34. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1556 -2316
  35. data/vendor/assets/javascripts/webshims/shims/combos/27.js +12 -10
  36. data/vendor/assets/javascripts/webshims/shims/combos/28.js +4 -1
  37. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -0
  38. data/vendor/assets/javascripts/webshims/shims/combos/3.js +0 -0
  39. data/vendor/assets/javascripts/webshims/shims/combos/30.js +0 -0
  40. data/vendor/assets/javascripts/webshims/shims/combos/31.js +0 -0
  41. data/vendor/assets/javascripts/webshims/shims/combos/32.js +1175 -1095
  42. data/vendor/assets/javascripts/webshims/shims/combos/33.js +0 -0
  43. data/vendor/assets/javascripts/webshims/shims/combos/34.js +30 -16
  44. data/vendor/assets/javascripts/webshims/shims/combos/4.js +0 -0
  45. data/vendor/assets/javascripts/webshims/shims/combos/5.js +66 -31
  46. data/vendor/assets/javascripts/webshims/shims/combos/6.js +66 -31
  47. data/vendor/assets/javascripts/webshims/shims/combos/7.js +66 -43
  48. data/vendor/assets/javascripts/webshims/shims/combos/8.js +66 -43
  49. data/vendor/assets/javascripts/webshims/shims/combos/9.js +66 -31
  50. data/vendor/assets/javascripts/webshims/shims/combos/97.js +63 -28
  51. data/vendor/assets/javascripts/webshims/shims/combos/98.js +149 -74
  52. data/vendor/assets/javascripts/webshims/shims/combos/99.js +149 -74
  53. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +1 -1
  54. data/vendor/assets/javascripts/webshims/shims/details.js +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/es5.js +1175 -1095
  57. data/vendor/assets/javascripts/webshims/shims/excanvas.js +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/filereader.js +10 -9
  59. data/vendor/assets/javascripts/webshims/shims/form-combat.js +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/form-core.js +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/form-fixrangechange.js +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/form-message.js +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +40 -11
  68. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +4 -1
  69. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +2 -1
  70. data/vendor/assets/javascripts/webshims/shims/form-validation.js +80 -47
  71. data/vendor/assets/javascripts/webshims/shims/form-validators.js +19 -8
  72. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +21 -1
  73. data/vendor/assets/javascripts/webshims/shims/geolocation.js +0 -0
  74. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-CN.js +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-cs.js +0 -0
  77. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +0 -0
  78. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +0 -0
  81. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fa.js +130 -0
  82. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +0 -0
  83. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +0 -0
  84. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +0 -0
  85. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +0 -0
  86. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +0 -0
  87. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +0 -0
  88. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +0 -0
  89. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +0 -0
  90. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +0 -0
  91. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js +0 -0
  92. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +0 -0
  93. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt.js +0 -0
  94. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +0 -0
  95. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +0 -0
  96. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +0 -0
  97. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-TW.js +130 -0
  98. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -0
  99. data/vendor/assets/javascripts/webshims/shims/jme/_icons.scss +186 -0
  100. data/vendor/assets/javascripts/webshims/shims/jme/b.js +63 -28
  101. data/vendor/assets/javascripts/webshims/shims/jme/c.js +86 -46
  102. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +317 -211
  103. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +59 -223
  104. data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
  105. data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +0 -0
  106. data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
  107. data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
  108. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +66 -14
  109. data/vendor/assets/javascripts/webshims/shims/jme/p.js +0 -0
  110. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +0 -0
  111. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +0 -0
  112. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  113. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  114. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  115. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  116. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  117. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  118. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  119. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  120. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  121. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  122. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +55 -48
  123. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +66 -43
  124. data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +833 -0
  125. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +31 -76
  126. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +0 -0
  127. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +0 -0
  128. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
  129. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.min.swf +0 -0
  130. data/vendor/assets/javascripts/webshims/shims/moxie/js/moxie.js +1542 -2303
  131. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  132. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.min.xap +0 -0
  133. data/vendor/assets/javascripts/webshims/shims/picture.js +160 -79
  134. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +0 -0
  135. data/vendor/assets/javascripts/webshims/shims/promise.js +0 -0
  136. data/vendor/assets/javascripts/webshims/shims/range-ui.js +26 -20
  137. data/vendor/assets/javascripts/webshims/shims/sizzle.js +0 -0
  138. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  139. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +444 -326
  140. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +379 -300
  141. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  142. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  143. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +8 -8
  144. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +0 -0
  145. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +0 -14
  146. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +104 -85
  147. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +20 -32
  148. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +0 -0
  149. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +14 -34
  150. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +920 -728
  151. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +471 -391
  152. data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
  153. data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +0 -0
  154. data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
  155. data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
  156. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  157. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +0 -0
  158. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -0
  159. data/vendor/assets/javascripts/webshims/shims/track-ui.js +0 -0
  160. data/vendor/assets/javascripts/webshims/shims/track.js +30 -16
  161. metadata +8 -4
  162. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +0 -12
  163. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
@@ -15,7 +15,7 @@
15
15
 
16
16
  var wsCfg = webshims.cfg;
17
17
  var options = wsCfg.mediaelement;
18
- var hasSwf;
18
+ var isIE = navigator.userAgent.indexOf('MSIE') != -1;
19
19
  if(!options){
20
20
  webshims.error("mediaelement wasn't implemented but loaded");
21
21
  return;
@@ -30,7 +30,7 @@
30
30
 
31
31
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
32
32
 
33
- if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && navigator.userAgent.indexOf('MSIE') != -1 && 'ActiveXObject' in window) ){
33
+ if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && isIE && 'ActiveXObject' in window) ){
34
34
  webshims.addPolyfill('mediaelement-native-fix', {
35
35
  d: ['dom-support']
36
36
  });
@@ -58,7 +58,7 @@
58
58
  }
59
59
 
60
60
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
61
- hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
61
+ var hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
62
62
  var mediaelement = webshims.mediaelement;
63
63
 
64
64
  mediaelement.parseRtmp = function(data){
@@ -120,11 +120,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
120
120
  }
121
121
  }
122
122
  }
123
-
124
- if(!src.container){
125
- $(elem).attr('data-wsrecheckmimetype', '');
126
- }
127
-
123
+
128
124
  tmp = elem.attr('media');
129
125
  if(tmp){
130
126
  src.media = tmp;
@@ -254,11 +250,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
254
250
  }
255
251
  };
256
252
 
257
-
258
- $.fn.loadMediaSrc = function(){
259
- webshims.error('loadMediaSrc was removed.');
260
- };
261
-
262
253
  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'];
263
254
 
264
255
  mediaelement.canThirdPlaySrces = function(mediaElem, srces){
@@ -316,7 +307,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
316
307
  message = "can't play sources";
317
308
  }
318
309
  $(elem).pause().data('mediaerror', message);
319
- webshims.error('mediaelementError: '+ message);
310
+ webshims.error('mediaelementError: '+ message +'. Run the following line in your console to get more info: webshim.mediaelement.loadDebugger();');
320
311
  setTimeout(function(){
321
312
  if($(elem).data('mediaerror')){
322
313
  $(elem).addClass('media-error').trigger('mediaerror');
@@ -348,36 +339,49 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
348
339
  }
349
340
  };
350
341
  })();
351
-
352
- var stepSources = function(elem, data, useSwf, _srces, _noLoop){
353
- var ret;
354
- if(useSwf || (useSwf !== false && data && data.isActive == 'third')){
355
- ret = mediaelement.canThirdPlaySrces(elem, _srces);
356
- if(!ret){
357
- if(_noLoop){
358
- mediaelement.setError(elem, false);
359
- } else {
360
- stepSources(elem, data, false, _srces, true);
361
- }
362
- } else {
363
- handleThird(elem, ret, data);
342
+
343
+ var activate = {
344
+ native: function(elem, src, data){
345
+ if(data && data.isActive == 'third') {
346
+ mediaelement.setActive(elem, 'html5', data);
364
347
  }
365
- } else {
366
- ret = mediaelement.canNativePlaySrces(elem, _srces);
367
- if(!ret){
368
- if(_noLoop){
369
- mediaelement.setError(elem, false);
370
- if(data && data.isActive == 'third') {
371
- mediaelement.setActive(elem, 'html5', data);
372
- }
373
- } else {
374
- stepSources(elem, data, true, _srces, true);
375
- }
376
- } else if(data && data.isActive == 'third') {
348
+ },
349
+ third: handleThird
350
+ };
351
+
352
+ var stepSources = function(elem, data, srces){
353
+ var i, src;
354
+ var testOrder = [{test: 'canNativePlaySrces', activate: 'native'}, {test: 'canThirdPlaySrces', activate: 'third'}];
355
+ if(options.preferFlash || (data && data.isActive == 'third') ){
356
+ testOrder.reverse();
357
+ }
358
+ for(i = 0; i < 2; i++){
359
+ src = mediaelement[testOrder[i].test](elem, srces);
360
+ if(src){
361
+ activate[testOrder[i].activate](elem, src, data);
362
+ break;
363
+ }
364
+ }
365
+
366
+ if(!src){
367
+ mediaelement.setError(elem, false);
368
+ if(data && data.isActive == 'third') {
377
369
  mediaelement.setActive(elem, 'html5', data);
378
370
  }
379
371
  }
380
372
  };
373
+ var allowedPreload = {'metadata': 1, 'auto': 1, '': 1};
374
+ var fixPreload = function(elem){
375
+ var preload, img;
376
+ if(elem.getAttribute('preload') == 'none'){
377
+ if(allowedPreload[(preload = $.attr(elem, 'data-preload'))]){
378
+ $.attr(elem, 'preload', preload);
379
+ } else if(hasNative && (preload = elem.getAttribute('poster'))){
380
+ img = document.createElement('img');
381
+ img.src = preload;
382
+ }
383
+ }
384
+ };
381
385
  var stopParent = /^(?:embed|object|datalist)$/i;
382
386
  var selectSource = function(elem, data){
383
387
  var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
@@ -393,7 +397,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
393
397
  if(mediaelement.sortMedia){
394
398
  _srces.sort(mediaelement.sortMedia);
395
399
  }
396
- stepSources(elem, data, options.preferFlash || undefined, _srces);
400
+ fixPreload(elem);
401
+ stepSources(elem, data, _srces);
402
+
397
403
  };
398
404
  mediaelement.selectSource = selectSource;
399
405
 
@@ -404,20 +410,22 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
404
410
  setTimeout(function(){
405
411
  if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;}
406
412
  $(e.target).prop('currentTime', 0).play();
407
- }, 1);
413
+ });
408
414
 
409
415
  });
410
416
 
411
417
  var handleMedia = false;
418
+
412
419
  var initMediaElements = function(){
413
420
  var testFixMedia = function(){
421
+
414
422
  if(webshims.implement(this, 'mediaelement')){
415
423
  selectSource(this);
416
424
  if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
417
425
  $.prop(this, 'muted', true);
418
426
  }
427
+
419
428
  }
420
-
421
429
  };
422
430
 
423
431
  webshims.ready('dom-support', function(){
@@ -433,6 +441,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
433
441
  prop: {
434
442
  value: function(){
435
443
  var data = webshims.data(this, 'mediaelement');
444
+
436
445
  selectSource(this, data);
437
446
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
438
447
  supLoad.prop._supvalue.apply(this, arguments);
@@ -444,6 +453,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
444
453
  }
445
454
  }
446
455
  });
456
+
447
457
  nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
448
458
  prop: {
449
459
  value: function(type){
@@ -460,6 +470,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
460
470
  ret = 'maybe';
461
471
  }
462
472
  }
473
+ if(!ret && hasYt && type == 'video/youtube'){
474
+ ret = 'maybe';
475
+ }
463
476
  return ret;
464
477
  }
465
478
  }
@@ -509,8 +522,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
509
522
  });
510
523
  }
511
524
  };
512
-
513
525
 
526
+ mediaelement.loadDebugger = function(){
527
+ webshims.ready('dom-support', function(){
528
+ webshims.loader.loadScript('mediaelement-debug');
529
+ });
530
+ };
531
+
532
+ if(({noCombo: 1, media: 1})[webshims.cfg.debug]){
533
+ $(document).on('mediaerror', function(e){
534
+ mediaelement.loadDebugger();
535
+ });
536
+ }
514
537
  //set native implementation ready, before swf api is retested
515
538
  if(hasNative){
516
539
  webshims.isReady('mediaelement-core', true);
@@ -819,6 +842,26 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
819
842
  return cueText.replace(tagSplits, replacer);
820
843
  };
821
844
  })();
845
+ var mapTtmlToVtt = function(i){
846
+ var content = i+'';
847
+ var begin = this.getAttribute('begin') || '';
848
+ var end = this.getAttribute('end') || '';
849
+ var text = $.trim($.text(this));
850
+ if(!/\./.test(begin)){
851
+ begin += '.000';
852
+ }
853
+ if(!/\./.test(end)){
854
+ end += '.000';
855
+ }
856
+ content += '\n';
857
+ content += begin +' --> '+end+'\n';
858
+ content += text;
859
+ return content;
860
+ };
861
+ var ttmlTextToVTT = function(ttml){
862
+ ttml = $.parseXML(ttml) || [];
863
+ return $(ttml).find('[begin][end]').map(mapTtmlToVtt).get().join('\n\n') || '';
864
+ };
822
865
 
823
866
  mediaelement.loadTextTrack = function(mediaelem, track, trackData, _default){
824
867
  var loadEvents = 'play playing';
@@ -846,7 +889,11 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
846
889
  dataType: 'text',
847
890
  url: src,
848
891
  success: function(text){
849
- if(ajax.getResponseHeader('content-type') != 'text/vtt'){
892
+ var contentType = ajax.getResponseHeader('content-type');
893
+
894
+ if(!contentType.indexOf('application/xml')){
895
+ text = ttmlTextToVTT(text);
896
+ } else if(contentType.indexOf('text/vtt')){
850
897
  webshims.error('set the mime-type of your WebVTT files to text/vtt. see: http://dev.w3.org/html5/webvtt/#text/vtt');
851
898
  }
852
899
  mediaelement.parseCaptions(text, obj, function(cues){
@@ -966,25 +1013,20 @@ modified for webshims
966
1013
  */
967
1014
  mediaelement.parseCaptionChunk = (function(){
968
1015
  // Set up timestamp parsers
969
- var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
1016
+ var WebVTTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})\.(\d+)\s*(.*)/;
970
1017
  var WebVTTDEFAULTSCueParser = /^(DEFAULTS|DEFAULT)\s+\-\-\>\s+(.*)/g;
971
1018
  var WebVTTSTYLECueParser = /^(STYLE|STYLES)\s+\-\-\>\s*\n([\s\S]*)/g;
972
1019
  var WebVTTCOMMENTCueParser = /^(COMMENT|COMMENTS)\s+\-\-\>\s+(.*)/g;
1020
+ var SRTTimestampParser = /^(\d{2})?:?(\d{2}):(\d{2})[\.\,](\d+)\s+\-\-\>\s+(\d{2})?:?(\d{2}):(\d{2})[\.\,](\d+)\s*(.*)/;
973
1021
 
974
1022
  return function(subtitleElement,objectCount){
975
1023
 
976
- var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id, specialCueData;
1024
+ var subtitleParts, timeIn, timeOut, html, timeData, subtitlePartIndex, id;
977
1025
  var timestampMatch, tmpCue;
978
1026
 
979
1027
  // WebVTT Special Cue Logic
980
- if (WebVTTDEFAULTSCueParser.exec(subtitleElement)) {
981
- // cueDefaults = specialCueData.slice(2).join("");
982
- // cueDefaults = cueDefaults.split(/\s+/g).filter(function(def) { return def && !!def.length; });
983
- return null;
984
- } else if ((specialCueData = WebVTTSTYLECueParser.exec(subtitleElement))) {
1028
+ if (WebVTTDEFAULTSCueParser.exec(subtitleElement) || WebVTTCOMMENTCueParser.exec(subtitleElement) || WebVTTSTYLECueParser.exec(subtitleElement)) {
985
1029
  return null;
986
- } else if ((specialCueData = WebVTTCOMMENTCueParser.exec(subtitleElement))) {
987
- return null; // At this stage, we don't want to do anything with these.
988
1030
  }
989
1031
 
990
1032
  subtitleParts = subtitleElement.split(/\n/g);
@@ -1002,7 +1044,7 @@ modified for webshims
1002
1044
  for (subtitlePartIndex = 0; subtitlePartIndex < subtitleParts.length; subtitlePartIndex ++) {
1003
1045
  var timestamp = subtitleParts[subtitlePartIndex];
1004
1046
 
1005
- if ((timestampMatch = WebVTTTimestampParser.exec(timestamp))) {
1047
+ if ((timestampMatch = WebVTTTimestampParser.exec(timestamp)) || (timestampMatch = SRTTimestampParser.exec(timestamp))) {
1006
1048
 
1007
1049
  // WebVTT
1008
1050
 
@@ -1089,11 +1131,6 @@ modified for webshims
1089
1131
  if(regWevVTT.test(cue)){
1090
1132
  isWEBVTT = true;
1091
1133
  } else if(cue.replace(/\s*/ig,"").length){
1092
- if(!isWEBVTT){
1093
- webshims.error('please use WebVTT format. This is the standard');
1094
- complete(null);
1095
- break;
1096
- }
1097
1134
  cue = mediaelement.parseCaptionChunk(cue, i);
1098
1135
  if(cue){
1099
1136
  track.addCue(cue);
@@ -1646,12 +1646,13 @@ var getGroupElements = function(elem){
1646
1646
  } else {
1647
1647
  form = elem.prop('form');
1648
1648
  ret = $(document.getElementsByName(name)).filter(function(){
1649
- return this.type == 'radio' && this.name == name && $.prop(this, 'form') == form;
1649
+ return this.type == 'radio' && $.prop(this, 'form') == form && this.name == name;
1650
1650
  });
1651
1651
  }
1652
1652
  }
1653
1653
  return ret;
1654
1654
  };
1655
+
1655
1656
  var patternTypes = {url: 1, email: 1, text: 1, search: 1, tel: 1, password: 1};
1656
1657
  var lengthTypes = $.extend({textarea: 1}, patternTypes);
1657
1658
 
@@ -1730,6 +1731,8 @@ $.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
1730
1731
  };
1731
1732
  });
1732
1733
 
1734
+ webshims.modules["form-core"].getGroupElements = getGroupElements;
1735
+
1733
1736
  webshims.addValidityRule = function(type, fn){
1734
1737
  validityRules[type] = fn;
1735
1738
  };
@@ -1869,12 +1869,13 @@ var getGroupElements = function(elem){
1869
1869
  } else {
1870
1870
  form = elem.prop('form');
1871
1871
  ret = $(document.getElementsByName(name)).filter(function(){
1872
- return this.type == 'radio' && this.name == name && $.prop(this, 'form') == form;
1872
+ return this.type == 'radio' && $.prop(this, 'form') == form && this.name == name;
1873
1873
  });
1874
1874
  }
1875
1875
  }
1876
1876
  return ret;
1877
1877
  };
1878
+
1878
1879
  var patternTypes = {url: 1, email: 1, text: 1, search: 1, tel: 1, password: 1};
1879
1880
  var lengthTypes = $.extend({textarea: 1}, patternTypes);
1880
1881
 
@@ -1953,6 +1954,8 @@ $.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
1953
1954
  };
1954
1955
  });
1955
1956
 
1957
+ webshims.modules["form-core"].getGroupElements = getGroupElements;
1958
+
1956
1959
  webshims.addValidityRule = function(type, fn){
1957
1960
  validityRules[type] = fn;
1958
1961
  };
@@ -3188,7 +3191,7 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
3188
3191
 
3189
3192
  var wsCfg = webshims.cfg;
3190
3193
  var options = wsCfg.mediaelement;
3191
- var hasSwf;
3194
+ var isIE = navigator.userAgent.indexOf('MSIE') != -1;
3192
3195
  if(!options){
3193
3196
  webshims.error("mediaelement wasn't implemented but loaded");
3194
3197
  return;
@@ -3203,7 +3206,7 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
3203
3206
 
3204
3207
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
3205
3208
 
3206
- if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && navigator.userAgent.indexOf('MSIE') != -1 && 'ActiveXObject' in window) ){
3209
+ if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && isIE && 'ActiveXObject' in window) ){
3207
3210
  webshims.addPolyfill('mediaelement-native-fix', {
3208
3211
  d: ['dom-support']
3209
3212
  });
@@ -3231,7 +3234,7 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
3231
3234
  }
3232
3235
 
3233
3236
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
3234
- hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
3237
+ var hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
3235
3238
  var mediaelement = webshims.mediaelement;
3236
3239
 
3237
3240
  mediaelement.parseRtmp = function(data){
@@ -3293,11 +3296,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3293
3296
  }
3294
3297
  }
3295
3298
  }
3296
-
3297
- if(!src.container){
3298
- $(elem).attr('data-wsrecheckmimetype', '');
3299
- }
3300
-
3299
+
3301
3300
  tmp = elem.attr('media');
3302
3301
  if(tmp){
3303
3302
  src.media = tmp;
@@ -3427,11 +3426,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3427
3426
  }
3428
3427
  };
3429
3428
 
3430
-
3431
- $.fn.loadMediaSrc = function(){
3432
- webshims.error('loadMediaSrc was removed.');
3433
- };
3434
-
3435
3429
  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'];
3436
3430
 
3437
3431
  mediaelement.canThirdPlaySrces = function(mediaElem, srces){
@@ -3489,7 +3483,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3489
3483
  message = "can't play sources";
3490
3484
  }
3491
3485
  $(elem).pause().data('mediaerror', message);
3492
- webshims.error('mediaelementError: '+ message);
3486
+ webshims.error('mediaelementError: '+ message +'. Run the following line in your console to get more info: webshim.mediaelement.loadDebugger();');
3493
3487
  setTimeout(function(){
3494
3488
  if($(elem).data('mediaerror')){
3495
3489
  $(elem).addClass('media-error').trigger('mediaerror');
@@ -3521,36 +3515,49 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3521
3515
  }
3522
3516
  };
3523
3517
  })();
3524
-
3525
- var stepSources = function(elem, data, useSwf, _srces, _noLoop){
3526
- var ret;
3527
- if(useSwf || (useSwf !== false && data && data.isActive == 'third')){
3528
- ret = mediaelement.canThirdPlaySrces(elem, _srces);
3529
- if(!ret){
3530
- if(_noLoop){
3531
- mediaelement.setError(elem, false);
3532
- } else {
3533
- stepSources(elem, data, false, _srces, true);
3534
- }
3535
- } else {
3536
- handleThird(elem, ret, data);
3518
+
3519
+ var activate = {
3520
+ native: function(elem, src, data){
3521
+ if(data && data.isActive == 'third') {
3522
+ mediaelement.setActive(elem, 'html5', data);
3537
3523
  }
3538
- } else {
3539
- ret = mediaelement.canNativePlaySrces(elem, _srces);
3540
- if(!ret){
3541
- if(_noLoop){
3542
- mediaelement.setError(elem, false);
3543
- if(data && data.isActive == 'third') {
3544
- mediaelement.setActive(elem, 'html5', data);
3545
- }
3546
- } else {
3547
- stepSources(elem, data, true, _srces, true);
3548
- }
3549
- } else if(data && data.isActive == 'third') {
3524
+ },
3525
+ third: handleThird
3526
+ };
3527
+
3528
+ var stepSources = function(elem, data, srces){
3529
+ var i, src;
3530
+ var testOrder = [{test: 'canNativePlaySrces', activate: 'native'}, {test: 'canThirdPlaySrces', activate: 'third'}];
3531
+ if(options.preferFlash || (data && data.isActive == 'third') ){
3532
+ testOrder.reverse();
3533
+ }
3534
+ for(i = 0; i < 2; i++){
3535
+ src = mediaelement[testOrder[i].test](elem, srces);
3536
+ if(src){
3537
+ activate[testOrder[i].activate](elem, src, data);
3538
+ break;
3539
+ }
3540
+ }
3541
+
3542
+ if(!src){
3543
+ mediaelement.setError(elem, false);
3544
+ if(data && data.isActive == 'third') {
3550
3545
  mediaelement.setActive(elem, 'html5', data);
3551
3546
  }
3552
3547
  }
3553
3548
  };
3549
+ var allowedPreload = {'metadata': 1, 'auto': 1, '': 1};
3550
+ var fixPreload = function(elem){
3551
+ var preload, img;
3552
+ if(elem.getAttribute('preload') == 'none'){
3553
+ if(allowedPreload[(preload = $.attr(elem, 'data-preload'))]){
3554
+ $.attr(elem, 'preload', preload);
3555
+ } else if(hasNative && (preload = elem.getAttribute('poster'))){
3556
+ img = document.createElement('img');
3557
+ img.src = preload;
3558
+ }
3559
+ }
3560
+ };
3554
3561
  var stopParent = /^(?:embed|object|datalist)$/i;
3555
3562
  var selectSource = function(elem, data){
3556
3563
  var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
@@ -3566,7 +3573,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3566
3573
  if(mediaelement.sortMedia){
3567
3574
  _srces.sort(mediaelement.sortMedia);
3568
3575
  }
3569
- stepSources(elem, data, options.preferFlash || undefined, _srces);
3576
+ fixPreload(elem);
3577
+ stepSources(elem, data, _srces);
3578
+
3570
3579
  };
3571
3580
  mediaelement.selectSource = selectSource;
3572
3581
 
@@ -3577,20 +3586,22 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3577
3586
  setTimeout(function(){
3578
3587
  if( $.prop(e.target, 'paused') || !$.prop(e.target, 'loop') ){return;}
3579
3588
  $(e.target).prop('currentTime', 0).play();
3580
- }, 1);
3589
+ });
3581
3590
 
3582
3591
  });
3583
3592
 
3584
3593
  var handleMedia = false;
3594
+
3585
3595
  var initMediaElements = function(){
3586
3596
  var testFixMedia = function(){
3597
+
3587
3598
  if(webshims.implement(this, 'mediaelement')){
3588
3599
  selectSource(this);
3589
3600
  if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
3590
3601
  $.prop(this, 'muted', true);
3591
3602
  }
3603
+
3592
3604
  }
3593
-
3594
3605
  };
3595
3606
 
3596
3607
  webshims.ready('dom-support', function(){
@@ -3606,6 +3617,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3606
3617
  prop: {
3607
3618
  value: function(){
3608
3619
  var data = webshims.data(this, 'mediaelement');
3620
+
3609
3621
  selectSource(this, data);
3610
3622
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
3611
3623
  supLoad.prop._supvalue.apply(this, arguments);
@@ -3617,6 +3629,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3617
3629
  }
3618
3630
  }
3619
3631
  });
3632
+
3620
3633
  nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
3621
3634
  prop: {
3622
3635
  value: function(type){
@@ -3633,6 +3646,9 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3633
3646
  ret = 'maybe';
3634
3647
  }
3635
3648
  }
3649
+ if(!ret && hasYt && type == 'video/youtube'){
3650
+ ret = 'maybe';
3651
+ }
3636
3652
  return ret;
3637
3653
  }
3638
3654
  }
@@ -3682,8 +3698,18 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3682
3698
  });
3683
3699
  }
3684
3700
  };
3685
-
3686
3701
 
3702
+ mediaelement.loadDebugger = function(){
3703
+ webshims.ready('dom-support', function(){
3704
+ webshims.loader.loadScript('mediaelement-debug');
3705
+ });
3706
+ };
3707
+
3708
+ if(({noCombo: 1, media: 1})[webshims.cfg.debug]){
3709
+ $(document).on('mediaerror', function(e){
3710
+ mediaelement.loadDebugger();
3711
+ });
3712
+ }
3687
3713
  //set native implementation ready, before swf api is retested
3688
3714
  if(hasNative){
3689
3715
  webshims.isReady('mediaelement-core', true);