webshims-rails 0.4.7 → 1.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +15 -0
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +1 -1
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +1 -1
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +197 -166
  6. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1711 -1609
  7. data/vendor/assets/javascripts/webshims/shims/combos/10.js +2575 -2253
  8. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2452 -1476
  9. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1405 -1159
  10. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1316 -963
  11. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1862 -179
  12. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4327 -287
  13. data/vendor/assets/javascripts/webshims/shims/combos/16.js +3887 -586
  14. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2911 -2159
  15. data/vendor/assets/javascripts/webshims/shims/combos/18.js +3425 -1730
  16. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2854 -1203
  17. data/vendor/assets/javascripts/webshims/shims/combos/2.js +3351 -2130
  18. data/vendor/assets/javascripts/webshims/shims/combos/20.js +2426 -581
  19. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1915 -1574
  20. data/vendor/assets/javascripts/webshims/shims/combos/22.js +864 -2275
  21. data/vendor/assets/javascripts/webshims/shims/combos/23.js +609 -1811
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +1655 -2736
  23. data/vendor/assets/javascripts/webshims/shims/combos/4.js +1037 -603
  24. data/vendor/assets/javascripts/webshims/shims/combos/5.js +3100 -773
  25. data/vendor/assets/javascripts/webshims/shims/combos/6.js +3631 -840
  26. data/vendor/assets/javascripts/webshims/shims/combos/7.js +3596 -1354
  27. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1731 -188
  28. data/vendor/assets/javascripts/webshims/shims/combos/9.js +3243 -1431
  29. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +107 -18
  30. data/vendor/assets/javascripts/webshims/shims/es5.js +1 -0
  31. data/vendor/assets/javascripts/webshims/shims/form-core.js +553 -464
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +160 -154
  33. data/vendor/assets/javascripts/webshims/shims/form-message.js +73 -49
  34. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +18 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +161 -36
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2130 -813
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +206 -58
  38. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ar.js → formcfg-ar.js} +30 -0
  39. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ch-ZN.js → formcfg-ch-ZN.js} +31 -0
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-de.txt → formcfg-de.txt} +50 -11
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-el.js → formcfg-el.js} +31 -0
  42. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-en.txt → formcfg-en.txt} +44 -11
  43. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-es.js → formcfg-es.js} +31 -0
  44. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-fr.js → formcfg-fr.js} +31 -0
  45. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-he.js → formcfg-he.js} +31 -0
  46. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hi.js → formcfg-hi.js} +31 -0
  47. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hu.js → formcfg-hu.js} +31 -0
  48. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-it.js → formcfg-it.js} +31 -0
  49. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ja.js → formcfg-ja.js} +31 -0
  50. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-nl.js → formcfg-nl.js} +31 -0
  51. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-pt-PT.js → formcfg-pt-PT.js} +31 -0
  52. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ru.js → formcfg-ru.js} +31 -0
  53. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-sv.js → formcfg-sv.js} +32 -0
  54. data/vendor/assets/javascripts/webshims/shims/json-storage.js +16 -10
  55. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +155 -122
  56. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +76 -41
  57. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +8 -16
  58. data/vendor/assets/javascripts/webshims/shims/range-ui.js +388 -0
  59. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +12 -0
  60. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1186 -0
  62. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +868 -548
  63. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/swfmini.js +497 -0
  66. data/vendor/assets/javascripts/webshims/shims/track-ui.js +3 -0
  67. data/vendor/assets/javascripts/webshims/shims/track.js +29 -29
  68. metadata +26 -125
  69. data/vendor/assets/javascripts/webshims/minified/extras/custom-validity.js +0 -1
  70. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +0 -1
  71. data/vendor/assets/javascripts/webshims/minified/extras/mousepress.js +0 -1
  72. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +0 -1
  73. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/canvas2png.js +0 -1
  74. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.js +0 -1
  75. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.swf +0 -0
  76. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/proxy.php +0 -73
  77. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/save.php +0 -49
  78. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/canvas2png.js +0 -1
  79. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flashcanvas.js +0 -1
  82. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/proxy.php +0 -73
  83. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/save.php +0 -49
  84. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +0 -1
  85. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +0 -1
  86. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +0 -1
  87. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +0 -1
  88. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +0 -1
  89. data/vendor/assets/javascripts/webshims/minified/shims/combos/14.js +0 -1
  90. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +0 -1
  91. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +0 -1
  92. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +0 -1
  93. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +0 -1
  94. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +0 -1
  95. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +0 -1
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +0 -1
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +0 -1
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +0 -1
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +0 -1
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +0 -1
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +0 -1
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +0 -1
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +0 -1
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +0 -1
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +0 -1
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +0 -1
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +0 -1
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +0 -1
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +0 -1
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +0 -1
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +0 -1
  112. data/vendor/assets/javascripts/webshims/minified/shims/details.js +0 -1
  113. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +0 -1
  114. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +0 -1
  115. data/vendor/assets/javascripts/webshims/minified/shims/excanvas.js +0 -1
  116. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +0 -1
  117. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +0 -1
  118. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +0 -1
  119. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +0 -1
  120. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +0 -1
  121. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +0 -1
  122. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +0 -1
  123. data/vendor/assets/javascripts/webshims/minified/shims/geolocation.js +0 -1
  124. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ar.js +0 -1
  125. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ch-ZN.js +0 -1
  126. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +0 -33
  127. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-el.js +0 -1
  128. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +0 -34
  129. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-es.js +0 -1
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-fr.js +0 -1
  131. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-he.js +0 -1
  132. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hi.js +0 -1
  133. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hu.js +0 -1
  134. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-it.js +0 -1
  135. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ja.js +0 -1
  136. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-nl.js +0 -1
  137. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-pt-PT.js +0 -1
  138. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ru.js +0 -1
  139. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +0 -1
  140. data/vendor/assets/javascripts/webshims/minified/shims/json-storage.js +0 -1
  141. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/license.txt +0 -1
  142. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  143. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +0 -87
  144. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +0 -1
  145. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +0 -1
  146. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-native-fix.js +0 -1
  147. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +0 -1
  148. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +0 -1
  149. data/vendor/assets/javascripts/webshims/minified/shims/styles/details-arrows.png +0 -0
  150. data/vendor/assets/javascripts/webshims/minified/shims/styles/forms.png +0 -0
  151. data/vendor/assets/javascripts/webshims/minified/shims/styles/polyfill-loader.gif +0 -0
  152. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +0 -1
  153. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  154. data/vendor/assets/javascripts/webshims/minified/shims/swf/jwwebshims.swf +0 -0
  155. data/vendor/assets/javascripts/webshims/minified/shims/swf/localStorage.swf +0 -0
  156. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +0 -1
  157. data/vendor/assets/javascripts/webshims/minified/shims/track.js +0 -1
  158. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/README +0 -62
  159. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +0 -82
  160. data/vendor/assets/javascripts/webshims/shims/combos/24.js +0 -2872
  161. data/vendor/assets/javascripts/webshims/shims/combos/25.js +0 -2376
  162. data/vendor/assets/javascripts/webshims/shims/combos/26.js +0 -3009
  163. data/vendor/assets/javascripts/webshims/shims/combos/27.js +0 -4150
  164. data/vendor/assets/javascripts/webshims/shims/combos/59.js +0 -1747
  165. data/vendor/assets/javascripts/webshims/shims/jwplayer/license.txt +0 -1
  166. data/vendor/assets/javascripts/webshims/shims/jwplayer/player.swf +0 -0
  167. data/vendor/assets/javascripts/webshims/shims/jwplayer/readme.html +0 -87
  168. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +0 -972
