mediaelement_rails 0.8.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/app/assets/javascripts/mediaelement_rails/mediaelement.js +175 -72
- data/app/assets/javascripts/mediaelement_rails/mediaelementplayer.js +288 -131
- data/app/assets/plugins/mediaelement_rails/flashmediaelement-cdn.swf +0 -0
- data/app/assets/plugins/mediaelement_rails/flashmediaelement.swf +0 -0
- data/app/assets/stylesheets/mediaelement_rails/mediaelementplayer.css.erb +22 -2
- data/lib/mediaelement_rails/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03557a90121aa44f9904fcc832fe2027989b9cf7
|
4
|
+
data.tar.gz: 743ebb30779763a668409c690e0f46137b1d79b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e45fd72044f9284c56aab327722ae2d406f915e9e638bab42f60efd0c889416429d6af77d01d7ef58398f7e6597d6178153ce507d47a09bb0aa8d00efba4ce01
|
7
|
+
data.tar.gz: a361e1cffd51ca1e6ddd9f5f21e194d54778d5c5ca62c3196f030ab65b52843d0375d27db3a13ed5c291772793e88420d5c5fb4708f105dc5ab626ef6ab6bd18
|
data/CHANGELOG.md
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
var mejs = mejs || {};
|
17
17
|
|
18
18
|
// version number
|
19
|
-
mejs.version = '2.
|
19
|
+
mejs.version = '2.18.0';
|
20
20
|
|
21
21
|
|
22
22
|
// player number (for missing, same id attr)
|
@@ -28,7 +28,7 @@ mejs.plugins = {
|
|
28
28
|
{version: [3,0], types: ['video/mp4','video/m4v','video/mov','video/wmv','audio/wma','audio/m4a','audio/mp3','audio/wav','audio/mpeg']}
|
29
29
|
],
|
30
30
|
flash: [
|
31
|
-
{version: [9,0,124], types: ['video/mp4','video/m4v','video/mov','video/flv','video/rtmp','video/x-flv','audio/flv','audio/x-flv','audio/mp3','audio/m4a','audio/mpeg', 'video/youtube', 'video/x-youtube', 'application/x-mpegURL']}
|
31
|
+
{version: [9,0,124], types: ['video/mp4','video/m4v','video/mov','video/flv','video/rtmp','video/x-flv','audio/flv','audio/x-flv','audio/mp3','audio/m4a','audio/mpeg', 'video/youtube', 'video/x-youtube', 'video/dailymotion', 'video/x-dailymotion', 'application/x-mpegURL']}
|
32
32
|
//,{version: [12,0], types: ['video/webm']} // for future reference (hopefully!)
|
33
33
|
],
|
34
34
|
youtube: [
|
@@ -100,25 +100,111 @@ mejs.Utility = {
|
|
100
100
|
// send the best path back
|
101
101
|
return codePath;
|
102
102
|
},
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
103
|
+
/*
|
104
|
+
* Calculate the time format to use. We have a default format set in the
|
105
|
+
* options but it can be imcomplete. We ajust it according to the media
|
106
|
+
* duration.
|
107
|
+
*
|
108
|
+
* We support format like 'hh:mm:ss:ff'.
|
109
|
+
*/
|
110
|
+
calculateTimeFormat: function(time, options, fps) {
|
111
|
+
if (time < 0) {
|
112
|
+
time = 0;
|
113
|
+
}
|
114
|
+
|
115
|
+
if(typeof fps == 'undefined') {
|
108
116
|
fps = 25;
|
109
117
|
}
|
110
|
-
|
111
|
-
var
|
118
|
+
|
119
|
+
var format = options.timeFormat,
|
120
|
+
firstChar = format[0],
|
121
|
+
firstTwoPlaces = (format[1] == format[0]),
|
122
|
+
separatorIndex = firstTwoPlaces? 2: 1,
|
123
|
+
separator = ':',
|
124
|
+
hours = Math.floor(time / 3600) % 24,
|
112
125
|
minutes = Math.floor(time / 60) % 60,
|
113
126
|
seconds = Math.floor(time % 60),
|
114
127
|
frames = Math.floor(((time % 1)*fps).toFixed(3)),
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
128
|
+
lis = [
|
129
|
+
[frames, 'f'],
|
130
|
+
[seconds, 's'],
|
131
|
+
[minutes, 'm'],
|
132
|
+
[hours, 'h']
|
133
|
+
];
|
134
|
+
|
135
|
+
// Try to get the separator from the format
|
136
|
+
if (format.length < separatorIndex) {
|
137
|
+
separator = format[separatorIndex];
|
138
|
+
}
|
139
|
+
|
140
|
+
var required = false;
|
141
|
+
|
142
|
+
for (var i=0, len=lis.length; i < len; i++) {
|
143
|
+
if (format.indexOf(lis[i][1]) !== -1) {
|
144
|
+
required=true;
|
145
|
+
}
|
146
|
+
else if (required) {
|
147
|
+
var hasNextValue = false;
|
148
|
+
for (var j=i; j < len; j++) {
|
149
|
+
if (lis[j][0] > 0) {
|
150
|
+
hasNextValue = true;
|
151
|
+
break;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
if (! hasNextValue) {
|
156
|
+
break;
|
157
|
+
}
|
158
|
+
|
159
|
+
if (!firstTwoPlaces) {
|
160
|
+
format = firstChar + format;
|
161
|
+
}
|
162
|
+
format = lis[i][1] + separator + format;
|
163
|
+
if (firstTwoPlaces) {
|
164
|
+
format = lis[i][1] + format;
|
165
|
+
}
|
166
|
+
firstChar = lis[i][1];
|
167
|
+
}
|
168
|
+
}
|
169
|
+
options.currentTimeFormat = format;
|
170
|
+
},
|
171
|
+
/*
|
172
|
+
* Prefix the given number by zero if it is lower than 10.
|
173
|
+
*/
|
174
|
+
twoDigitsString: function(n) {
|
175
|
+
if (n < 10) {
|
176
|
+
return '0' + n;
|
177
|
+
}
|
178
|
+
return String(n);
|
179
|
+
},
|
180
|
+
secondsToTimeCode: function(time, options) {
|
181
|
+
if (time < 0) {
|
182
|
+
time = 0;
|
183
|
+
}
|
184
|
+
|
185
|
+
var fps = options.framesPerSecond;
|
186
|
+
if(typeof fps === 'undefined') {
|
187
|
+
fps = 25;
|
188
|
+
}
|
189
|
+
|
190
|
+
var format = options.currentTimeFormat,
|
191
|
+
hours = Math.floor(time / 3600) % 24,
|
192
|
+
minutes = Math.floor(time / 60) % 60,
|
193
|
+
seconds = Math.floor(time % 60),
|
194
|
+
frames = Math.floor(((time % 1)*fps).toFixed(3));
|
195
|
+
lis = [
|
196
|
+
[frames, 'f'],
|
197
|
+
[seconds, 's'],
|
198
|
+
[minutes, 'm'],
|
199
|
+
[hours, 'h']
|
200
|
+
];
|
201
|
+
|
202
|
+
var res = format;
|
203
|
+
for (i=0,len=lis.length; i < len; i++) {
|
204
|
+
res = res.replace(lis[i][1]+lis[i][1], this.twoDigitsString(lis[i][0]));
|
205
|
+
res = res.replace(lis[i][1], lis[i][0]);
|
206
|
+
}
|
207
|
+
return res;
|
122
208
|
},
|
123
209
|
|
124
210
|
timeCodeToSeconds: function(hh_mm_ss_ff, forceHours, showFrameCount, fps){
|
@@ -630,7 +716,7 @@ mejs.PluginMediaElement.prototype = {
|
|
630
716
|
media = url[i];
|
631
717
|
if (this.canPlayType(media.type)) {
|
632
718
|
this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(media.src));
|
633
|
-
this.src = mejs.Utility.absolutizeUrl(
|
719
|
+
this.src = mejs.Utility.absolutizeUrl(media.src);
|
634
720
|
break;
|
635
721
|
}
|
636
722
|
}
|
@@ -670,7 +756,7 @@ mejs.PluginMediaElement.prototype = {
|
|
670
756
|
this.pluginApi.unMute();
|
671
757
|
}
|
672
758
|
this.muted = muted;
|
673
|
-
this.dispatchEvent('volumechange');
|
759
|
+
this.dispatchEvent({type:'volumechange'});
|
674
760
|
} else {
|
675
761
|
this.pluginApi.setMuted(muted);
|
676
762
|
}
|
@@ -729,15 +815,14 @@ mejs.PluginMediaElement.prototype = {
|
|
729
815
|
}
|
730
816
|
return false;
|
731
817
|
},
|
732
|
-
dispatchEvent: function (
|
818
|
+
dispatchEvent: function (event) {
|
733
819
|
var i,
|
734
820
|
args,
|
735
|
-
callbacks = this.events[
|
821
|
+
callbacks = this.events[event.type];
|
736
822
|
|
737
823
|
if (callbacks) {
|
738
|
-
args = Array.prototype.slice.call(arguments, 1);
|
739
824
|
for (i = 0; i < callbacks.length; i++) {
|
740
|
-
callbacks[i].apply(this,
|
825
|
+
callbacks[i].apply(this, event);
|
741
826
|
}
|
742
827
|
}
|
743
828
|
},
|
@@ -845,7 +930,7 @@ mejs.MediaPluginBridge = {
|
|
845
930
|
length: 1
|
846
931
|
};
|
847
932
|
|
848
|
-
pluginMediaElement.dispatchEvent(e
|
933
|
+
pluginMediaElement.dispatchEvent(e);
|
849
934
|
}
|
850
935
|
};
|
851
936
|
|
@@ -874,6 +959,8 @@ mejs.MediaElementDefaults = {
|
|
874
959
|
flashName: 'flashmediaelement.swf',
|
875
960
|
// streamer for RTMP streaming
|
876
961
|
flashStreamer: '',
|
962
|
+
// set to 'always' for CDN version
|
963
|
+
flashScriptAccess: 'sameDomain',
|
877
964
|
// turns on the smoothing filter in Flash
|
878
965
|
enablePluginSmoothing: false,
|
879
966
|
// enabled pseudo-streaming (seek) on .mp4 files
|
@@ -1106,7 +1193,7 @@ mejs.HtmlMediaElementShim = {
|
|
1106
1193
|
// test for plugin playback types
|
1107
1194
|
for (l=0; l<pluginInfo.types.length; l++) {
|
1108
1195
|
// find plugin that can play the type
|
1109
|
-
if (type == pluginInfo.types[l]) {
|
1196
|
+
if (type.toLowerCase() == pluginInfo.types[l].toLowerCase()) {
|
1110
1197
|
result.method = pluginName;
|
1111
1198
|
result.url = mediaFiles[i].url;
|
1112
1199
|
return result;
|
@@ -1133,8 +1220,6 @@ mejs.HtmlMediaElementShim = {
|
|
1133
1220
|
},
|
1134
1221
|
|
1135
1222
|
formatType: function(url, type) {
|
1136
|
-
var ext;
|
1137
|
-
|
1138
1223
|
// if no type is supplied, fake it with the extension
|
1139
1224
|
if (url && !type) {
|
1140
1225
|
return this.getTypeFromFile(url);
|
@@ -1153,34 +1238,46 @@ mejs.HtmlMediaElementShim = {
|
|
1153
1238
|
|
1154
1239
|
getTypeFromFile: function(url) {
|
1155
1240
|
url = url.split('?')[0];
|
1156
|
-
var
|
1157
|
-
|
1241
|
+
var
|
1242
|
+
ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(),
|
1243
|
+
av = /(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video/' : 'audio/';
|
1244
|
+
return this.getTypeFromExtension(ext, av);
|
1158
1245
|
},
|
1159
1246
|
|
1160
|
-
getTypeFromExtension: function(ext) {
|
1247
|
+
getTypeFromExtension: function(ext, av) {
|
1248
|
+
av = av || '';
|
1161
1249
|
|
1162
1250
|
switch (ext) {
|
1163
1251
|
case 'mp4':
|
1164
1252
|
case 'm4v':
|
1165
1253
|
case 'm4a':
|
1166
|
-
|
1254
|
+
case 'f4v':
|
1255
|
+
case 'f4a':
|
1256
|
+
return av + 'mp4';
|
1257
|
+
case 'flv':
|
1258
|
+
return av + 'x-flv';
|
1167
1259
|
case 'webm':
|
1168
1260
|
case 'webma':
|
1169
1261
|
case 'webmv':
|
1170
|
-
return 'webm';
|
1262
|
+
return av + 'webm';
|
1171
1263
|
case 'ogg':
|
1172
1264
|
case 'oga':
|
1173
1265
|
case 'ogv':
|
1174
|
-
return 'ogg';
|
1266
|
+
return av + 'ogg';
|
1267
|
+
case 'm3u8':
|
1268
|
+
return 'application/x-mpegurl';
|
1269
|
+
case 'ts':
|
1270
|
+
return av + 'mp2t';
|
1175
1271
|
default:
|
1176
|
-
return ext;
|
1272
|
+
return av + ext;
|
1177
1273
|
}
|
1178
1274
|
},
|
1179
1275
|
|
1180
1276
|
createErrorMessage: function(playback, options, poster) {
|
1181
1277
|
var
|
1182
1278
|
htmlMediaElement = playback.htmlMediaElement,
|
1183
|
-
errorContainer = document.createElement('div')
|
1279
|
+
errorContainer = document.createElement('div'),
|
1280
|
+
errorContent = options.customError;
|
1184
1281
|
|
1185
1282
|
errorContainer.className = 'me-cannotplay';
|
1186
1283
|
|
@@ -1189,13 +1286,17 @@ mejs.HtmlMediaElementShim = {
|
|
1189
1286
|
errorContainer.style.height = htmlMediaElement.height + 'px';
|
1190
1287
|
} catch (e) {}
|
1191
1288
|
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1289
|
+
if (!errorContent) {
|
1290
|
+
errorContent = '<a href="' + playback.url + '">';
|
1291
|
+
|
1292
|
+
if (poster !== '') {
|
1293
|
+
errorContent += '<img src="' + poster + '" width="100%" height="100%" alt="" />';
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
errorContent += '<span>' + mejs.i18n.t('Download File') + '</span></a>';
|
1297
|
+
}
|
1298
|
+
|
1299
|
+
errorContainer.innerHTML = errorContent;
|
1199
1300
|
|
1200
1301
|
htmlMediaElement.parentNode.insertBefore(errorContainer, htmlMediaElement);
|
1201
1302
|
htmlMediaElement.style.display = 'none';
|
@@ -1221,14 +1322,16 @@ mejs.HtmlMediaElementShim = {
|
|
1221
1322
|
// copy attributes from html media element to plugin media element
|
1222
1323
|
for (var i = 0; i < htmlMediaElement.attributes.length; i++) {
|
1223
1324
|
var attribute = htmlMediaElement.attributes[i];
|
1224
|
-
if (attribute.specified
|
1325
|
+
if (attribute.specified) {
|
1225
1326
|
pluginMediaElement.setAttribute(attribute.name, attribute.value);
|
1226
1327
|
}
|
1227
1328
|
}
|
1228
1329
|
|
1229
1330
|
// check for placement inside a <p> tag (sometimes WYSIWYG editors do this)
|
1230
1331
|
node = htmlMediaElement.parentNode;
|
1231
|
-
|
1332
|
+
|
1333
|
+
while (node !== null && node.tagName != null && node.tagName.toLowerCase() !== 'body' &&
|
1334
|
+
node.parentNode != null && node.parentNode.tagName != null && node.parentNode.constructor != null && node.parentNode.constructor.name === "ShadowRoot") {
|
1232
1335
|
if (node.parentNode.tagName.toLowerCase() === 'p') {
|
1233
1336
|
node.parentNode.parentNode.insertBefore(node, node.parentNode);
|
1234
1337
|
break;
|
@@ -1293,9 +1396,9 @@ mejs.HtmlMediaElementShim = {
|
|
1293
1396
|
if (options.enablePluginSmoothing) {
|
1294
1397
|
initVars.push('smoothing=true');
|
1295
1398
|
}
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1399
|
+
if (options.enablePseudoStreaming) {
|
1400
|
+
initVars.push('pseudostreaming=true');
|
1401
|
+
}
|
1299
1402
|
if (controls) {
|
1300
1403
|
initVars.push('controls=true'); // shows controls in the plugin if desired
|
1301
1404
|
}
|
@@ -1329,7 +1432,7 @@ mejs.HtmlMediaElementShim = {
|
|
1329
1432
|
'<param name="quality" value="high" />' +
|
1330
1433
|
'<param name="bgcolor" value="#000000" />' +
|
1331
1434
|
'<param name="wmode" value="transparent" />' +
|
1332
|
-
'<param name="allowScriptAccess" value="
|
1435
|
+
'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '" />' +
|
1333
1436
|
'<param name="allowFullScreen" value="true" />' +
|
1334
1437
|
'<param name="scale" value="default" />' +
|
1335
1438
|
'</object>';
|
@@ -1343,7 +1446,7 @@ mejs.HtmlMediaElementShim = {
|
|
1343
1446
|
'quality="high" ' +
|
1344
1447
|
'bgcolor="#000000" ' +
|
1345
1448
|
'wmode="transparent" ' +
|
1346
|
-
'allowScriptAccess="
|
1449
|
+
'allowScriptAccess="' + options.flashScriptAccess + '" ' +
|
1347
1450
|
'allowFullScreen="true" ' +
|
1348
1451
|
'type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" ' +
|
1349
1452
|
'src="' + options.pluginPath + options.flashName + '" ' +
|
@@ -1380,7 +1483,7 @@ mejs.HtmlMediaElementShim = {
|
|
1380
1483
|
};
|
1381
1484
|
|
1382
1485
|
if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) {
|
1383
|
-
mejs.YouTubeApi.createFlash(youtubeSettings);
|
1486
|
+
mejs.YouTubeApi.createFlash(youtubeSettings, options);
|
1384
1487
|
} else {
|
1385
1488
|
mejs.YouTubeApi.enqueueIframe(youtubeSettings);
|
1386
1489
|
}
|
@@ -1424,15 +1527,15 @@ mejs.HtmlMediaElementShim = {
|
|
1424
1527
|
}
|
1425
1528
|
|
1426
1529
|
function createEvent(player, pluginMediaElement, eventName, e) {
|
1427
|
-
var
|
1530
|
+
var event = {
|
1428
1531
|
type: eventName,
|
1429
1532
|
target: pluginMediaElement
|
1430
1533
|
};
|
1431
1534
|
if (eventName == 'timeupdate') {
|
1432
|
-
pluginMediaElement.currentTime =
|
1433
|
-
pluginMediaElement.duration =
|
1535
|
+
pluginMediaElement.currentTime = event.currentTime = e.seconds;
|
1536
|
+
pluginMediaElement.duration = event.duration = e.duration;
|
1434
1537
|
}
|
1435
|
-
pluginMediaElement.dispatchEvent(
|
1538
|
+
pluginMediaElement.dispatchEvent(event);
|
1436
1539
|
}
|
1437
1540
|
|
1438
1541
|
player.addEvent('play', function() {
|
@@ -1582,7 +1685,7 @@ mejs.YouTubeApi = {
|
|
1582
1685
|
},
|
1583
1686
|
|
1584
1687
|
createEvent: function (player, pluginMediaElement, eventName) {
|
1585
|
-
var
|
1688
|
+
var event = {
|
1586
1689
|
type: eventName,
|
1587
1690
|
target: pluginMediaElement
|
1588
1691
|
};
|
@@ -1590,25 +1693,25 @@ mejs.YouTubeApi = {
|
|
1590
1693
|
if (player && player.getDuration) {
|
1591
1694
|
|
1592
1695
|
// time
|
1593
|
-
pluginMediaElement.currentTime =
|
1594
|
-
pluginMediaElement.duration =
|
1696
|
+
pluginMediaElement.currentTime = event.currentTime = player.getCurrentTime();
|
1697
|
+
pluginMediaElement.duration = event.duration = player.getDuration();
|
1595
1698
|
|
1596
1699
|
// state
|
1597
|
-
|
1598
|
-
|
1700
|
+
event.paused = pluginMediaElement.paused;
|
1701
|
+
event.ended = pluginMediaElement.ended;
|
1599
1702
|
|
1600
1703
|
// sound
|
1601
|
-
|
1602
|
-
|
1704
|
+
event.muted = player.isMuted();
|
1705
|
+
event.volume = player.getVolume() / 100;
|
1603
1706
|
|
1604
1707
|
// progress
|
1605
|
-
|
1606
|
-
|
1708
|
+
event.bytesTotal = player.getVideoBytesTotal();
|
1709
|
+
event.bufferedBytes = player.getVideoBytesLoaded();
|
1607
1710
|
|
1608
1711
|
// fake the W3C buffered TimeRange
|
1609
|
-
var bufferedTime =
|
1712
|
+
var bufferedTime = event.bufferedBytes / event.bytesTotal * event.duration;
|
1610
1713
|
|
1611
|
-
|
1714
|
+
event.target.buffered = event.buffered = {
|
1612
1715
|
start: function(index) {
|
1613
1716
|
return 0;
|
1614
1717
|
},
|
@@ -1621,7 +1724,7 @@ mejs.YouTubeApi = {
|
|
1621
1724
|
}
|
1622
1725
|
|
1623
1726
|
// send event up the chain
|
1624
|
-
pluginMediaElement.dispatchEvent(
|
1727
|
+
pluginMediaElement.dispatchEvent(event);
|
1625
1728
|
},
|
1626
1729
|
|
1627
1730
|
iFrameReady: function() {
|
@@ -1645,7 +1748,7 @@ mejs.YouTubeApi = {
|
|
1645
1748
|
settings.container.innerHTML =
|
1646
1749
|
'<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid=' + settings.pluginId + '&version=3&autoplay=0&controls=0&modestbranding=1&loop=0" ' +
|
1647
1750
|
'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' +
|
1648
|
-
'<param name="allowScriptAccess" value="
|
1751
|
+
'<param name="allowScriptAccess" value="sameDomain">' +
|
1649
1752
|
'<param name="wmode" value="transparent">' +
|
1650
1753
|
'</object>';
|
1651
1754
|
*/
|
@@ -1661,14 +1764,14 @@ mejs.YouTubeApi = {
|
|
1661
1764
|
'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '" class="mejs-shim">' +
|
1662
1765
|
'<param name="movie" value="' + youtubeUrl + '" />' +
|
1663
1766
|
'<param name="wmode" value="transparent" />' +
|
1664
|
-
'<param name="allowScriptAccess" value="
|
1767
|
+
'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '" />' +
|
1665
1768
|
'<param name="allowFullScreen" value="true" />' +
|
1666
1769
|
'</object>';
|
1667
1770
|
} else {
|
1668
1771
|
settings.container.innerHTML =
|
1669
1772
|
'<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + youtubeUrl + '" ' +
|
1670
1773
|
'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' +
|
1671
|
-
'<param name="allowScriptAccess" value="
|
1774
|
+
'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '">' +
|
1672
1775
|
'<param name="wmode" value="transparent">' +
|
1673
1776
|
'</object>';
|
1674
1777
|
}
|
@@ -1740,13 +1843,13 @@ mejs.YouTubeApi = {
|
|
1740
1843
|
}
|
1741
1844
|
}
|
1742
1845
|
// IFRAME
|
1743
|
-
function
|
1846
|
+
window.onYouTubePlayerAPIReady = function() {
|
1744
1847
|
mejs.YouTubeApi.iFrameReady();
|
1745
|
-
}
|
1848
|
+
};
|
1746
1849
|
// FLASH
|
1747
|
-
function
|
1850
|
+
window.onYouTubePlayerReady = function(id) {
|
1748
1851
|
mejs.YouTubeApi.flashReady(id);
|
1749
|
-
}
|
1852
|
+
};
|
1750
1853
|
|
1751
1854
|
window.mejs = mejs;
|
1752
1855
|
window.MediaElement = mejs.MediaElement;
|