webshims-rails 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +261 -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 -1
  6. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +24 -24
  7. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/README +82 -82
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +35 -34
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +79 -82
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +45 -44
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +43 -42
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +28 -27
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +4 -4
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +57 -59
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +64 -66
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +53 -54
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +64 -66
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +72 -73
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +42 -46
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +52 -50
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +55 -59
  22. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +66 -64
  23. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +80 -82
  24. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +60 -59
  25. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +79 -81
  26. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +101 -104
  27. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +94 -95
  28. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +26 -29
  29. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +33 -36
  30. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +51 -54
  31. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +27 -28
  32. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +27 -28
  33. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +39 -38
  34. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +65 -68
  35. data/vendor/assets/javascripts/webshims/minified/shims/details.js +4 -4
  36. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +23 -22
  37. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +19 -22
  38. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +14 -14
  39. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +9 -9
  40. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +18 -19
  41. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +45 -43
  42. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +33 -33
  43. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +34 -34
  44. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +12 -12
  45. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +23 -0
  46. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-native-fix.js +1 -1
  47. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +26 -30
  48. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +3 -3
  49. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +689 -686
  50. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  51. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -9
  52. data/vendor/assets/javascripts/webshims/minified/shims/track.js +21 -21
  53. data/vendor/assets/javascripts/webshims/polyfiller.js +1191 -1175
  54. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1754 -1714
  55. data/vendor/assets/javascripts/webshims/shims/combos/10.js +3247 -3320
  56. data/vendor/assets/javascripts/webshims/shims/combos/11.js +1633 -1588
  57. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1636 -1591
  58. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1100 -1058
  59. data/vendor/assets/javascripts/webshims/shims/combos/14.js +476 -476
  60. data/vendor/assets/javascripts/webshims/shims/combos/15.js +316 -314
  61. data/vendor/assets/javascripts/webshims/shims/combos/16.js +2094 -2104
  62. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2258 -2267
  63. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1380 -1364
  64. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2239 -2247
  65. data/vendor/assets/javascripts/webshims/shims/combos/2.js +2339 -2294
  66. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1493 -1606
  67. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1733 -1635
  68. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2295 -2408
  69. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2269 -2168
  70. data/vendor/assets/javascripts/webshims/shims/combos/24.js +2775 -2780
  71. data/vendor/assets/javascripts/webshims/shims/combos/25.js +1505 -1456
  72. data/vendor/assets/javascripts/webshims/shims/combos/26.js +2111 -2115
  73. data/vendor/assets/javascripts/webshims/shims/combos/27.js +3264 -3331
  74. data/vendor/assets/javascripts/webshims/shims/combos/3.js +3020 -2970
  75. data/vendor/assets/javascripts/webshims/shims/combos/4.js +770 -822
  76. data/vendor/assets/javascripts/webshims/shims/combos/5.js +1025 -1077
  77. data/vendor/assets/javascripts/webshims/shims/combos/59.js +1706 -1753
  78. data/vendor/assets/javascripts/webshims/shims/combos/6.js +444 -433
  79. data/vendor/assets/javascripts/webshims/shims/combos/7.js +699 -688
  80. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1488 -1445
  81. data/vendor/assets/javascripts/webshims/shims/combos/9.js +2445 -2518
  82. data/vendor/assets/javascripts/webshims/shims/details.js +148 -146
  83. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +952 -912
  84. data/vendor/assets/javascripts/webshims/shims/es5.js +802 -802
  85. data/vendor/assets/javascripts/webshims/shims/excanvas.js +924 -924
  86. data/vendor/assets/javascripts/webshims/shims/form-core.js +606 -659
  87. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +681 -676
  88. data/vendor/assets/javascripts/webshims/shims/form-message.js +164 -163
  89. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +255 -255
  90. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +383 -383
  91. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +61 -50
  92. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1569 -1472
  93. data/vendor/assets/javascripts/webshims/shims/geolocation.js +168 -168
  94. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ar.js +32 -32
  95. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ch-ZN.js +32 -32
  96. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-de.txt +33 -33
  97. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-el.js +32 -32
  98. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-en.txt +34 -34
  99. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-es.js +31 -31
  100. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-fr.js +32 -32
  101. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-he.js +32 -32
  102. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hi.js +32 -32
  103. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hu.js +32 -32
  104. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-it.js +32 -32
  105. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ja.js +32 -32
  106. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-nl.js +32 -32
  107. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-pt-PT.js +32 -32
  108. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ru.js +31 -31
  109. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-sv.js +32 -32
  110. data/vendor/assets/javascripts/webshims/shims/json-storage.js +308 -308
  111. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +536 -533
  112. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +861 -0
  113. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +98 -98
  114. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +957 -1073
  115. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +543 -543
  116. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +689 -686
  117. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  118. data/vendor/assets/javascripts/webshims/shims/track-ui.js +9 -8
  119. data/vendor/assets/javascripts/webshims/shims/track.js +17 -11
  120. metadata +6 -6
  121. data/vendor/assets/javascripts/webshims/minified/shims/form-native-fix.js +0 -7
  122. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/README +0 -62
  123. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +0 -82
  124. data/vendor/assets/javascripts/webshims/shims/form-native-fix.js +0 -261
@@ -0,0 +1,861 @@
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
+
861
+ });