webshims-rails 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. data/lib/webshims-rails.rb +1 -1
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/readme.textile +5 -3
  4. data/vendor/assets/javascripts/webshims/dev/extras/custom-validity.js +261 -0
  5. data/vendor/assets/javascripts/webshims/dev/extras/modernizr-custom.js +535 -0
  6. data/vendor/assets/javascripts/webshims/dev/extras/mousepress.js +60 -0
  7. data/vendor/assets/javascripts/webshims/dev/polyfiller.js +1171 -0
  8. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/README +62 -0
  9. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/canvas2png.js +42 -0
  10. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.js +28 -0
  11. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/proxy.php +73 -0
  13. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/save.php +49 -0
  14. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/README +82 -0
  15. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/canvas2png.js +42 -0
  16. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  17. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  18. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flashcanvas.js +31 -0
  19. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/proxy.php +73 -0
  20. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/save.php +49 -0
  21. data/vendor/assets/javascripts/webshims/dev/shims/combos/1.js +1710 -0
  22. data/vendor/assets/javascripts/webshims/dev/shims/combos/10.js +3317 -0
  23. data/vendor/assets/javascripts/webshims/dev/shims/combos/11.js +1585 -0
  24. data/vendor/assets/javascripts/webshims/dev/shims/combos/12.js +1587 -0
  25. data/vendor/assets/javascripts/webshims/dev/shims/combos/13.js +1054 -0
  26. data/vendor/assets/javascripts/webshims/dev/shims/combos/14.js +476 -0
  27. data/vendor/assets/javascripts/webshims/dev/shims/combos/15.js +314 -0
  28. data/vendor/assets/javascripts/webshims/dev/shims/combos/16.js +2101 -0
  29. data/vendor/assets/javascripts/webshims/dev/shims/combos/17.js +2264 -0
  30. data/vendor/assets/javascripts/webshims/dev/shims/combos/18.js +2161 -0
  31. data/vendor/assets/javascripts/webshims/dev/shims/combos/19.js +2244 -0
  32. data/vendor/assets/javascripts/webshims/dev/shims/combos/2.js +2294 -0
  33. data/vendor/assets/javascripts/webshims/dev/shims/combos/20.js +1607 -0
  34. data/vendor/assets/javascripts/webshims/dev/shims/combos/21.js +1635 -0
  35. data/vendor/assets/javascripts/webshims/dev/shims/combos/22.js +2409 -0
  36. data/vendor/assets/javascripts/webshims/dev/shims/combos/23.js +2168 -0
  37. data/vendor/assets/javascripts/webshims/dev/shims/combos/24.js +2777 -0
  38. data/vendor/assets/javascripts/webshims/dev/shims/combos/25.js +2204 -0
  39. data/vendor/assets/javascripts/webshims/dev/shims/combos/26.js +2863 -0
  40. data/vendor/assets/javascripts/webshims/dev/shims/combos/27.js +4079 -0
  41. data/vendor/assets/javascripts/webshims/dev/shims/combos/3.js +2971 -0
  42. data/vendor/assets/javascripts/webshims/dev/shims/combos/4.js +823 -0
  43. data/vendor/assets/javascripts/webshims/dev/shims/combos/5.js +1078 -0
  44. data/vendor/assets/javascripts/webshims/dev/shims/combos/59.js +1754 -0
  45. data/vendor/assets/javascripts/webshims/dev/shims/combos/6.js +1230 -0
  46. data/vendor/assets/javascripts/webshims/dev/shims/combos/7.js +1485 -0
  47. data/vendor/assets/javascripts/webshims/dev/shims/combos/8.js +1442 -0
  48. data/vendor/assets/javascripts/webshims/dev/shims/combos/9.js +2515 -0
  49. data/vendor/assets/javascripts/webshims/dev/shims/details.js +146 -0
  50. data/vendor/assets/javascripts/webshims/dev/shims/dom-extend.js +908 -0
  51. data/vendor/assets/javascripts/webshims/dev/shims/es5.js +802 -0
  52. data/vendor/assets/javascripts/webshims/dev/shims/excanvas.js +924 -0
  53. data/vendor/assets/javascripts/webshims/dev/shims/form-core.js +660 -0
  54. data/vendor/assets/javascripts/webshims/dev/shims/form-datalist.js +677 -0
  55. data/vendor/assets/javascripts/webshims/dev/shims/form-message.js +164 -0
  56. data/vendor/assets/javascripts/webshims/dev/shims/form-native-extend.js +256 -0
  57. data/vendor/assets/javascripts/webshims/dev/shims/form-native-fix.js +261 -0
  58. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-api.js +384 -0
  59. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-ui.js +847 -0
  60. data/vendor/assets/javascripts/webshims/dev/shims/form-shim-extend.js +1472 -0
  61. data/vendor/assets/javascripts/webshims/dev/shims/geolocation.js +168 -0
  62. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ar.js +32 -0
  63. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ch-ZN.js +32 -0
  64. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-de.txt +33 -0
  65. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-el.js +32 -0
  66. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-en.txt +34 -0
  67. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-es.js +32 -0
  68. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-fr.js +32 -0
  69. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-he.js +32 -0
  70. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hi.js +32 -0
  71. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hu.js +32 -0
  72. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-it.js +32 -0
  73. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ja.js +32 -0
  74. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-nl.js +32 -0
  75. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-pt-PT.js +32 -0
  76. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ru.js +32 -0
  77. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-sv.js +32 -0
  78. data/vendor/assets/javascripts/webshims/dev/shims/json-storage.js +308 -0
  79. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/license.txt +1 -0
  80. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/player.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/readme.html +87 -0
  82. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-core.js +534 -0
  83. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-native-fix.js +99 -0
  84. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-swf.js +1074 -0
  85. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-yt.js +543 -0
  86. data/vendor/assets/javascripts/webshims/dev/shims/styles/details-arrows.png +0 -0
  87. data/vendor/assets/javascripts/webshims/dev/shims/styles/forms.png +0 -0
  88. data/vendor/assets/javascripts/webshims/dev/shims/styles/polyfill-loader.gif +0 -0
  89. data/vendor/assets/javascripts/webshims/dev/shims/styles/shim.css +677 -0
  90. data/vendor/assets/javascripts/webshims/dev/shims/swf/jwwebshims.swf +0 -0
  91. data/vendor/assets/javascripts/webshims/dev/shims/swf/localStorage.swf +0 -0
  92. data/vendor/assets/javascripts/webshims/dev/shims/track-ui.js +292 -0
  93. data/vendor/assets/javascripts/webshims/dev/shims/track.js +763 -0
  94. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +20 -20
  95. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +29 -29
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +37 -33
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +83 -76
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +44 -42
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +43 -38
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -25
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +60 -55
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +68 -64
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +60 -59
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +66 -64
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +74 -69
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +46 -43
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +52 -47
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +61 -57
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +68 -60
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +82 -77
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +58 -0
  112. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +80 -0
  113. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -0
  114. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +96 -91
  115. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +30 -31
  116. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +37 -39
  117. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +59 -61
  118. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +31 -29
  119. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +38 -37
  120. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +38 -33
  121. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +68 -63
  122. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +22 -20
  123. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +15 -14
  124. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +22 -22
  125. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +22 -22
  126. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +8 -9
  127. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +7 -8
  128. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +23 -21
  129. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +44 -33
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +3 -0
  131. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  132. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +86 -86
  133. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +16 -13
  134. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +30 -30
  135. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +14 -0
  136. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +71 -10
  137. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -0
  138. data/vendor/assets/javascripts/webshims/minified/shims/track.js +20 -0
  139. metadata +101 -5
  140. data/vendor/assets/javascripts/webshims/minified/shims/form-output.js +0 -5
