diff options
Diffstat (limited to 'javascript/videojs/src/js/control-bar/track-button.js')
| -rw-r--r-- | javascript/videojs/src/js/control-bar/track-button.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/javascript/videojs/src/js/control-bar/track-button.js b/javascript/videojs/src/js/control-bar/track-button.js new file mode 100644 index 0000000..99ab39c --- /dev/null +++ b/javascript/videojs/src/js/control-bar/track-button.js @@ -0,0 +1,56 @@ +/** + * @file track-button.js + */ +import MenuButton from '../menu/menu-button.js'; +import Component from '../component.js'; +import * as Fn from '../utils/fn.js'; + +/** @import Player from './player' */ + +/** + * The base class for buttons that toggle specific track types (e.g. subtitles). + * + * @extends MenuButton + */ +class TrackButton extends MenuButton { + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + */ + constructor(player, options) { + const tracks = options.tracks; + + super(player, options); + + if (this.items.length <= 1) { + this.hide(); + } + + if (!tracks) { + return; + } + + const updateHandler = Fn.bind_(this, this.update); + + tracks.addEventListener('removetrack', updateHandler); + tracks.addEventListener('addtrack', updateHandler); + tracks.addEventListener('labelchange', updateHandler); + this.player_.on('ready', updateHandler); + + this.player_.on('dispose', function() { + tracks.removeEventListener('removetrack', updateHandler); + tracks.removeEventListener('addtrack', updateHandler); + tracks.removeEventListener('labelchange', updateHandler); + }); + } + +} + +Component.registerComponent('TrackButton', TrackButton); +export default TrackButton; |
