webshims-rails 0.4.4 → 0.4.5

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