From 0b65aa66c2a9b2806b05fa0d3fd542cb52bd363a Mon Sep 17 00:00:00 2001 From: Owen Edwards Date: Wed, 11 Mar 2015 17:13:28 -0700 Subject: [PATCH] Add a 'loadeddata' event on TextTracks, which fixes issue #1864. --- src/js/tracks/text-track-controls.js | 25 ++++++++++++------------- src/js/tracks/text-track.js | 3 +++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/js/tracks/text-track-controls.js b/src/js/tracks/text-track-controls.js index 790306af3b..3012f1fdea 100644 --- a/src/js/tracks/text-track-controls.js +++ b/src/js/tracks/text-track-controls.js @@ -488,24 +488,23 @@ vjs.ChaptersButton.prototype.createMenu = function(){ track, chaptersTrack, items = this.items = []; + //TODO: Handle more than one chapters track for (; i < l; i++) { track = tracks[i]; if (track['kind'] == this.kind_) { - if (!track.cues) { - track['mode'] = 'hidden'; - /* jshint loopfunc:true */ - // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864 - window.setTimeout(vjs.bind(this, function() { - this.createMenu(); - }), 100); - /* jshint loopfunc:false */ - } else { - chaptersTrack = track; - break; - } + chaptersTrack = track; + break; } } + if (chaptersTrack && !chaptersTrack.cues) { + chaptersTrack['mode'] = 'hidden'; + + chaptersTrack.addEventListener('loadeddata', vjs.bind(this, function() { + this.update(); + })); + } + var menu = this.menu; if (menu === undefined) { menu = new vjs.Menu(this.player_); @@ -516,7 +515,7 @@ vjs.ChaptersButton.prototype.createMenu = function(){ })); } - if (chaptersTrack) { + if (chaptersTrack && chaptersTrack.cues) { var cues = chaptersTrack['cues'], cue, mi; i = 0; l = cues.length; diff --git a/src/js/tracks/text-track.js b/src/js/tracks/text-track.js index 40d10a2061..f13af889cc 100644 --- a/src/js/tracks/text-track.js +++ b/src/js/tracks/text-track.js @@ -186,9 +186,11 @@ vjs.TextTrack.prototype = vjs.obj.create(vjs.EventEmitter.prototype); vjs.TextTrack.prototype.constructor = vjs.TextTrack; /* + * loadeddata - The text track was downloaded and parsed * cuechange - One or more cues in the track have become active or stopped being active. */ vjs.TextTrack.prototype.allowedEvents_ = { + 'loadeddata': 'loadeddata', 'cuechange': 'cuechange' }; @@ -241,6 +243,7 @@ loadTrack = function(src, track) { track.loaded_ = true; parseCues(responseBody, track); + track.trigger('loadeddata'); })); };