Manually merged #385
This commit is contained in:
@ -124,7 +124,8 @@
|
||||
tabFocus: 'tab-focus'
|
||||
},
|
||||
captions: {
|
||||
defaultActive: false
|
||||
defaultActive: false,
|
||||
selectedIndex: 0
|
||||
},
|
||||
fullscreen: {
|
||||
enabled: true,
|
||||
@ -437,13 +438,20 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Bind event
|
||||
// Bind event handler
|
||||
function _on(element, events, callback, useCapture) {
|
||||
if (element) {
|
||||
if (_is.htmlElement(element)) {
|
||||
_toggleListener(element, events, callback, true, useCapture);
|
||||
}
|
||||
}
|
||||
|
||||
// Unbind event handler
|
||||
function _off(element, events, callback, useCapture) {
|
||||
if (_is.htmlElement(element)) {
|
||||
_toggleListener(element, events, callback, false, useCapture);
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger event
|
||||
function _event(element, type, bubbles, properties) {
|
||||
// Bail if no element
|
||||
@ -1017,6 +1025,25 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Caption cue change helper event
|
||||
/*function _captionCueChange() {
|
||||
_setActiveCueForTrack(this);
|
||||
}*/
|
||||
|
||||
// Display active caption if it contains text
|
||||
function _setActiveCueForTrack(track) {
|
||||
if (_is.event(track)) {
|
||||
track = track.target;
|
||||
}
|
||||
|
||||
// Display a cue, if there is one
|
||||
if (track.activeCues[0] && 'text' in track.activeCues[0]) {
|
||||
_setCaption(track.activeCues[0].getCueAsHTML());
|
||||
} else {
|
||||
_setCaption();
|
||||
}
|
||||
}
|
||||
|
||||
// Setup captions
|
||||
function _setupCaptions() {
|
||||
// Bail if not HTML5 video
|
||||
@ -1036,7 +1063,8 @@
|
||||
}
|
||||
|
||||
// Get URL of caption file if exists
|
||||
var captionSrc = '',
|
||||
var captionSources = [],
|
||||
captionSrc = '',
|
||||
kind,
|
||||
children = plyr.media.childNodes;
|
||||
|
||||
@ -1044,17 +1072,21 @@
|
||||
if (children[i].nodeName.toLowerCase() === 'track') {
|
||||
kind = children[i].kind;
|
||||
if (kind === 'captions' || kind === 'subtitles') {
|
||||
captionSrc = children[i].getAttribute('src');
|
||||
captionSources.push(children[i].getAttribute('src'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Record if caption file exists or not
|
||||
plyr.captionExists = true;
|
||||
if (captionSrc === '') {
|
||||
if (captionSources.length === 0) {
|
||||
plyr.captionExists = false;
|
||||
_log('No caption track found');
|
||||
} else if ((config.captions.selectedIndex + 1) > captionSources.length) {
|
||||
plyr.captionExists = false;
|
||||
_log('Caption index out of bound');
|
||||
} else {
|
||||
captionSrc = captionSources[config.captions.selectedIndex];
|
||||
_log('Caption track found; URI: ' + captionSrc);
|
||||
}
|
||||
|
||||
@ -1066,6 +1098,8 @@
|
||||
// This doesn't seem to work in Safari 7+, so the <track> elements are removed from the dom below
|
||||
var tracks = plyr.media.textTracks;
|
||||
for (var x = 0; x < tracks.length; x++) {
|
||||
// Remove the listener to prevent event overlapping
|
||||
_off(tracks[x], 'cuechange', _setActiveCueForTrack);
|
||||
tracks[x].mode = 'hidden';
|
||||
}
|
||||
|
||||
@ -1089,20 +1123,16 @@
|
||||
if (plyr.usingTextTracks) {
|
||||
_log('TextTracks supported');
|
||||
|
||||
for (var y = 0; y < tracks.length; y++) {
|
||||
var track = tracks[y];
|
||||
var track = tracks[config.captions.selectedIndex];
|
||||
|
||||
if (track.kind === 'captions' || track.kind === 'subtitles') {
|
||||
_on(track, 'cuechange', function() {
|
||||
// Display a cue, if there is one
|
||||
if (this.activeCues[0] && 'text' in this.activeCues[0]) {
|
||||
_setCaption(this.activeCues[0].getCueAsHTML());
|
||||
} else {
|
||||
_setCaption();
|
||||
}
|
||||
});
|
||||
if (track.kind === 'captions' || track.kind === 'subtitles') {
|
||||
_on(track, 'cuechange', _setActiveCueForTrack);
|
||||
|
||||
// if we change the active track while a cue is already displayed we need to update it
|
||||
if (track.activeCues && track.activeCues.length > 0) {
|
||||
_setActiveCueForTrack(track);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Caption tracks not natively supported
|
||||
_log('TextTracks not supported so rendering captions manually');
|
||||
@ -2425,6 +2455,20 @@
|
||||
_updateStorage({captionsEnabled: plyr.captionsEnabled});
|
||||
}
|
||||
|
||||
// Select active caption
|
||||
function _setCaptionIndex(index){
|
||||
|
||||
//save active caption
|
||||
config.captions.selectedIndex = index;
|
||||
|
||||
// clear caption
|
||||
_setCaption();
|
||||
|
||||
// re-run setup
|
||||
_setupCaptions();
|
||||
|
||||
}
|
||||
|
||||
// Check if media is loading
|
||||
function _checkLoading(event) {
|
||||
var loading = (event.type === 'waiting');
|
||||
@ -3615,6 +3659,7 @@
|
||||
toggleCaptions: _toggleCaptions,
|
||||
toggleFullscreen: _toggleFullscreen,
|
||||
toggleControls: _toggleControls,
|
||||
setCaptionIndex: _setCaptionIndex,
|
||||
isFullscreen: function() { return plyr.isFullscreen || false; },
|
||||
support: function(mimeType) { return _support.mime(plyr, mimeType); },
|
||||
destroy: _destroy
|
||||
|
Reference in New Issue
Block a user