@@ -0,0 +1 @@
1
+ This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
@@ -0,0 +1,87 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+
5
+ <title>About the JW Player 5</title>
6
+
7
+ <style type="text/css">
8
+ body { background-color: #fff; padding: 0 20px; color:#000; font: 13px/18px Arial, sans-serif; }
9
+ a { color: #360; }
10
+ h3 { padding-top: 20px; }
11
+ ol { margin:5px 0 15px 16px; padding:0; list-style-type:square; }
12
+ </style>
13
+
14
+ </head>
15
+ <body>
16
+
17
+ <h1>About the JW Player 5</h1>
18
+ <p>Thank you for downloading the JW Player, the leading open source video player for Flash and HTML5 on the Web. Not only is the JW Player the easiest way to put video on your website, but we offer a host of other products and services to assist in providing the best possible video experience for your users.</p>
19
+
20
+ <h3>Quickstart</h3>
21
+ <p>The quickest way to get started is to unzip the file you downloaded (you must have done that if you're reading this!) and copy the contents into a folder called 'jwplayer' at the root of your website. The end result should be:</p>
22
+ <ol>
23
+ <li>{webroot}/jwplayer/player.swf</li>
24
+ <li>{webroot}/jwplayer/jwplayer.js</li>
25
+ <li>etc...</li>
26
+ </ol>
27
+ <p>You can then view the source of this page and copy the code from the example below onto your webpage. That's it! You should see a player on your site.</p>
28
+
29
+ <h3>An Example of the JW Player</h3>
30
+ <p>Below you see a simple embedded example of the JW Player.</p>
31
+
32
+ <!-- START OF THE PLAYER EMBEDDING TO COPY-PASTE -->
33
+ <div id="mediaplayer">JW Player goes here</div>
34
+
35
+ <script type="text/javascript" src="jwplayer.js"></script>
36
+ <script type="text/javascript">
37
+ jwplayer("mediaplayer").setup({
38
+ flashplayer: "player.swf",
39
+ file: "video.mp4",
40
+ image: "preview.jpg"
41
+ });
42
+ </script>
43
+ <!-- END OF THE PLAYER EMBEDDING -->
44
+
45
+ <h3>Support, Documentation and Source Code</h3>
46
+
47
+ <p>If you need help, the LongTail Support Community contains a wealth of information, include a large <a href="http://www.longtailvideo.com/support/jw-player/">library of documentation</a>, a very active <a href="http://www.longtailvideo.com/support/forums/jw-player/">support forum</a>, and a <a href="http://www.longtailvideo.com/support/blog">blog</a> on the latest releases and tips on publishing video.</p>
48
+
49
+ <p>Some documents you might find useful are:</p>
50
+ <ol>
51
+ <li><a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12539/supported-video-and-audio-formats">Supported file formats</a>.</li>
52
+ <li><a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12537/xml-playlist-support">Supported XML playlist formats</a>.</li>
53
+ <li><a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12536/configuration-options">Complete list of configuration options</a> (for customizing the player).</li>
54
+ <li><a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12540/javascript-api-reference">Supported JavaScript API calls</a> (for JavaScript interaction).</li>
55
+ <li><a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/14/skinning-the-jw-player-5">Supported skinning elements</a> (for creating your own graphics).</li>
56
+ <li><a href="http://developer.longtailvideo.com/trac/roadmap/">Roadmap with full changelogs</a> for each version.</li>
57
+ </ol>
58
+ <p>Last, the source code of all different versions of the player can <a href="http://developer.longtailvideo.com/trac/browser/tags">be found here</a>. You can click a version and download the ZIP files (the links are at the bottom).</p>
59
+
60
+ <h3>Licensing</h3>
61
+ <p>The player is licensed under a <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">Creative Commons License</a>. It allows you to use, modify and redistribute the script, but only for <b>non-commercial</b> purposes.</p>
62
+ <p>Examples of <b>commercial use</b> include:
63
+
64
+ <ul>
65
+ <li>websites with any advertisements; </li>
66
+ <li>websites owned or operated by corporations; </li>
67
+ <li>websites designed to promote other products, such as a band or artist;</li>
68
+ <li>products (e.g. a CMS) that bundle LongTail products into its offering. </li>
69
+ </ul>
70
+
71
+ If any of the above conditions apply to you, then <a href="http://www.longtailvideo.com/order/" title="Order commercial licenses">please purchase a license for the player</a>. If you are still unsure whether you need to purchase a license, please <a href="http://www.longtailvideo.com/support/contact-us">contact us</a>.</p>
72
+
73
+ <h3>Related Products</h3>
74
+ <p>In addition to the JW Player, <a href="http://www.longtailvideo.com">LongTail Video</a> has a suite of products to help you publish video.</p>
75
+ <p>Learn more about them here:</p>
76
+
77
+ <ul>
78
+ <li><a href="http://www.longtailvideo.com/addons/skins">Skins</a> - Change the look of your player to match your site. <a href="http://www.longtailvideo.com/addons/skins">View our library</a>.</li>
79
+ <li><a href="http://www.longtailvideo.com/addons/plugins">Plugins</a> - Add functionality to your player, like sharing, social networking, analytics, advertising and more. <a href="http://www.longtailvideo.com/addons/plugins">Find one for you</a>.</li>
80
+ <li><a href="http://www.longtailvideo.com/referral.aspx?page=pubreferral&ref=xvwjuhgktajeelu">AdSolution</a> - Monetize your videos with LongTail's AdSolution. Integrate pre-roll, overlay and post-roll ads into your site and starting making money today. <a href="http://www.longtailvideo.com/referral.aspx?page=pubreferral&ref=xvwjuhgktajeelu">Sign up now</a>.</li>
81
+ <li><a href="http://www.bitsontherun.com/via/longtailvideo">Bits on the Run</a> - Upload, encode, store, manage and stream your videos with Bits on the Run, LongTail's end-to-end online video platform. <a href="http://www.bitsontherun.com/via/longtailvideo">Sign up now</a>.</li>
82
+ </ul>
83
+
84
+
85
+
86
+ </body>
87
+ </html>
@@ -0,0 +1,534 @@
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
+ });
534
+ })(jQuery, Modernizr, jQuery.webshims);