@@ -1 +0,0 @@
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.
@@ -1,87 +0,0 @@
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>
@@ -1,972 +0,0 @@
1
- /*
2
- * todos:
3
- * - decouple muted/volume (needs improvement)
4
- * - implement video <-> flashcanvas pro API
5
- * - improve buffered-property with youtube/rtmp
6
- * - use jwplayer5 api instead of old flash4 api
7
- */
8
-
9
- jQuery.webshims.register('mediaelement-swf', function($, webshims, window, document, undefined, options){
10
- "use strict";
11
- var SENDEVENT = 'sendEvent';
12
- var mediaelement = webshims.mediaelement;
13
- var swfobject = window.swfobject;
14
- var hasNative = Modernizr.audio && Modernizr.video;
15
- var hasFlash = swfobject.hasFlashPlayerVersion('9.0.115');
16
- var loadedSwf = 0;
17
- var getProps = {
18
- paused: true,
19
- ended: false,
20
- currentSrc: '',
21
- duration: window.NaN,
22
-
23
- readyState: 0,
24
- networkState: 0,
25
- videoHeight: 0,
26
- videoWidth: 0,
27
- error: null,
28
- buffered: {
29
- start: function(index){
30
- if(index){
31
- webshims.error('buffered index size error');
32
- return;
33
- }
34
- return 0;
35
- },
36
- end: function(index){
37
- if(index){
38
- webshims.error('buffered index size error');
39
- return;
40
- }
41
- return 0;
42
- },
43
- length: 0
44
- }
45
- };
46
- var getPropKeys = Object.keys(getProps);
47
-
48
- var getSetProps = {
49
- currentTime: 0,
50
- volume: 1,
51
- muted: false
52
- };
53
- var getSetPropKeys = Object.keys(getSetProps);
54
-
55
- var playerStateObj = $.extend({
56
- isActive: 'html5',
57
- activating: 'html5',
58
- wasSwfReady: false,
59
- _bufferedEnd: 0,
60
- _bufferedStart: 0,
61
- _metadata: false,
62
- _durationCalcs: -1,
63
- _callMeta: false,
64
- currentTime: 0,
65
- _ppFlag: undefined
66
- }, getProps, getSetProps);
67
-
68
- var idRep = /^jwplayer-/;
69
- var getSwfDataFromID = function(id){
70
-
71
- var elem = document.getElementById(id.replace(idRep, ''));
72
- if(!elem){return;}
73
- var data = webshims.data(elem, 'mediaelement');
74
- return data.isActive == 'third' ? data : null;
75
- };
76
-
77
-
78
- var getSwfDataFromElem = function(elem){
79
- try {
80
- (elem.nodeName);
81
- } catch(er){
82
- return null;
83
- }
84
- var data = webshims.data(elem, 'mediaelement');
85
- return (data && data.isActive== 'third') ? data : null;
86
- };
87
-
88
- var trigger = function(elem, evt){
89
- evt = $.Event(evt);
90
- evt.preventDefault();
91
- $.event.trigger(evt, undefined, elem);
92
- };
93
-
94
- var playerSwfPath = options.playerPath || webshims.cfg.basePath + "jwplayer/" + (options.playerName || "player.swf");
95
- var jwplugin = options.pluginPath || webshims.cfg.basePath +'swf/jwwebshims.swf';
96
-
97
- webshims.extendUNDEFProp(options.params, {
98
- allowscriptaccess: 'always',
99
- allowfullscreen: 'true',
100
- wmode: 'transparent'
101
- });
102
- webshims.extendUNDEFProp(options.vars, {
103
- screencolor: 'ffffffff'
104
- });
105
- webshims.extendUNDEFProp(options.attrs, {
106
- bgcolor: '#000000'
107
- });
108
-
109
- var getDuration = function(data, obj){
110
- var curDuration = data.duration;
111
- if(curDuration && data._durationCalcs > 0){return;}
112
- try {
113
- data.duration = data.jwapi.getPlaylist()[0].duration;
114
- if(!data.duration || data.duration <= 0 || data.duration === data._lastDuration){
115
- data.duration = curDuration;
116
- }
117
- } catch(er){}
118
- if(data.duration && data.duration != data._lastDuration){
119
- trigger(data._elem, 'durationchange');
120
- if(data._elemNodeName == 'audio' || data._callMeta){
121
- mediaelement.jwEvents.Model.META($.extend({duration: data.duration}, obj), data);
122
- }
123
- data._durationCalcs--;
124
- } else {
125
- data._durationCalcs++;
126
- }
127
- };
128
- var setReadyState = function(readyState, data){
129
- if(readyState < 3){
130
- clearTimeout(data._canplaythroughTimer);
131
- }
132
- if(readyState >= 3 && data.readyState < 3){
133
- data.readyState = readyState;
134
- trigger(data._elem, 'canplay');
135
- clearTimeout(data._canplaythroughTimer);
136
- data._canplaythroughTimer = setTimeout(function(){
137
- setReadyState(4, data);
138
- }, 4000);
139
- }
140
- if(readyState >= 4 && data.readyState < 4){
141
- data.readyState = readyState;
142
- trigger(data._elem, 'canplaythrough');
143
- }
144
- data.readyState = readyState;
145
- };
146
-
147
- $.extend($.event.customEvent, {
148
- updatemediaelementdimensions: true,
149
- flashblocker: true,
150
- swfstageresize: true,
151
- mediaelementapichange: true
152
- });
153
-
154
- mediaelement.jwEvents = {
155
- View: {
156
-
157
- PLAY: function(obj){
158
- var data = getSwfDataFromID(obj.id);
159
- if(!data || data.stopPlayPause){return;}
160
- data._ppFlag = true;
161
- if(data.paused == obj.state){
162
- data.paused = !obj.state;
163
- if(data.ended){
164
- data.ended = false;
165
- }
166
- trigger(data._elem, obj.state ? 'play' : 'pause');
167
- }
168
- }
169
- },
170
- Model: {
171
-
172
- BUFFER: function(obj){
173
- var data = getSwfDataFromID(obj.id);
174
- if(!data || !('percentage' in obj) || data._bufferedEnd == obj.percentage){return;}
175
- data.networkState = (obj.percentage == 100) ? 1 : 2;
176
- if(isNaN(data.duration) || (obj.percentage > 5 && obj.percentage < 25) || (obj.percentage === 100)){
177
- getDuration(data, obj);
178
- }
179
-
180
- if(data.ended){
181
- data.ended = false;
182
- }
183
- if(!data.duration){
184
- return;
185
- }
186
- if(obj.percentage > 2 && obj.percentage < 20){
187
- setReadyState(3, data);
188
- } else if(obj.percentage > 20){
189
- setReadyState(4, data);
190
- }
191
- if(data._bufferedEnd && (data._bufferedEnd > obj.percentage)){
192
- data._bufferedStart = data.currentTime || 0;
193
- }
194
-
195
- data._bufferedEnd = obj.percentage;
196
- data.buffered.length = 1;
197
- if(obj.percentage == 100){
198
- data.networkState = 1;
199
- setReadyState(4, data);
200
- }
201
- $.event.trigger('progress', undefined, data._elem, true);
202
- },
203
- META: function(obj, data){
204
-
205
- data = data && data.networkState ? data : getSwfDataFromID(obj.id);
206
-
207
- if(!data){return;}
208
- if( !('duration' in obj) ){
209
- data._callMeta = true;
210
- return;
211
- }
212
-
213
- if( data._metadata && (!obj.height || data.videoHeight == obj.height) && (obj.duration === data.duration) ){return;}
214
-
215
- data._metadata = true;
216
-
217
- var oldDur = data.duration;
218
- if(obj.duration){
219
- data.duration = obj.duration;
220
- }
221
- data._lastDuration = data.duration;
222
- if(obj.height || obj.width){
223
- data.videoHeight = obj.height || 0;
224
- data.videoWidth = obj.width || 0;
225
- }
226
- if(!data.networkState){
227
- data.networkState = 2;
228
- }
229
- if(data.readyState < 1){
230
- setReadyState(1, data);
231
- }
232
- if(data.duration && oldDur !== data.duration){
233
- trigger(data._elem, 'durationchange');
234
- }
235
-
236
- trigger(data._elem, 'loadedmetadata');
237
- },
238
- TIME: function(obj){
239
- var data = getSwfDataFromID(obj.id);
240
- if(!data || data.currentTime === obj.position){return;}
241
- data.currentTime = obj.position;
242
- if(data.duration && data.duration < data.currentTime){
243
- getDuration(data, obj);
244
- }
245
- if(data.readyState < 2){
246
- setReadyState(2, data);
247
- }
248
- if(data.ended){
249
- data.ended = false;
250
- }
251
- trigger(data._elem, 'timeupdate');
252
-
253
- },
254
- STATE: function(obj){
255
- var data = getSwfDataFromID(obj.id);
256
- if(!data){return;}
257
- switch(obj.newstate) {
258
- case 'BUFFERING':
259
-
260
- if(data.ended){
261
- data.ended = false;
262
- }
263
- setReadyState(1, data);
264
- trigger(data._elem, 'waiting');
265
- break;
266
- case 'PLAYING':
267
- data.paused = false;
268
- data._ppFlag = true;
269
- if(!data.duration){
270
- getDuration(data, obj);
271
- }
272
- if(data.readyState < 3){
273
- setReadyState(3, data);
274
- }
275
- if(data.ended){
276
- data.ended = false;
277
- }
278
- trigger(data._elem, 'playing');
279
- break;
280
- case 'PAUSED':
281
- if(!data.paused && !data.stopPlayPause){
282
- data.paused = true;
283
- data._ppFlag = true;
284
- trigger(data._elem, 'pause');
285
- }
286
- break;
287
- case 'COMPLETED':
288
- if(data.readyState < 4){
289
- setReadyState(4, data);
290
- }
291
- data.ended = true;
292
- trigger(data._elem, 'ended');
293
- break;
294
- }
295
- }
296
- }
297
- ,Controller: {
298
-
299
- ERROR: function(obj){
300
- var data = getSwfDataFromID(obj.id);
301
- if(!data){return;}
302
- mediaelement.setError(data._elem, obj.message);
303
- },
304
- SEEK: function(obj){
305
- var data = getSwfDataFromID(obj.id);
306
- if(!data){return;}
307
- if(data.ended){
308
- data.ended = false;
309
- }
310
- if(data.paused){
311
- try {
312
- data.jwapi[SENDEVENT]('play', 'false');
313
- } catch(er){}
314
- }
315
- if(data.currentTime != obj.position){
316
- data.currentTime = obj.position;
317
- trigger(data._elem, 'timeupdate');
318
- }
319
-
320
-
321
- },
322
- VOLUME: function(obj){
323
- var data = getSwfDataFromID(obj.id);
324
- if(!data){return;}
325
- var newVolume = obj.percentage / 100;
326
- if(data.volume == newVolume){return;}
327
- data.volume = newVolume;
328
- trigger(data._elem, 'volumechange');
329
- },
330
- MUTE: function(obj){
331
- if(obj.state){return;}
332
- var data = getSwfDataFromID(obj.id);
333
- if(!data){return;}
334
- if(data.muted == obj.state){return;}
335
- data.muted = obj.state;
336
- trigger(data._elem, 'volumechange');
337
- }
338
- }
339
- };
340
-
341
- var initEvents = function(data){
342
- var passed = true;
343
- $.each(mediaelement.jwEvents, function(mvcName, evts){
344
- $.each(evts, function(evtName){
345
- try {
346
- data.jwapi['add'+ mvcName +'Listener'](evtName, 'jQuery.webshims.mediaelement.jwEvents.'+ mvcName +'.'+ evtName);
347
- } catch(er){
348
- passed = false;
349
- return false;
350
- }
351
- });
352
- });
353
- return passed;
354
- };
355
-
356
- var workActionQueue = function(data){
357
- var actionLen = data.actionQueue.length;
358
- var i = 0;
359
- var operation;
360
- if(actionLen && data.isActive == 'third'){
361
- while(data.actionQueue.length && actionLen > i){
362
- i++;
363
- operation = data.actionQueue.shift();
364
- data.jwapi[operation.fn].apply(data.jwapi, operation.args);
365
- }
366
- }
367
- if(data.actionQueue.length){
368
- data.actionQueue = [];
369
- }
370
- };
371
- var startAutoPlay = function(data){
372
- if(!data){return;}
373
- if( (data._ppFlag === undefined && ($.prop(data._elem, 'autoplay')) || !data.paused)){
374
- setTimeout(function(){
375
- if(data.isActive == 'third' && (data._ppFlag === undefined || !data.paused)){
376
- try {
377
- $(data._elem).play();
378
- } catch(er){}
379
- }
380
- }, 1);
381
- }
382
- };
383
-
384
-
385
- mediaelement.playerResize = function(id){
386
- if(!id){return;}
387
- var elem = document.getElementById(id.replace(idRep, ''));
388
-
389
- if(elem){
390
- $(elem).triggerHandler('swfstageresize');
391
- }
392
- elem = null;
393
- };
394
-
395
-
396
- $(document).on('emptied', function(e){
397
- var data = getSwfDataFromElem(e.target);
398
- startAutoPlay(data);
399
- });
400
-
401
- var localConnectionTimer;
402
- mediaelement.jwPlayerReady = function(jwData){
403
- var data = getSwfDataFromID(jwData.id);
404
- var passed = true;
405
- var i = 0;
406
- var doneFn = function(){
407
- if(i > 9){return;}
408
- i++;
409
- if(initEvents(data)){
410
- if(!data.wasSwfReady){
411
- var version = parseFloat( jwData.version, 10);
412
- if(version < 5.1 || version >= 6){
413
- webshims.warn('mediaelement-swf is only testet with jwplayer 5.6+');
414
- }
415
- } else {
416
- $(data._elem).mediaLoad();
417
-
418
- }
419
- data.wasSwfReady = true;
420
- data.tryedReframeing = 0;
421
- workActionQueue(data);
422
- startAutoPlay(data);
423
- } else {
424
- clearTimeout(data.reframeTimer);
425
- data.reframeTimer = setTimeout(doneFn, 9 * i);
426
- if(i > 2 && data.tryedReframeing < 9){
427
- data.tryedReframeing++;
428
- data.shadowElem.css({overflow: 'visible'});
429
- setTimeout(function(){
430
- data.shadowElem.css({overflow: 'hidden'});
431
- }, 16);
432
- }
433
- }
434
- };
435
- if(!data || !data.jwapi){return;}
436
- if(!data.tryedReframeing){
437
- data.tryedReframeing = 0;
438
- }
439
- clearTimeout(localConnectionTimer);
440
- data.jwData = jwData;
441
- data.shadowElem.removeClass('flashblocker-assumed');
442
- $.prop(data._elem, 'volume', data.volume);
443
- $.prop(data._elem, 'muted', data.muted);
444
- doneFn();
445
-
446
- };
447
-
448
- var addMediaToStopEvents = $.noop;
449
- if(hasNative){
450
- var stopEvents = {
451
- play: 1,
452
- playing: 1
453
- };
454
- var hideEvtArray = ['play', 'pause', 'playing', 'canplay', 'progress', 'waiting', 'ended', 'loadedmetadata', 'durationchange', 'emptied'];
455
- var hidevents = hideEvtArray.map(function(evt){
456
- return evt +'.webshimspolyfill';
457
- }).join(' ');
458
- var opposite = {
459
- 'html5': 'third',
460
- 'third': 'html5'
461
- };
462
- var hidePlayerEvents = function(event){
463
- var data = webshims.data(event.target, 'mediaelement');
464
- if(!data){return;}
465
- var isNativeHTML5 = ( event.originalEvent && event.originalEvent.type === event.type );
466
- if( isNativeHTML5 == (data.activating == 'third') ){
467
- event.stopImmediatePropagation();
468
- if(stopEvents[event.type]){
469
- if(data.isActive != data.activating){
470
- $(event.target).pause();
471
- } else {
472
- data.isActive = opposite[data.isActive];
473
- $(event.target).pause();
474
- data.isActive = opposite[data.isActive];
475
- }
476
- }
477
- }
478
- };
479
-
480
-
481
- addMediaToStopEvents = function(elem){
482
- $(elem)
483
- .off(hidevents)
484
- .on(hidevents, hidePlayerEvents)
485
- ;
486
- hideEvtArray.forEach(function(evt){
487
- webshims.moveToFirstEvent(elem, evt);
488
- });
489
- };
490
- addMediaToStopEvents(document);
491
- }
492
-
493
-
494
- mediaelement.setActive = function(elem, type, data){
495
- if(!data){
496
- data = webshims.data(elem, 'mediaelement');
497
- }
498
- if(!data || data.isActive == type){return;}
499
- if(type != 'html5' && type != 'third'){
500
- webshims.warn('wrong type for mediaelement activating: '+ type);
501
- }
502
- var shadowData = webshims.data(elem, 'shadowData');
503
- data.activating = type;
504
- $(elem).pause();
505
- data.isActive = type;
506
- if(type == 'third'){
507
- shadowData.shadowElement = shadowData.shadowFocusElement = data.shadowElem[0];
508
- $(elem).addClass('swf-api-active nonnative-api-active').hide().getShadowElement().show();
509
- } else {
510
- $(elem).removeClass('swf-api-active nonnative-api-active').show().getShadowElement().hide();
511
- shadowData.shadowElement = shadowData.shadowFocusElement = false;
512
- }
513
- $(elem).trigger('mediaelementapichange');
514
- };
515
-
516
-
517
-
518
- var resetSwfProps = (function(){
519
- var resetProtoProps = ['_bufferedEnd', '_bufferedStart', '_metadata', '_ppFlag', 'currentSrc', 'currentTime', 'duration', 'ended', 'networkState', 'paused', 'videoHeight', 'videoWidth', '_callMeta', '_durationCalcs'];
520
- var len = resetProtoProps.length;
521
- return function(data){
522
-
523
- if(!data){return;}
524
- var lenI = len;
525
- var networkState = data.networkState;
526
- setReadyState(0, data);
527
- while(--lenI){
528
- delete data[resetProtoProps[lenI]];
529
- }
530
- data.actionQueue = [];
531
- data.buffered.length = 0;
532
- if(networkState){
533
- trigger(data._elem, 'emptied');
534
- }
535
- };
536
- })();
537
-
538
- var setElementDimension = function(data, hasControls){
539
- var elem = data._elem;
540
- var box = data.shadowElem;
541
- $(elem)[hasControls ? 'addClass' : 'removeClass']('webshims-controls');
542
- if(data._elemNodeName == 'audio' && !hasControls){
543
- box.css({width: 0, height: 0});
544
- } else {
545
- box.css({
546
- width: elem.style.width || $(elem).width(),
547
- height: elem.style.height || $(elem).height()
548
- });
549
- }
550
- };
551
-
552
- mediaelement.createSWF = function( elem, canPlaySrc, data ){
553
- if(!hasFlash){
554
- setTimeout(function(){
555
- $(elem).mediaLoad(); //<- this should produce a mediaerror
556
- }, 1);
557
- return;
558
- }
559
-
560
- if(loadedSwf < 1){
561
- loadedSwf = 1;
562
- } else {
563
- loadedSwf++;
564
- }
565
- var vars = $.extend({}, options.vars, {
566
- image: $.attr(elem, 'poster') && $.prop(elem, 'poster') || '',
567
- file: canPlaySrc.streamId || canPlaySrc.srcProp
568
- });
569
- var elemVars = $(elem).data('vars') || {};
570
-
571
- if(canPlaySrc.server){
572
- vars.streamer = canPlaySrc.server;
573
- }
574
- if(!data){
575
- data = webshims.data(elem, 'mediaelement');
576
- }
577
-
578
- if(data && data.swfCreated){
579
- mediaelement.setActive(elem, 'third', data);
580
- resetSwfProps(data);
581
- data.currentSrc = canPlaySrc.srcProp;
582
- $.extend(vars, elemVars);
583
- options.changeSWF(vars, elem, canPlaySrc, data, 'load');
584
- queueSwfMethod(elem, SENDEVENT, ['LOAD', vars]);
585
- return;
586
- }
587
-
588
-
589
- var hasControls = $.prop(elem, 'controls');
590
- var elemId = 'jwplayer-'+ webshims.getID(elem);
591
- var params = $.extend(
592
- {},
593
- options.params,
594
- $(elem).data('params')
595
- );
596
- var elemNodeName = elem.nodeName.toLowerCase();
597
- var attrs = $.extend(
598
- {},
599
- options.attrs,
600
- {
601
- name: elemId,
602
- id: elemId
603
- },
604
- $(elem).data('attrs')
605
- );
606
- var box = $('<div class="polyfill-'+ (elemNodeName) +' polyfill-mediaelement" id="wrapper-'+ elemId +'"><div id="'+ elemId +'"></div>')
607
- .css({
608
- position: 'relative',
609
- overflow: 'hidden'
610
- })
611
- ;
612
- var setDimensions = function(){
613
- setElementDimension(data, $.prop(elem, 'controls'));
614
- };
615
-
616
- data = webshims.data(elem, 'mediaelement', webshims.objectCreate(playerStateObj, {
617
- actionQueue: {
618
- value: []
619
- },
620
- shadowElem: {
621
- value: box
622
- },
623
- _elemNodeName: {
624
- value: elemNodeName
625
- },
626
- _elem: {
627
- value: elem
628
- },
629
- currentSrc: {
630
- value: canPlaySrc.srcProp
631
- },
632
- swfCreated: {
633
- value: true
634
- },
635
- buffered: {
636
- value: {
637
- start: function(index){
638
- if(index >= data.buffered.length){
639
- webshims.error('buffered index size error');
640
- return;
641
- }
642
- return 0;
643
- },
644
- end: function(index){
645
- if(index >= data.buffered.length){
646
- webshims.error('buffered index size error');
647
- return;
648
- }
649
- return ( (data.duration - data._bufferedStart) * data._bufferedEnd / 100) + data._bufferedStart;
650
- },
651
- length: 0
652
- }
653
- }
654
- }));
655
-
656
- setElementDimension(data, hasControls);
657
-
658
- box.insertBefore(elem);
659
-
660
- if(hasNative){
661
- $.extend(data, {volume: $.prop(elem, 'volume'), muted: $.prop(elem, 'muted')});
662
- }
663
-
664
- $.extend(vars,
665
- {
666
- id: elemId,
667
- controlbar: hasControls ? options.vars.controlbar || (elemNodeName == 'video' ? 'over' : 'bottom') : (elemNodeName == 'video') ? 'none' : 'bottom',
668
- icons: ''+ (hasControls && elemNodeName == 'video')
669
- },
670
- elemVars,
671
- {playerready: 'jQuery.webshims.mediaelement.jwPlayerReady'}
672
- );
673
- if(vars.plugins){
674
- vars.plugins += ','+jwplugin;
675
- } else {
676
- vars.plugins = jwplugin;
677
- }
678
-
679
-
680
- webshims.addShadowDom(elem, box);
681
-
682
- addMediaToStopEvents(elem);
683
-
684
- mediaelement.setActive(elem, 'third', data);
685
-
686
- options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
687
-
688
-
689
- $(document).on('updateshadowdom', setDimensions);
690
- $(elem).on('updatemediaelementdimensions', setDimensions);
691
-
692
-
693
- swfobject.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.0", false, vars, params, attrs, function(swfData){
694
-
695
- if(swfData.success){
696
- data.jwapi = swfData.ref;
697
-
698
- if(!hasControls){
699
- $(swfData.ref).attr('tabindex', '-1').css('outline', 'none');
700
- }
701
- setTimeout(function(){
702
- if((!swfData.ref.parentNode && box[0].parentNode) || swfData.ref.style.display == "none"){
703
- box.addClass('flashblocker-assumed');
704
- $(elem).trigger('flashblocker');
705
- webshims.warn("flashblocker assumed");
706
- }
707
- $(swfData.ref).css({'minHeight': '2px', 'minWidth': '2px', display: 'block'});
708
- }, 9);
709
- if(!localConnectionTimer){
710
- clearTimeout(localConnectionTimer);
711
- localConnectionTimer = setTimeout(function(){
712
- var flash = $(swfData.ref);
713
- if(flash[0].offsetWidth > 1 && flash[0].offsetHeight > 1 && location.protocol.indexOf('file:') === 0){
714
- webshims.error("Add your local development-directory to the local-trusted security sandbox: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html");
715
- } else if(flash[0].offsetWidth < 2 || flash[0].offsetHeight < 2) {
716
- webshims.warn("JS-SWF connection can't be established on hidden or unconnected flash objects");
717
- }
718
- flash = null;
719
- }, 8000);
720
- }
721
- }
722
- });
723
- };
724
-
725
-
726
- var queueSwfMethod = function(elem, fn, args, data){
727
- data = data || getSwfDataFromElem(elem);
728
- if(data){
729
- if(data.jwapi && data.jwapi[fn]){
730
- data.jwapi[fn].apply(data.jwapi, args || []);
731
- } else {
732
- //todo add to queue
733
- data.actionQueue.push({fn: fn, args: args});
734
- if(data.actionQueue.length > 10){
735
- setTimeout(function(){
736
- if(data.actionQueue.length > 5){
737
- data.actionQueue.shift();
738
- }
739
- }, 99);
740
- }
741
- }
742
- return data;
743
- }
744
- return false;
745
- };
746
-
747
- ['audio', 'video'].forEach(function(nodeName){
748
- var descs = {};
749
- var mediaSup;
750
- var createGetProp = function(key){
751
- if(nodeName == 'audio' && (key == 'videoHeight' || key == 'videoWidth')){return;}
752
-
753
- descs[key] = {
754
- get: function(){
755
- var data = getSwfDataFromElem(this);
756
- if(data){
757
- return data[key];
758
- } else if(hasNative && mediaSup[key].prop._supget) {
759
- return mediaSup[key].prop._supget.apply(this);
760
- } else {
761
- return playerStateObj[key];
762
- }
763
- },
764
- writeable: false
765
- };
766
- };
767
- var createGetSetProp = function(key, setFn){
768
- createGetProp(key);
769
- delete descs[key].writeable;
770
- descs[key].set = setFn;
771
- };
772
-
773
- createGetSetProp('volume', function(v){
774
- var data = getSwfDataFromElem(this);
775
- if(data){
776
- v *= 100;
777
- if(!isNaN(v)){
778
- var muted = data.muted;
779
- if(v < 0 || v > 100){
780
- webshims.error('volume greater or less than allowed '+ (v / 100));
781
- }
782
-
783
- queueSwfMethod(this, SENDEVENT, ['VOLUME', v], data);
784
- if(muted){
785
- try {
786
- data.jwapi.sendEvent('mute', 'true');
787
- } catch(er){}
788
- }
789
- v /= 100;
790
- if(data.volume == v || data.isActive != 'third'){return;}
791
- data.volume = v;
792
- trigger(data._elem, 'volumechange');
793
- data = null;
794
- }
795
- } else if(mediaSup.volume.prop._supset) {
796
- return mediaSup.volume.prop._supset.apply(this, arguments);
797
- }
798
- });
799
-
800
- createGetSetProp('muted', function(m){
801
- var data = getSwfDataFromElem(this);
802
- if(data){
803
- m = !!m;
804
- queueSwfMethod(this, SENDEVENT, ['mute', ''+m], data);
805
- if(data.muted == m || data.isActive != 'third'){return;}
806
- data.muted = m;
807
- trigger(data._elem, 'volumechange');
808
- data = null;
809
- } else if(mediaSup.muted.prop._supset) {
810
- return mediaSup.muted.prop._supset.apply(this, arguments);
811
- }
812
- });
813
-
814
-
815
- createGetSetProp('currentTime', function(t){
816
- var data = getSwfDataFromElem(this);
817
- if(data){
818
- t *= 1;
819
- if (!isNaN(t)) {
820
- if(data.paused){
821
- clearTimeout(data.stopPlayPause);
822
- data.stopPlayPause = setTimeout(function(){
823
- data.paused = true;
824
- data.stopPlayPause = false;
825
- }, 50);
826
- }
827
- queueSwfMethod(this, SENDEVENT, ['SEEK', '' + t], data);
828
-
829
- if(data.paused){
830
- if(data.readyState > 0){
831
- data.currentTime = t;
832
- trigger(data._elem, 'timeupdate');
833
- }
834
- try {
835
- data.jwapi[SENDEVENT]('play', 'false');
836
- } catch(er){}
837
-
838
- }
839
- }
840
-
841
- } else if(mediaSup.currentTime.prop._supset) {
842
- return mediaSup.currentTime.prop._supset.apply(this, arguments);
843
- }
844
- });
845
-
846
- ['play', 'pause'].forEach(function(fn){
847
- descs[fn] = {
848
- value: function(){
849
- var data = getSwfDataFromElem(this);
850
- if(data){
851
- if(data.stopPlayPause){
852
- clearTimeout(data.stopPlayPause);
853
- }
854
- queueSwfMethod(this, SENDEVENT, ['play', fn == 'play'], data);
855
- setTimeout(function(){
856
- if(data.isActive == 'third'){
857
- data._ppFlag = true;
858
- if(data.paused != (fn != 'play')){
859
- data.paused = fn != 'play';
860
- trigger(data._elem, fn);
861
- }
862
- }
863
- }, 1);
864
- } else if(mediaSup[fn].prop._supvalue) {
865
- return mediaSup[fn].prop._supvalue.apply(this, arguments);
866
- }
867
- }
868
- };
869
- });
870
-
871
- getPropKeys.forEach(createGetProp);
872
-
873
- webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
874
- var data = getSwfDataFromElem(this);
875
- $(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
876
-
877
- if(data){
878
- try {
879
- queueSwfMethod(this, boolProp ? 'showControls' : 'hideControls', [nodeName], data);
880
- } catch(er){
881
- webshims.warn("you need to generate a crossdomain.xml");
882
- }
883
- if(nodeName == 'audio'){
884
- setElementDimension(data, boolProp);
885
- }
886
- $(data.jwapi).attr('tabindex', boolProp ? '0' : '-1');
887
- }
888
- });
889
-
890
- mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop');
891
- });
892
-
893
- if(hasFlash && $.cleanData){
894
- var oldClean = $.cleanData;
895
- var flashNames = {
896
- object: 1,
897
- OBJECT: 1
898
- };
899
- $.cleanData = function(elems){
900
- var i, len, prop;
901
- if(elems && (len = elems.length) && loadedSwf){
902
-
903
- for(i = 0; i < len; i++){
904
- if(flashNames[elems[i].nodeName]){
905
- if(SENDEVENT in elems[i]){
906
- loadedSwf--;
907
- try {
908
- elems[i][SENDEVENT]('play', false);
909
- } catch(er){}
910
- }
911
- try {
912
- for (prop in elems[i]) {
913
- if (typeof elems[i][prop] == "function") {
914
- elems[i][prop] = null;
915
- }
916
- }
917
- } catch(er){}
918
- }
919
- }
920
-
921
- }
922
- return oldClean.apply(this, arguments);
923
- };
924
- }
925
-
926
- if(!hasNative){
927
-
928
- ['poster', 'src'].forEach(function(prop){
929
- webshims.defineNodeNamesProperty(prop == 'src' ? ['audio', 'video', 'source'] : ['video'], prop, {
930
- //attr: {},
931
- reflect: true,
932
- propType: 'src'
933
- });
934
- });
935
-
936
-
937
- ['autoplay', 'controls'].forEach(function(name){
938
- webshims.defineNodeNamesBooleanProperty(['audio', 'video'], name);
939
- });
940
-
941
- webshims.defineNodeNamesProperties(['audio', 'video'], {
942
- HAVE_CURRENT_DATA: {
943
- value: 2
944
- },
945
- HAVE_ENOUGH_DATA: {
946
- value: 4
947
- },
948
- HAVE_FUTURE_DATA: {
949
- value: 3
950
- },
951
- HAVE_METADATA: {
952
- value: 1
953
- },
954
- HAVE_NOTHING: {
955
- value: 0
956
- },
957
- NETWORK_EMPTY: {
958
- value: 0
959
- },
960
- NETWORK_IDLE: {
961
- value: 1
962
- },
963
- NETWORK_LOADING: {
964
- value: 2
965
- },
966
- NETWORK_NO_SOURCE: {
967
- value: 3
968
- }
969
-
970
- }, 'prop');
971
- }
972
- });