diff options
Diffstat (limited to 'javascript/videojs/src/js/tracks/text-track-list.js')
| -rw-r--r-- | javascript/videojs/src/js/tracks/text-track-list.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/javascript/videojs/src/js/tracks/text-track-list.js b/javascript/videojs/src/js/tracks/text-track-list.js new file mode 100644 index 0000000..0fd6c35 --- /dev/null +++ b/javascript/videojs/src/js/tracks/text-track-list.js @@ -0,0 +1,70 @@ +/** + * @file text-track-list.js + */ +import TrackList from './track-list'; + +/** @import TextTrack from './text-track' */ + +/** + * The current list of {@link TextTrack} for a media file. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist} + * @extends TrackList + */ +class TextTrackList extends TrackList { + + /** + * Add a {@link TextTrack} to the `TextTrackList` + * + * @param {TextTrack} track + * The text track to add to the list. + * + * @fires TrackList#addtrack + */ + addTrack(track) { + super.addTrack(track); + + if (!this.queueChange_) { + this.queueChange_ = () => this.queueTrigger('change'); + } + if (!this.triggerSelectedlanguagechange) { + this.triggerSelectedlanguagechange_ = () => this.trigger('selectedlanguagechange'); + } + + /** + * @listens TextTrack#modechange + * @fires TrackList#change + */ + track.addEventListener('modechange', this.queueChange_); + const nonLanguageTextTrackKind = ['metadata', 'chapters']; + + if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { + track.addEventListener('modechange', this.triggerSelectedlanguagechange_); + } + } + + removeTrack(rtrack) { + super.removeTrack(rtrack); + + // manually remove the event handlers we added + if (rtrack.removeEventListener) { + if (this.queueChange_) { + rtrack.removeEventListener('modechange', this.queueChange_); + } + if (this.selectedlanguagechange_) { + rtrack.removeEventListener('modechange', this.triggerSelectedlanguagechange_); + } + } + } + + /** + * Creates a serializable array of objects that contains serialized copies + * of each text track. + * + * @return {Object[]} A serializable list of objects for the text track list + */ + toJSON() { + return this.tracks_.map((track) => track.toJSON()); + } +} +export default TextTrackList; |
