webshims-rails 1.14.5 → 1.14.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -0
- data/lib/webshims-rails/version.rb +2 -2
- data/readme.textile +7 -0
- data/vendor/assets/javascripts/webshims/polyfiller.js +38 -6
- data/vendor/assets/javascripts/webshims/shims/combos/1.js +26 -20
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +54 -19
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +32 -15
- data/vendor/assets/javascripts/webshims/shims/combos/12.js +45 -21
- data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -21
- data/vendor/assets/javascripts/webshims/shims/combos/15.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/combos/16.js +48 -24
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +32 -15
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +18 -81
- data/vendor/assets/javascripts/webshims/shims/combos/2.js +48 -24
- data/vendor/assets/javascripts/webshims/shims/combos/21.js +286 -179
- data/vendor/assets/javascripts/webshims/shims/combos/22.js +19 -1
- data/vendor/assets/javascripts/webshims/shims/combos/23.js +26 -20
- data/vendor/assets/javascripts/webshims/shims/combos/25.js +311 -199
- data/vendor/assets/javascripts/webshims/shims/combos/26.js +22 -17
- data/vendor/assets/javascripts/webshims/shims/combos/27.js +22 -17
- data/vendor/assets/javascripts/webshims/shims/combos/3.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/combos/30.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/combos/31.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/combos/34.js +41 -5
- data/vendor/assets/javascripts/webshims/shims/combos/4.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/combos/5.js +32 -15
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +32 -15
- data/vendor/assets/javascripts/webshims/shims/combos/7.js +48 -24
- data/vendor/assets/javascripts/webshims/shims/combos/8.js +48 -24
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +54 -19
- data/vendor/assets/javascripts/webshims/shims/combos/98.js +24 -7
- data/vendor/assets/javascripts/webshims/shims/combos/99.js +24 -7
- data/vendor/assets/javascripts/webshims/shims/dom-extend.js +22 -4
- data/vendor/assets/javascripts/webshims/shims/es5.js +3 -1
- data/vendor/assets/javascripts/webshims/shims/es6.js +1 -5
- data/vendor/assets/javascripts/webshims/shims/filereader.js +22 -17
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +32 -15
- data/vendor/assets/javascripts/webshims/shims/forms-picker.js +18 -8
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fa.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/jme/controls.css +11 -0
- data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +16 -0
- data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +3 -20
- data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +24 -7
- data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +26 -20
- data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +9 -1
- data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +267 -178
- data/vendor/assets/javascripts/webshims/shims/picture.js +18 -81
- data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +1 -9
- data/vendor/assets/javascripts/webshims/shims/sizzle.js +1 -8
- data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +4 -0
- data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +5 -0
- data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +4 -0
- data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
- data/vendor/assets/javascripts/webshims/shims/track.js +19 -1
- data/vendor/assets/javascripts/webshims/shims/url.js +316 -0
- data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +28 -0
- data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +179 -0
- metadata +5 -3
- data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +0 -511
@@ -29,6 +29,8 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
|
29
29
|
;
|
30
30
|
return '<div><ul role="presentation">' + items.join('') +'</ul></div>';
|
31
31
|
};
|
32
|
+
var domPrefixes = webshims.domPrefixes;
|
33
|
+
var prefixed = webshims.prefixed;
|
32
34
|
|
33
35
|
|
34
36
|
if(!$.fn.wsTouchClick){
|
@@ -976,26 +978,7 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
|
976
978
|
return chapterList;
|
977
979
|
}
|
978
980
|
|
979
|
-
var domPrefixes = ["webkit", "moz", "o", "ms"];
|
980
981
|
|
981
|
-
function prefixed(prop, obj){
|
982
|
-
var i, testProp;
|
983
|
-
var ret = false;
|
984
|
-
if(obj[prop]){
|
985
|
-
ret = prop;
|
986
|
-
}
|
987
|
-
if(!ret){
|
988
|
-
prop = prop.charAt(0).toUpperCase() + prop.slice(1);
|
989
|
-
for(i = 0; i < domPrefixes.length; i++){
|
990
|
-
testProp = domPrefixes[i]+prop;
|
991
|
-
if(testProp in obj){
|
992
|
-
ret = testProp;
|
993
|
-
break;
|
994
|
-
}
|
995
|
-
}
|
996
|
-
}
|
997
|
-
return ret;
|
998
|
-
}
|
999
982
|
|
1000
983
|
$.jme.defineMethod('getChapterTree', getChapterTree);
|
1001
984
|
|
@@ -1050,7 +1033,7 @@ webshims.register('mediacontrols-lazy', function($, webshims, window, doc, undef
|
|
1050
1033
|
data = $.jme.data(this);
|
1051
1034
|
sec = $.prop(data.media, 'duration');
|
1052
1035
|
}
|
1053
|
-
if(!sec){
|
1036
|
+
if(!sec || !isFinite(sec)){
|
1054
1037
|
sec = 0;
|
1055
1038
|
}
|
1056
1039
|
var formated = [];
|
@@ -50,7 +50,9 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
50
50
|
return cache[template] || '';
|
51
51
|
};
|
52
52
|
})();
|
53
|
-
var
|
53
|
+
var ios = /iP(hone|od|ad)/i.test(navigator.platform);
|
54
|
+
var ios6 = ios && parseInt(((navigator.appVersion).match(/OS (\d+)_\d+/) || ['','8'])[1], 10) < 7;
|
55
|
+
var hasYtBug = (!window.Modernizr || !Modernizr.videoautoplay) && (ios || /android/i.test(navigator.userAgent));
|
54
56
|
var loadLazy = function(){
|
55
57
|
if(!loadLazy.loaded){
|
56
58
|
loadLazy.loaded = true;
|
@@ -77,7 +79,8 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
77
79
|
};
|
78
80
|
|
79
81
|
webshims.loader.addModule('mediacontrols-lazy', {
|
80
|
-
src: 'jme/mediacontrols-lazy'
|
82
|
+
src: 'jme/mediacontrols-lazy',
|
83
|
+
d: ['dom-support']
|
81
84
|
});
|
82
85
|
|
83
86
|
var userActivity = {
|
@@ -100,6 +103,11 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
100
103
|
data.media.removeAttr('controls');
|
101
104
|
data.media.mediaLoad();
|
102
105
|
}
|
106
|
+
|
107
|
+
if(hasYtBug){
|
108
|
+
data.player.addClass('has-yt-bug');
|
109
|
+
}
|
110
|
+
|
103
111
|
data.media.prop('controls', false);
|
104
112
|
structure = getBarHtml();
|
105
113
|
data._controlbar = $( options.barStructure );
|
@@ -146,7 +154,7 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
146
154
|
})();
|
147
155
|
var $poster = $('<div class="ws-poster" />').insertAfter(data.media);
|
148
156
|
var posterState = (function(){
|
149
|
-
var lastPosterState, lastYoutubeState, lastPoster;
|
157
|
+
var lastPosterState, lastYoutubeState, lastPoster, isYt;
|
150
158
|
var hasFlash = window.swfmini && swfmini.hasFlashPlayerVersion('10.0.3');
|
151
159
|
var regYt = /youtube\.com\/[watch\?|v\/]+/i;
|
152
160
|
|
@@ -162,8 +170,10 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
162
170
|
data.player.addClass('no-backgroundsize');
|
163
171
|
}
|
164
172
|
data.media.on('play playing waiting seeked seeking', function(e){
|
165
|
-
|
166
|
-
|
173
|
+
if(!e){
|
174
|
+
e.type = 'playing';
|
175
|
+
}
|
176
|
+
if(isInitial && (!isYt || !hasYtBug || e.type == 'playing' || data.media.prop('readyState') > 1)){
|
167
177
|
isInitial = false;
|
168
178
|
data.player.removeClass('initial-state');
|
169
179
|
}
|
@@ -179,12 +189,16 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
179
189
|
data.player.addClass('ended-state');
|
180
190
|
}
|
181
191
|
});
|
192
|
+
|
182
193
|
return function(){
|
194
|
+
var hasYt;
|
183
195
|
var poster = data.media.attr('poster');
|
184
196
|
var hasPoster = !!poster;
|
185
197
|
var currentSrc = data.media.prop('currentSrc') || '';
|
186
|
-
|
187
|
-
|
198
|
+
|
199
|
+
isYt = regYt.test(currentSrc);
|
200
|
+
|
201
|
+
hasYt = (hasFlash && hasPoster) ? false : isYt;
|
188
202
|
|
189
203
|
if(!hasPoster && isYt){
|
190
204
|
poster = currentSrc.match(/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i) || '';
|
@@ -214,6 +228,9 @@ webshims.register('mediacontrols', function($, webshims, window){
|
|
214
228
|
data.player.removeClass('ended-state');
|
215
229
|
}
|
216
230
|
|
231
|
+
//https://code.google.com/p/gdata-issues/issues/detail?id=5415
|
232
|
+
data.player[isYt ? 'addClass' : 'removeClass']('yt-video');
|
233
|
+
|
217
234
|
if(lastYoutubeState !== hasYt){
|
218
235
|
lastYoutubeState = hasYt;
|
219
236
|
data.player[hasYt ? 'addClass' : 'removeClass']('has-ytposter');
|
@@ -59,7 +59,7 @@
|
|
59
59
|
}
|
60
60
|
|
61
61
|
webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
|
62
|
-
var hasSwf = swfmini.hasFlashPlayerVersion('
|
62
|
+
var hasSwf = swfmini.hasFlashPlayerVersion('11.3');
|
63
63
|
var mediaelement = webshims.mediaelement;
|
64
64
|
|
65
65
|
mediaelement.parseRtmp = function(data){
|
@@ -169,6 +169,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
169
169
|
loadYt();
|
170
170
|
}
|
171
171
|
};
|
172
|
+
|
172
173
|
|
173
174
|
webshims.addPolyfill('mediaelement-yt', {
|
174
175
|
test: !hasYt,
|
@@ -213,7 +214,16 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
213
214
|
if(src.indexOf('youtube.com/watch?') != -1 || src.indexOf('youtube.com/v/') != -1){
|
214
215
|
return 'video/youtube';
|
215
216
|
}
|
216
|
-
|
217
|
+
|
218
|
+
if(!src.indexOf('mediastream:') || !src.indexOf('blob:http')){
|
219
|
+
return 'usermedia';
|
220
|
+
}
|
221
|
+
|
222
|
+
if(!src.indexOf('webshimstream')){
|
223
|
+
return 'jarisplayer/stream';
|
224
|
+
}
|
225
|
+
|
226
|
+
if(!src.indexOf('rtmp')){
|
217
227
|
return nodeName+'/rtmp';
|
218
228
|
}
|
219
229
|
src = src.split('?')[0].split('#')[0].split('.');
|
@@ -230,28 +240,24 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
230
240
|
};
|
231
241
|
|
232
242
|
|
233
|
-
mediaelement.srces = function(mediaElem
|
243
|
+
mediaelement.srces = function(mediaElem){
|
244
|
+
var srces = [];
|
234
245
|
mediaElem = $(mediaElem);
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
if(src.src){srces.push(src);}
|
244
|
-
});
|
245
|
-
} else {
|
246
|
-
srces.push(src);
|
247
|
-
}
|
248
|
-
return srces;
|
246
|
+
var nodeName = mediaElem[0].nodeName.toLowerCase();
|
247
|
+
var src = getSrcObj(mediaElem, nodeName);
|
248
|
+
|
249
|
+
if(!src.src){
|
250
|
+
$('source', mediaElem).each(function(){
|
251
|
+
src = getSrcObj(this, nodeName);
|
252
|
+
if(src.src){srces.push(src);}
|
253
|
+
});
|
249
254
|
} else {
|
250
|
-
|
255
|
+
srces.push(src);
|
251
256
|
}
|
257
|
+
return srces;
|
252
258
|
};
|
253
259
|
|
254
|
-
mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
|
260
|
+
mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'jarisplayer/stream', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
|
255
261
|
|
256
262
|
mediaelement.canThirdPlaySrces = function(mediaElem, srces){
|
257
263
|
var ret = '';
|
@@ -281,7 +287,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
|
|
281
287
|
srces = srces || mediaelement.srces(mediaElem);
|
282
288
|
|
283
289
|
$.each(srces, function(i, src){
|
284
|
-
if(src.type && nativeCanPlay.call(mediaElem[0], src.type) ){
|
290
|
+
if(src.type == 'usermedia' || (src.type && nativeCanPlay.call(mediaElem[0], src.type)) ){
|
285
291
|
ret = src;
|
286
292
|
return false;
|
287
293
|
}
|
@@ -472,7 +472,8 @@
|
|
472
472
|
.attr({
|
473
473
|
src: src.src,
|
474
474
|
'data-type': container,
|
475
|
-
'controls': 'controls'
|
475
|
+
'controls': 'controls',
|
476
|
+
preload: 'none'
|
476
477
|
})
|
477
478
|
;
|
478
479
|
var resolvePromise = function(){
|
@@ -517,6 +518,8 @@
|
|
517
518
|
duration: $media.prop('duration'),
|
518
519
|
height: $media.prop('videoHeight'),
|
519
520
|
width: $media.prop('videoWidth')
|
521
|
+
//todo at test for seekable
|
522
|
+
//,seekable: ($media.prop('seekable') || []).length
|
520
523
|
};
|
521
524
|
}
|
522
525
|
src.decode[provider].success = true;
|
@@ -554,6 +557,11 @@
|
|
554
557
|
.on('mediaerror loadedmetadata', resolve)
|
555
558
|
.appendTo($element)
|
556
559
|
;
|
560
|
+
|
561
|
+
if(provider == 'native'){
|
562
|
+
$media.on('error', resolve);
|
563
|
+
}
|
564
|
+
|
557
565
|
$element.appendTo($container);
|
558
566
|
timeoutTimer = setTimeout(resolve, 40000);
|
559
567
|
playTimer = setTimeout(function(){
|
@@ -1,11 +1,11 @@
|
|
1
1
|
webshims.register('mediaelement-jaris', function($, webshims, window, document, undefined, options){
|
2
2
|
"use strict";
|
3
|
-
|
3
|
+
|
4
4
|
var mediaelement = webshims.mediaelement;
|
5
5
|
var swfmini = window.swfmini;
|
6
6
|
var support = webshims.support;
|
7
7
|
var hasNative = support.mediaelement;
|
8
|
-
var hasFlash = swfmini.hasFlashPlayerVersion('
|
8
|
+
var hasFlash = swfmini.hasFlashPlayerVersion('11.3');
|
9
9
|
var loadedSwf = 0;
|
10
10
|
var needsLoadPreload = 'ActiveXObject' in window && hasNative;
|
11
11
|
var getProps = {
|
@@ -38,18 +38,19 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
38
38
|
}
|
39
39
|
};
|
40
40
|
var getPropKeys = Object.keys(getProps);
|
41
|
-
|
41
|
+
|
42
42
|
var getSetProps = {
|
43
43
|
currentTime: 0,
|
44
44
|
volume: 1,
|
45
45
|
muted: false
|
46
46
|
};
|
47
47
|
var getSetPropKeys = Object.keys(getSetProps);
|
48
|
-
|
48
|
+
|
49
49
|
var playerStateObj = $.extend({
|
50
50
|
isActive: 'html5',
|
51
|
-
activating: 'html5',
|
51
|
+
activating: 'html5',
|
52
52
|
wasSwfReady: false,
|
53
|
+
_usermedia: null,
|
53
54
|
_bufferedEnd: 0,
|
54
55
|
_bufferedStart: 0,
|
55
56
|
currentTime: 0,
|
@@ -59,8 +60,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
59
60
|
lastDuration: 0,
|
60
61
|
_timeDif: 0.3
|
61
62
|
}, getProps, getSetProps);
|
62
|
-
|
63
|
-
|
63
|
+
|
64
|
+
|
64
65
|
var getSwfDataFromElem = function(elem){
|
65
66
|
try {
|
66
67
|
(elem.nodeName);
|
@@ -70,15 +71,15 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
70
71
|
var data = webshims.data(elem, 'mediaelement');
|
71
72
|
return (data && data.isActive == 'third') ? data : null;
|
72
73
|
};
|
73
|
-
|
74
|
+
|
74
75
|
var trigger = function(elem, evt){
|
75
76
|
evt = $.Event(evt);
|
76
77
|
evt.preventDefault();
|
77
78
|
$.event.trigger(evt, undefined, elem);
|
78
79
|
};
|
79
|
-
|
80
|
+
|
80
81
|
var playerSwfPath = options.playerPath || webshims.cfg.basePath + "swf/" + (options.playerName || 'JarisFLVPlayer.swf');
|
81
|
-
|
82
|
+
|
82
83
|
webshims.extendUNDEFProp(options.params, {
|
83
84
|
allowscriptaccess: 'always',
|
84
85
|
allowfullscreen: 'true',
|
@@ -92,7 +93,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
92
93
|
webshims.extendUNDEFProp(options.attrs, {
|
93
94
|
bgcolor: '#000000'
|
94
95
|
});
|
95
|
-
|
96
|
+
options.playerPath = playerSwfPath;
|
97
|
+
|
96
98
|
var setReadyState = function(readyState, data){
|
97
99
|
if(readyState < 3){
|
98
100
|
clearTimeout(data._canplaythroughTimer);
|
@@ -120,8 +122,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
120
122
|
$(data._elem).triggerHandler('seeked');
|
121
123
|
}
|
122
124
|
};
|
123
|
-
|
124
|
-
|
125
|
+
|
126
|
+
|
125
127
|
mediaelement.jarisEvent = {};
|
126
128
|
var localConnectionTimer;
|
127
129
|
var onEvent = {
|
@@ -136,7 +138,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
136
138
|
playing = override;
|
137
139
|
}
|
138
140
|
if(playing == idled || playing == null){
|
139
|
-
|
141
|
+
|
140
142
|
data.paused = !playing;
|
141
143
|
type = data.paused ? 'pause' : 'play';
|
142
144
|
data._ppFlag = true;
|
@@ -151,7 +153,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
151
153
|
},
|
152
154
|
onSeek: function(jaris, data){
|
153
155
|
data._lastSeektime = jaris.seekTime;
|
154
|
-
|
156
|
+
|
155
157
|
data.seeking = true;
|
156
158
|
$(data._elem).triggerHandler('seeking');
|
157
159
|
clearTimeout(data._seekedTimer);
|
@@ -167,19 +169,19 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
167
169
|
setReadyState(3, data);
|
168
170
|
},
|
169
171
|
onDataInitialized: function(jaris, data){
|
170
|
-
|
172
|
+
|
171
173
|
var oldDur = data.duration;
|
172
174
|
var durDelta;
|
173
175
|
data.duration = jaris.duration;
|
174
176
|
if(oldDur == data.duration || isNaN(data.duration)){return;}
|
175
|
-
|
177
|
+
|
176
178
|
if(data._calledMeta && ((durDelta = Math.abs(data.lastDuration - data.duration)) < 2)){return;}
|
177
|
-
|
178
|
-
|
179
|
-
|
179
|
+
|
180
|
+
|
181
|
+
|
180
182
|
data.videoHeight = jaris.height;
|
181
183
|
data.videoWidth = jaris.width;
|
182
|
-
|
184
|
+
|
183
185
|
if(!data.networkState){
|
184
186
|
data.networkState = 2;
|
185
187
|
}
|
@@ -235,7 +237,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
235
237
|
data.lastCalledTime = data.currentTime;
|
236
238
|
$.event.trigger('timeupdate', undefined, data._elem, true);
|
237
239
|
}
|
238
|
-
|
240
|
+
|
239
241
|
},
|
240
242
|
onProgress: function(jaris, data){
|
241
243
|
if(data.ended){
|
@@ -245,7 +247,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
245
247
|
return;
|
246
248
|
}
|
247
249
|
var percentage = jaris.loaded / jaris.total;
|
248
|
-
|
250
|
+
|
249
251
|
if(percentage > 0.02 && percentage < 0.2){
|
250
252
|
setReadyState(3, data);
|
251
253
|
} else if(percentage > 0.2){
|
@@ -258,10 +260,10 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
258
260
|
if(data._bufferedEnd && (data._bufferedEnd > percentage)){
|
259
261
|
data._bufferedStart = data.currentTime || 0;
|
260
262
|
}
|
261
|
-
|
263
|
+
|
262
264
|
data._bufferedEnd = percentage;
|
263
265
|
data.buffered.length = 1;
|
264
|
-
|
266
|
+
|
265
267
|
$.event.trigger('progress', undefined, data._elem, true);
|
266
268
|
},
|
267
269
|
onPlaybackFinished: function(jaris, data){
|
@@ -281,7 +283,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
281
283
|
ready: (function(){
|
282
284
|
var testAPI = function(data){
|
283
285
|
var passed = true;
|
284
|
-
|
286
|
+
|
285
287
|
try {
|
286
288
|
data.api.api_get('volume');
|
287
289
|
} catch(er){
|
@@ -289,17 +291,17 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
289
291
|
}
|
290
292
|
return passed;
|
291
293
|
};
|
292
|
-
|
294
|
+
|
293
295
|
return function(jaris, data){
|
294
296
|
var i = 0;
|
295
|
-
|
297
|
+
|
296
298
|
var doneFn = function(){
|
297
299
|
if(i > 9){
|
298
300
|
data.tryedReframeing = 0;
|
299
301
|
return;
|
300
302
|
}
|
301
303
|
i++;
|
302
|
-
|
304
|
+
|
303
305
|
data.tryedReframeing++;
|
304
306
|
if(testAPI(data)){
|
305
307
|
data.wasSwfReady = true;
|
@@ -329,25 +331,25 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
329
331
|
clearTimeout(localConnectionTimer);
|
330
332
|
clearTimeout(data.reframeTimer);
|
331
333
|
data.shadowElem.removeClass('flashblocker-assumed');
|
332
|
-
|
334
|
+
|
333
335
|
if(!i){
|
334
336
|
doneFn();
|
335
337
|
} else {
|
336
338
|
data.reframeTimer = setTimeout(doneFn, 9);
|
337
339
|
}
|
338
|
-
|
340
|
+
|
339
341
|
};
|
340
342
|
})()
|
341
343
|
};
|
342
|
-
|
344
|
+
|
343
345
|
onEvent.onMute = onEvent.onVolumeChange;
|
344
|
-
|
345
|
-
|
346
|
+
mediaelement.onEvent = onEvent;
|
347
|
+
|
346
348
|
var workActionQueue = function(data){
|
347
349
|
var actionLen = data.actionQueue.length;
|
348
350
|
var i = 0;
|
349
351
|
var operation;
|
350
|
-
|
352
|
+
|
351
353
|
if(actionLen && data.isActive == 'third'){
|
352
354
|
while(data.actionQueue.length && actionLen > i){
|
353
355
|
i++;
|
@@ -368,7 +370,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
368
370
|
if( (data._ppFlag === undefined && ($.prop(data._elem, 'autoplay')) || !data.paused)){
|
369
371
|
setTimeout(function(){
|
370
372
|
if(data.isActive == 'third' && (data._ppFlag === undefined || !data.paused)){
|
371
|
-
|
373
|
+
|
372
374
|
try {
|
373
375
|
$(data._elem).play();
|
374
376
|
data._ppFlag = true;
|
@@ -376,7 +378,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
376
378
|
}
|
377
379
|
}, 1);
|
378
380
|
}
|
379
|
-
|
381
|
+
|
380
382
|
if(data.muted){
|
381
383
|
$.prop(data._elem, 'muted', true);
|
382
384
|
}
|
@@ -384,8 +386,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
384
386
|
$.prop(data._elem, 'volume', data.volume);
|
385
387
|
}
|
386
388
|
};
|
387
|
-
|
388
|
-
|
389
|
+
|
390
|
+
|
389
391
|
var addMediaToStopEvents = $.noop;
|
390
392
|
if(hasNative){
|
391
393
|
var stopEvents = {
|
@@ -396,14 +398,14 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
396
398
|
var hidevents = hideEvtArray.map(function(evt){
|
397
399
|
return evt +'.webshimspolyfill';
|
398
400
|
}).join(' ');
|
399
|
-
|
401
|
+
|
400
402
|
var hidePlayerEvents = function(event){
|
401
403
|
var data = webshims.data(event.target, 'mediaelement');
|
402
404
|
if(!data){return;}
|
403
405
|
var isNativeHTML5 = ( event.originalEvent && event.originalEvent.type === event.type );
|
404
406
|
if( isNativeHTML5 == (data.activating == 'third') ){
|
405
407
|
event.stopImmediatePropagation();
|
406
|
-
|
408
|
+
|
407
409
|
if(stopEvents[event.type]){
|
408
410
|
if(data.isActive != data.activating){
|
409
411
|
$(event.target).pause();
|
@@ -413,7 +415,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
413
415
|
}
|
414
416
|
}
|
415
417
|
};
|
416
|
-
|
418
|
+
|
417
419
|
addMediaToStopEvents = function(elem){
|
418
420
|
$(elem)
|
419
421
|
.off(hidevents)
|
@@ -425,8 +427,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
425
427
|
};
|
426
428
|
addMediaToStopEvents(document);
|
427
429
|
}
|
428
|
-
|
429
|
-
|
430
|
+
|
431
|
+
|
430
432
|
mediaelement.setActive = function(elem, type, data){
|
431
433
|
if(!data){
|
432
434
|
data = webshims.data(elem, 'mediaelement');
|
@@ -448,14 +450,14 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
448
450
|
}
|
449
451
|
$(elem).trigger('mediaelementapichange');
|
450
452
|
};
|
451
|
-
|
452
|
-
|
453
|
-
|
453
|
+
|
454
|
+
|
455
|
+
|
454
456
|
var resetSwfProps = (function(){
|
455
|
-
var resetProtoProps = ['_calledMeta', 'lastDuration', '_bufferedEnd', 'lastCalledTime', '_bufferedStart', '_ppFlag', 'currentSrc', 'currentTime', 'duration', 'ended', 'networkState', 'paused', 'seeking', 'videoHeight', 'videoWidth'];
|
457
|
+
var resetProtoProps = ['_calledMeta', 'lastDuration', '_bufferedEnd', 'lastCalledTime', '_usermedia', '_bufferedStart', '_ppFlag', 'currentSrc', 'currentTime', 'duration', 'ended', 'networkState', 'paused', 'seeking', 'videoHeight', 'videoWidth'];
|
456
458
|
var len = resetProtoProps.length;
|
457
459
|
return function(data){
|
458
|
-
|
460
|
+
|
459
461
|
if(!data){return;}
|
460
462
|
clearTimeout(data._seekedTimer);
|
461
463
|
var lenI = len;
|
@@ -472,8 +474,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
472
474
|
}
|
473
475
|
};
|
474
476
|
})();
|
475
|
-
|
476
|
-
|
477
|
+
|
478
|
+
|
477
479
|
var getComputedDimension = (function(){
|
478
480
|
var dimCache = {};
|
479
481
|
var getVideoDims = function(data){
|
@@ -495,7 +497,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
495
497
|
width: this.width,
|
496
498
|
height: this.height
|
497
499
|
};
|
498
|
-
|
500
|
+
|
499
501
|
if(dimCache[poster].height && dimCache[poster].width){
|
500
502
|
setElementDimension(data, $.prop(data._elem, 'controls'));
|
501
503
|
} else {
|
@@ -511,12 +513,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
511
513
|
}
|
512
514
|
return ret || {width: 300, height: data._elemNodeName == 'video' ? 150 : 50};
|
513
515
|
};
|
514
|
-
|
516
|
+
|
515
517
|
var getCssStyle = function(elem, style){
|
516
518
|
return elem.style[style] || (elem.currentStyle && elem.currentStyle[style]) || (window.getComputedStyle && (window.getComputedStyle( elem, null ) || {} )[style]) || '';
|
517
519
|
};
|
518
520
|
var minMaxProps = ['minWidth', 'maxWidth', 'minHeight', 'maxHeight'];
|
519
|
-
|
521
|
+
|
520
522
|
var addMinMax = function(elem, ret){
|
521
523
|
var i, prop;
|
522
524
|
var hasMinMax = false;
|
@@ -530,7 +532,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
530
532
|
return hasMinMax;
|
531
533
|
};
|
532
534
|
var retFn = function(data){
|
533
|
-
var videoDims, ratio
|
535
|
+
var videoDims, ratio;
|
534
536
|
var elem = data._elem;
|
535
537
|
var autos = {
|
536
538
|
width: getCssStyle(elem, 'width') == 'auto',
|
@@ -540,11 +542,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
540
542
|
width: !autos.width && $(elem).width(),
|
541
543
|
height: !autos.height && $(elem).height()
|
542
544
|
};
|
543
|
-
|
545
|
+
|
544
546
|
if(autos.width || autos.height){
|
545
547
|
videoDims = getVideoDims(data);
|
546
548
|
ratio = videoDims.width / videoDims.height;
|
547
|
-
|
549
|
+
|
548
550
|
if(autos.width && autos.height){
|
549
551
|
ret.width = videoDims.width;
|
550
552
|
ret.height = videoDims.height;
|
@@ -553,12 +555,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
553
555
|
} else if(autos.height){
|
554
556
|
ret.height = ret.width / ratio;
|
555
557
|
}
|
556
|
-
|
558
|
+
|
557
559
|
if(addMinMax(elem, ret)){
|
558
560
|
data.shadowElem.css(ret);
|
559
561
|
if(autos.width){
|
560
562
|
ret.width = data.shadowElem.height() * ratio;
|
561
|
-
}
|
563
|
+
}
|
562
564
|
if(autos.height){
|
563
565
|
ret.height = ((autos.width) ? ret.width : data.shadowElem.width()) / ratio;
|
564
566
|
}
|
@@ -566,11 +568,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
566
568
|
data.shadowElem.css(ret);
|
567
569
|
ret.height = data.shadowElem.width() / ratio;
|
568
570
|
ret.width = ret.height * ratio;
|
569
|
-
|
571
|
+
|
570
572
|
data.shadowElem.css(ret);
|
571
573
|
ret.width = data.shadowElem.height() * ratio;
|
572
574
|
ret.height = ret.width / ratio;
|
573
|
-
|
575
|
+
|
574
576
|
}
|
575
577
|
if(!webshims.support.mediaelement){
|
576
578
|
ret.width = data.shadowElem.width();
|
@@ -580,13 +582,13 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
580
582
|
}
|
581
583
|
return ret;
|
582
584
|
};
|
583
|
-
|
585
|
+
|
584
586
|
return retFn;
|
585
587
|
})();
|
586
|
-
|
588
|
+
|
587
589
|
var setElementDimension = function(data, hasControls){
|
588
590
|
var dims;
|
589
|
-
|
591
|
+
|
590
592
|
var box = data.shadowElem;
|
591
593
|
$(data._elem)[hasControls ? 'addClass' : 'removeClass']('webshims-controls');
|
592
594
|
|
@@ -601,7 +603,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
601
603
|
}
|
602
604
|
}
|
603
605
|
};
|
604
|
-
|
606
|
+
|
605
607
|
var bufferSrc = (function(){
|
606
608
|
var preloads = {
|
607
609
|
'': 1,
|
@@ -616,17 +618,17 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
616
618
|
return !!(preloads[preload] || (preload == 'metadata' && $(elem).is('.preload-in-doubt, video:not([poster])')));
|
617
619
|
};
|
618
620
|
})();
|
619
|
-
|
621
|
+
|
620
622
|
var regs = {
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
623
|
+
A: /&/g,
|
624
|
+
a: /&/g,
|
625
|
+
e: /\=/g,
|
626
|
+
q: /\?/g
|
627
|
+
},
|
628
|
+
replaceVar = function(val){
|
629
|
+
return (val.replace) ? val.replace(regs.A, '%26').replace(regs.a, '%26').replace(regs.e, '%3D').replace(regs.q, '%3F') : val;
|
630
|
+
};
|
631
|
+
|
630
632
|
if('matchMedia' in window){
|
631
633
|
var allowMediaSorting = false;
|
632
634
|
try {
|
@@ -640,14 +642,15 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
640
642
|
} catch(er){
|
641
643
|
return 0;
|
642
644
|
}
|
643
|
-
return src1 == src2 ?
|
645
|
+
return src1 == src2 ?
|
644
646
|
0 :
|
645
647
|
src1 ? -1
|
646
|
-
|
648
|
+
: 1;
|
647
649
|
};
|
648
650
|
}
|
649
651
|
}
|
650
652
|
|
653
|
+
mediaelement.resetSwfProps = resetSwfProps;
|
651
654
|
mediaelement.createSWF = function( elem, canPlaySrc, data ){
|
652
655
|
if(!hasFlash){
|
653
656
|
setTimeout(function(){
|
@@ -655,7 +658,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
655
658
|
}, 1);
|
656
659
|
return;
|
657
660
|
}
|
658
|
-
|
661
|
+
|
659
662
|
var attrStyle = {};
|
660
663
|
|
661
664
|
if(loadedSwf < 1){
|
@@ -666,55 +669,40 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
666
669
|
if(!data){
|
667
670
|
data = webshims.data(elem, 'mediaelement');
|
668
671
|
}
|
669
|
-
|
672
|
+
|
670
673
|
if((attrStyle.height = $.attr(elem, 'height') || '') || (attrStyle.width = $.attr(elem, 'width') || '')){
|
671
674
|
$(elem).css(attrStyle);
|
672
675
|
webshims.warn("width or height content attributes used. Webshims prefers the usage of CSS (computed styles or inline styles) to detect size of a video/audio. It's really more powerfull.");
|
673
676
|
}
|
674
|
-
|
675
|
-
var
|
676
|
-
var
|
677
|
-
|
678
|
-
|
679
|
-
server: replaceVar(canPlaySrc.server || '')
|
680
|
-
});
|
681
|
-
var elemVars = $(elem).data('vars') || {};
|
682
|
-
|
683
|
-
|
684
|
-
|
677
|
+
var box;
|
678
|
+
var streamRequest = canPlaySrc.streamrequest;
|
679
|
+
var isStream = canPlaySrc.type == 'jarisplayer/stream';
|
680
|
+
|
681
|
+
|
685
682
|
var hasControls = $.prop(elem, 'controls');
|
686
683
|
var elemId = 'jarisplayer-'+ webshims.getID(elem);
|
687
|
-
|
688
|
-
|
689
|
-
{},
|
690
|
-
options.params,
|
691
|
-
$(elem).data('params')
|
692
|
-
);
|
684
|
+
|
685
|
+
|
693
686
|
var elemNodeName = elem.nodeName.toLowerCase();
|
694
|
-
|
695
|
-
{},
|
696
|
-
options.attrs,
|
697
|
-
{
|
698
|
-
name: elemId,
|
699
|
-
id: elemId
|
700
|
-
},
|
701
|
-
$(elem).data('attrs')
|
702
|
-
);
|
687
|
+
|
703
688
|
var setDimension = function(){
|
704
689
|
if(data.isActive == 'third'){
|
705
690
|
setElementDimension(data, $.prop(elem, 'controls'));
|
706
691
|
}
|
707
692
|
};
|
708
|
-
|
709
|
-
|
710
|
-
|
693
|
+
|
694
|
+
if(isStream && !streamRequest){
|
695
|
+
webshim.usermedia.attach(elem, canPlaySrc, data);
|
696
|
+
return;
|
697
|
+
}
|
698
|
+
|
711
699
|
if(data && data.swfCreated){
|
712
700
|
mediaelement.setActive(elem, 'third', data);
|
713
|
-
|
701
|
+
|
714
702
|
data.currentSrc = '';
|
715
|
-
|
703
|
+
|
716
704
|
data.shadowElem.html('<div id="'+ elemId +'">');
|
717
|
-
|
705
|
+
|
718
706
|
data.api = false;
|
719
707
|
data.actionQueue = [];
|
720
708
|
box = data.shadowElem;
|
@@ -743,7 +731,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
743
731
|
value: elem
|
744
732
|
},
|
745
733
|
currentSrc: {
|
746
|
-
value: canPlaySrc.srcProp
|
734
|
+
value: streamRequest ? '' : canPlaySrc.srcProp
|
747
735
|
},
|
748
736
|
swfCreated: {
|
749
737
|
value: true
|
@@ -771,26 +759,27 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
771
759
|
}
|
772
760
|
}
|
773
761
|
}));
|
774
|
-
|
775
|
-
|
776
|
-
|
762
|
+
|
763
|
+
|
764
|
+
|
777
765
|
box.insertBefore(elem);
|
778
|
-
|
766
|
+
|
779
767
|
if(hasNative){
|
780
768
|
$.extend(data, {volume: $.prop(elem, 'volume'), muted: $.prop(elem, 'muted'), paused: $.prop(elem, 'paused')});
|
781
769
|
}
|
782
|
-
|
770
|
+
|
783
771
|
webshims.addShadowDom(elem, box);
|
784
772
|
if(!webshims.data(elem, 'mediaelement')){
|
785
773
|
webshims.data(elem, 'mediaelement', data);
|
786
774
|
}
|
787
775
|
addMediaToStopEvents(elem);
|
788
|
-
|
776
|
+
|
789
777
|
mediaelement.setActive(elem, 'third', data);
|
790
|
-
|
778
|
+
|
791
779
|
setElementDimension(data, hasControls);
|
792
|
-
|
780
|
+
|
793
781
|
$(elem)
|
782
|
+
|
794
783
|
.on({
|
795
784
|
'updatemediaelementdimensions loadedmetadata emptied': setDimension,
|
796
785
|
'remove': function(e){
|
@@ -804,14 +793,13 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
804
793
|
.onWSOff('updateshadowdom', setDimension)
|
805
794
|
;
|
806
795
|
}
|
807
|
-
|
796
|
+
|
808
797
|
if(mediaelement.jarisEvent[data.id] && mediaelement.jarisEvent[data.id].elem != elem){
|
809
798
|
webshims.error('something went wrong');
|
810
799
|
return;
|
811
800
|
} else if(!mediaelement.jarisEvent[data.id]){
|
812
|
-
|
801
|
+
|
813
802
|
mediaelement.jarisEvent[data.id] = function(jaris){
|
814
|
-
|
815
803
|
if(jaris.type == 'ready'){
|
816
804
|
var onReady = function(){
|
817
805
|
if(data.api){
|
@@ -836,11 +824,11 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
836
824
|
if(!data._calledMeta && isNaN(jaris.duration) && data.duration != jaris.duration && isNaN(data.duration)){
|
837
825
|
onEvent.onDataInitialized(jaris, data);
|
838
826
|
}
|
839
|
-
|
827
|
+
|
840
828
|
if(!data._ppFlag && jaris.type != 'onPlayPause'){
|
841
829
|
onEvent.onPlayPause(jaris, data);
|
842
830
|
}
|
843
|
-
|
831
|
+
|
844
832
|
if(onEvent[jaris.type]){
|
845
833
|
onEvent[jaris.type](jaris, data);
|
846
834
|
}
|
@@ -850,29 +838,68 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
850
838
|
};
|
851
839
|
mediaelement.jarisEvent[data.id].elem = elem;
|
852
840
|
}
|
853
|
-
|
854
|
-
|
841
|
+
|
842
|
+
createSwf(elem, canPlaySrc, data, elemId, hasControls, elemNodeName);
|
843
|
+
|
844
|
+
if(!streamRequest){
|
845
|
+
trigger(data._elem, 'loadstart');
|
846
|
+
}
|
847
|
+
};
|
848
|
+
|
849
|
+
var createSwf = function(elem, canPlaySrc, data, elemId, hasControls, elemNodeName){
|
850
|
+
var vars, elemVars, params, attrs;
|
851
|
+
var isRtmp = canPlaySrc.type == 'audio/rtmp' || canPlaySrc.type == 'video/rtmp';
|
852
|
+
var isUserStream = canPlaySrc.type == 'jarisplayer/stream';
|
853
|
+
|
854
|
+
vars = $.extend({}, options.vars, {
|
855
|
+
poster: replaceVar($.attr(elem, 'poster') && $.prop(elem, 'poster') || ''),
|
856
|
+
source: replaceVar(canPlaySrc.streamId || canPlaySrc.srcProp),
|
857
|
+
server: replaceVar(canPlaySrc.server || '')
|
858
|
+
});
|
859
|
+
|
860
|
+
elemVars = $(elem).data('vars') || {};
|
861
|
+
|
862
|
+
$.extend(vars,
|
855
863
|
{
|
856
864
|
id: elemId,
|
857
865
|
evtId: data.id,
|
858
|
-
controls: ''+hasControls,
|
866
|
+
controls: ''+(!isUserStream && hasControls),
|
859
867
|
autostart: 'false',
|
860
868
|
nodename: elemNodeName
|
861
869
|
},
|
862
870
|
elemVars
|
863
871
|
);
|
864
|
-
|
872
|
+
|
865
873
|
if(isRtmp){
|
866
874
|
vars.streamtype = 'rtmp';
|
875
|
+
} else if(isUserStream){
|
876
|
+
vars.streamtype = 'usermedia';
|
867
877
|
} else if(canPlaySrc.type == 'audio/mpeg' || canPlaySrc.type == 'audio/mp3'){
|
868
878
|
vars.type = 'audio';
|
869
879
|
vars.streamtype = 'file';
|
870
880
|
} else if(canPlaySrc.type == 'video/youtube'){
|
871
881
|
vars.streamtype = 'youtube';
|
872
882
|
}
|
883
|
+
|
884
|
+
attrs = $.extend(
|
885
|
+
{},
|
886
|
+
options.attrs,
|
887
|
+
{
|
888
|
+
name: elemId,
|
889
|
+
id: elemId
|
890
|
+
},
|
891
|
+
$(elem).data('attrs')
|
892
|
+
);
|
893
|
+
|
894
|
+
params = $.extend(
|
895
|
+
{},
|
896
|
+
options.params,
|
897
|
+
$(elem).data('params')
|
898
|
+
);
|
899
|
+
|
873
900
|
options.changeSWF(vars, elem, canPlaySrc, data, 'embed');
|
874
901
|
clearTimeout(data.flashBlock);
|
875
|
-
|
902
|
+
|
876
903
|
swfmini.embedSWF(playerSwfPath, elemId, "100%", "100%", "9.0.115", false, vars, params, attrs, function(swfData){
|
877
904
|
if(swfData.success){
|
878
905
|
var fBlocker = function(){
|
@@ -884,13 +911,13 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
884
911
|
$(swfData.ref).css({'minHeight': '2px', 'minWidth': '2px', display: 'block'});
|
885
912
|
};
|
886
913
|
data.api = swfData.ref;
|
887
|
-
|
914
|
+
|
888
915
|
if(!hasControls){
|
889
916
|
$(swfData.ref).attr('tabindex', '-1').css('outline', 'none');
|
890
917
|
}
|
891
|
-
|
918
|
+
|
892
919
|
data.flashBlock = setTimeout(fBlocker, 99);
|
893
|
-
|
920
|
+
|
894
921
|
if(!localConnectionTimer){
|
895
922
|
clearTimeout(localConnectionTimer);
|
896
923
|
localConnectionTimer = setTimeout(function(){
|
@@ -904,23 +931,24 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
904
931
|
flash = null;
|
905
932
|
}, 8000);
|
906
933
|
}
|
934
|
+
if(isUserStream){
|
935
|
+
webshim.usermedia.request(elem, canPlaySrc, data);
|
936
|
+
}
|
907
937
|
}
|
908
938
|
});
|
909
|
-
|
910
|
-
trigger(data._elem, 'loadstart');
|
911
939
|
};
|
912
|
-
|
913
|
-
|
940
|
+
|
941
|
+
|
914
942
|
var queueSwfMethod = function(elem, fn, args, data){
|
915
943
|
data = data || getSwfDataFromElem(elem);
|
916
|
-
|
944
|
+
|
917
945
|
if(data){
|
918
946
|
if(data.api && data.api[fn]){
|
919
947
|
data.api[fn].apply(data.api, args || []);
|
920
948
|
} else {
|
921
949
|
//todo add to queue
|
922
950
|
data.actionQueue.push({fn: fn, args: args});
|
923
|
-
|
951
|
+
|
924
952
|
if(data.actionQueue.length > 10){
|
925
953
|
setTimeout(function(){
|
926
954
|
if(data.actionQueue.length > 5){
|
@@ -933,13 +961,14 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
933
961
|
}
|
934
962
|
return false;
|
935
963
|
};
|
936
|
-
|
964
|
+
mediaelement.queueSwfMethod = queueSwfMethod;
|
965
|
+
|
937
966
|
['audio', 'video'].forEach(function(nodeName){
|
938
967
|
var descs = {};
|
939
968
|
var mediaSup;
|
940
969
|
var createGetProp = function(key){
|
941
970
|
if(nodeName == 'audio' && (key == 'videoHeight' || key == 'videoWidth')){return;}
|
942
|
-
|
971
|
+
|
943
972
|
descs[key] = {
|
944
973
|
get: function(){
|
945
974
|
var data = getSwfDataFromElem(this);
|
@@ -959,33 +988,33 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
959
988
|
delete descs[key].writeable;
|
960
989
|
descs[key].set = setFn;
|
961
990
|
};
|
962
|
-
|
991
|
+
|
963
992
|
createGetSetProp('seeking');
|
964
|
-
|
993
|
+
|
965
994
|
createGetSetProp('volume', function(v){
|
966
995
|
var data = getSwfDataFromElem(this);
|
967
996
|
if(data){
|
968
997
|
v *= 1;
|
969
998
|
if(!isNaN(v)){
|
970
|
-
|
999
|
+
|
971
1000
|
if(v < 0 || v > 1){
|
972
1001
|
webshims.error('volume greater or less than allowed '+ (v / 100));
|
973
1002
|
}
|
974
|
-
|
1003
|
+
|
975
1004
|
queueSwfMethod(this, 'api_volume', [v], data);
|
976
|
-
|
977
|
-
|
1005
|
+
|
1006
|
+
|
978
1007
|
if(data.volume != v){
|
979
1008
|
data.volume = v;
|
980
1009
|
trigger(data._elem, 'volumechange');
|
981
1010
|
}
|
982
1011
|
data = null;
|
983
|
-
}
|
1012
|
+
}
|
984
1013
|
} else if(mediaSup.volume.prop._supset) {
|
985
1014
|
return mediaSup.volume.prop._supset.apply(this, arguments);
|
986
1015
|
}
|
987
1016
|
});
|
988
|
-
|
1017
|
+
|
989
1018
|
createGetSetProp('muted', function(m){
|
990
1019
|
var data = getSwfDataFromElem(this);
|
991
1020
|
if(data){
|
@@ -1000,8 +1029,8 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1000
1029
|
return mediaSup.muted.prop._supset.apply(this, arguments);
|
1001
1030
|
}
|
1002
1031
|
});
|
1003
|
-
|
1004
|
-
|
1032
|
+
|
1033
|
+
|
1005
1034
|
createGetSetProp('currentTime', function(t){
|
1006
1035
|
var data = getSwfDataFromElem(this);
|
1007
1036
|
if(data){
|
@@ -1009,23 +1038,23 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1009
1038
|
if (!isNaN(t)) {
|
1010
1039
|
queueSwfMethod(this, 'api_seek', [t], data);
|
1011
1040
|
}
|
1012
|
-
|
1041
|
+
|
1013
1042
|
} else if(mediaSup.currentTime.prop._supset) {
|
1014
1043
|
return mediaSup.currentTime.prop._supset.apply(this, arguments);
|
1015
1044
|
}
|
1016
1045
|
});
|
1017
|
-
|
1046
|
+
|
1018
1047
|
['play', 'pause'].forEach(function(fn){
|
1019
1048
|
descs[fn] = {
|
1020
1049
|
value: function(){
|
1021
1050
|
var data = getSwfDataFromElem(this);
|
1022
|
-
|
1051
|
+
|
1023
1052
|
if(data){
|
1024
1053
|
if(data.stopPlayPause){
|
1025
1054
|
clearTimeout(data.stopPlayPause);
|
1026
1055
|
}
|
1027
1056
|
queueSwfMethod(this, fn == 'play' ? 'api_play' : 'api_pause', [], data);
|
1028
|
-
|
1057
|
+
|
1029
1058
|
data._ppFlag = true;
|
1030
1059
|
if(data.paused != (fn != 'play')){
|
1031
1060
|
data.paused = fn != 'play';
|
@@ -1037,14 +1066,14 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1037
1066
|
}
|
1038
1067
|
};
|
1039
1068
|
});
|
1040
|
-
|
1069
|
+
|
1041
1070
|
getPropKeys.forEach(createGetProp);
|
1042
|
-
|
1071
|
+
|
1043
1072
|
webshims.onNodeNamesPropertyModify(nodeName, 'controls', function(val, boolProp){
|
1044
1073
|
var data = getSwfDataFromElem(this);
|
1045
|
-
|
1074
|
+
|
1046
1075
|
$(this)[boolProp ? 'addClass' : 'removeClass']('webshims-controls');
|
1047
|
-
|
1076
|
+
|
1048
1077
|
if(data){
|
1049
1078
|
if(nodeName == 'audio'){
|
1050
1079
|
setElementDimension(data, boolProp);
|
@@ -1052,12 +1081,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1052
1081
|
queueSwfMethod(this, 'api_controls', [boolProp], data);
|
1053
1082
|
}
|
1054
1083
|
});
|
1055
|
-
|
1056
|
-
|
1084
|
+
|
1085
|
+
|
1057
1086
|
webshims.onNodeNamesPropertyModify(nodeName, 'preload', function(val){
|
1058
1087
|
var data, baseData, elem;
|
1059
|
-
|
1060
|
-
|
1088
|
+
|
1089
|
+
|
1061
1090
|
if(bufferSrc(this)){
|
1062
1091
|
data = getSwfDataFromElem(this);
|
1063
1092
|
if(data){
|
@@ -1072,9 +1101,9 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1072
1101
|
}
|
1073
1102
|
}
|
1074
1103
|
});
|
1075
|
-
|
1104
|
+
|
1076
1105
|
mediaSup = webshims.defineNodeNameProperties(nodeName, descs, 'prop');
|
1077
|
-
|
1106
|
+
|
1078
1107
|
if(!support.mediaDefaultMuted){
|
1079
1108
|
webshims.defineNodeNameProperties(nodeName, {
|
1080
1109
|
defaultMuted: {
|
@@ -1092,8 +1121,68 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1092
1121
|
}, 'prop');
|
1093
1122
|
}
|
1094
1123
|
});
|
1095
|
-
|
1096
|
-
|
1124
|
+
|
1125
|
+
var addCanvasBridge = function(){
|
1126
|
+
if(!window.CanvasRenderingContext2D){
|
1127
|
+
return false;
|
1128
|
+
}
|
1129
|
+
var _drawImage = CanvasRenderingContext2D.prototype.drawImage;
|
1130
|
+
var slice = Array.prototype.slice;
|
1131
|
+
var isVideo = {
|
1132
|
+
video: 1,
|
1133
|
+
VIDEO: 1
|
1134
|
+
};
|
1135
|
+
var tested = {};
|
1136
|
+
|
1137
|
+
if(!_drawImage){
|
1138
|
+
webshim.error('canvas.drawImage feature is needed. In IE8 flashvanvas pro can be used');
|
1139
|
+
}
|
1140
|
+
|
1141
|
+
CanvasRenderingContext2D.prototype.drawImage = function(elem){
|
1142
|
+
var data, img, args, imgData;
|
1143
|
+
var context = this;
|
1144
|
+
|
1145
|
+
if(isVideo[elem.nodeName] && (data = webshims.data(elem, 'mediaelement')) && data.isActive == 'third' && data.api.api_image){
|
1146
|
+
|
1147
|
+
try {
|
1148
|
+
imgData = data.api.api_image();
|
1149
|
+
} catch (er){
|
1150
|
+
webshims.error(er);
|
1151
|
+
}
|
1152
|
+
if(!tested[data.currentSrc]){
|
1153
|
+
tested[data.currentSrc] = true;
|
1154
|
+
if(imgData == null){
|
1155
|
+
webshims.error('video has to be same origin or a crossdomain.xml has to be provided. Video has to be visible for flash API');
|
1156
|
+
}
|
1157
|
+
}
|
1158
|
+
|
1159
|
+
args = slice.call(arguments, 1);
|
1160
|
+
img = new Image();
|
1161
|
+
|
1162
|
+
//todo find a performant sync way
|
1163
|
+
img.onload = function(){
|
1164
|
+
args.unshift(this);
|
1165
|
+
_drawImage.apply(context, args);
|
1166
|
+
img.onload = null;
|
1167
|
+
};
|
1168
|
+
|
1169
|
+
img.src = 'data:image/jpeg;base64,'+imgData;
|
1170
|
+
|
1171
|
+
if(img.complete){
|
1172
|
+
img.onload();
|
1173
|
+
}
|
1174
|
+
return;
|
1175
|
+
}
|
1176
|
+
return _drawImage.apply(this, arguments);
|
1177
|
+
};
|
1178
|
+
return true;
|
1179
|
+
};
|
1180
|
+
|
1181
|
+
if(!addCanvasBridge()){
|
1182
|
+
webshims.ready('canvas', addCanvasBridge);
|
1183
|
+
}
|
1184
|
+
|
1185
|
+
|
1097
1186
|
if(hasFlash && $.cleanData){
|
1098
1187
|
var oldClean = $.cleanData;
|
1099
1188
|
var objElem = document.createElement('object');
|
@@ -1107,12 +1196,12 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1107
1196
|
object: 1,
|
1108
1197
|
OBJECT: 1
|
1109
1198
|
};
|
1110
|
-
|
1199
|
+
|
1111
1200
|
$.cleanData = function(elems){
|
1112
1201
|
var i, len, prop;
|
1113
1202
|
var ret = oldClean.apply(this, arguments);
|
1114
1203
|
if(elems && (len = elems.length) && loadedSwf){
|
1115
|
-
|
1204
|
+
|
1116
1205
|
for(i = 0; i < len; i++){
|
1117
1206
|
if(flashNames[elems[i].nodeName] && 'api_destroy' in elems[i]){
|
1118
1207
|
loadedSwf--;
|
@@ -1128,14 +1217,14 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1128
1217
|
} catch(er){console.log(er);}
|
1129
1218
|
}
|
1130
1219
|
}
|
1131
|
-
|
1220
|
+
|
1132
1221
|
}
|
1133
1222
|
return ret;
|
1134
1223
|
};
|
1135
1224
|
}
|
1136
1225
|
|
1137
1226
|
if(!hasNative){
|
1138
|
-
|
1227
|
+
|
1139
1228
|
['poster', 'src'].forEach(function(prop){
|
1140
1229
|
webshims.defineNodeNamesProperty(prop == 'src' ? ['audio', 'video', 'source'] : ['video'], prop, {
|
1141
1230
|
//attr: {},
|
@@ -1143,21 +1232,21 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1143
1232
|
propType: 'src'
|
1144
1233
|
});
|
1145
1234
|
});
|
1146
|
-
|
1235
|
+
|
1147
1236
|
webshims.defineNodeNamesProperty(['audio', 'video'], 'preload', {
|
1148
1237
|
reflect: true,
|
1149
1238
|
propType: 'enumarated',
|
1150
1239
|
defaultValue: '',
|
1151
1240
|
limitedTo: ['', 'auto', 'metadata', 'none']
|
1152
1241
|
});
|
1153
|
-
|
1242
|
+
|
1154
1243
|
webshims.reflectProperties('source', ['type', 'media']);
|
1155
|
-
|
1156
|
-
|
1244
|
+
|
1245
|
+
|
1157
1246
|
['autoplay', 'controls'].forEach(function(name){
|
1158
1247
|
webshims.defineNodeNamesBooleanProperty(['audio', 'video'], name);
|
1159
1248
|
});
|
1160
|
-
|
1249
|
+
|
1161
1250
|
webshims.defineNodeNamesProperties(['audio', 'video'], {
|
1162
1251
|
HAVE_CURRENT_DATA: {
|
1163
1252
|
value: 2
|
@@ -1186,7 +1275,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1186
1275
|
NETWORK_NO_SOURCE: {
|
1187
1276
|
value: 3
|
1188
1277
|
}
|
1189
|
-
|
1278
|
+
|
1190
1279
|
}, 'prop');
|
1191
1280
|
|
1192
1281
|
|
@@ -1212,7 +1301,7 @@ webshims.register('mediaelement-jaris', function($, webshims, window, document,
|
|
1212
1301
|
var media, error, parent;
|
1213
1302
|
if(
|
1214
1303
|
($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source', parent).last()[0] == e.target)) &&
|
1215
|
-
|
1304
|
+
(media = $(e.target).closest('audio, video')) && !media.hasClass('nonnative-api-active')
|
1216
1305
|
){
|
1217
1306
|
error = media.prop('error');
|
1218
1307
|
setTimeout(function(){
|