diff options
Diffstat (limited to 'javascript/videojs/src/js/control-bar/text-track-controls/text-track-button.js')
| -rw-r--r-- | javascript/videojs/src/js/control-bar/text-track-controls/text-track-button.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/javascript/videojs/src/js/control-bar/text-track-controls/text-track-button.js b/javascript/videojs/src/js/control-bar/text-track-controls/text-track-button.js new file mode 100644 index 0000000..0744986 --- /dev/null +++ b/javascript/videojs/src/js/control-bar/text-track-controls/text-track-button.js @@ -0,0 +1,93 @@ +/** + * @file text-track-button.js + */ +import TrackButton from '../track-button.js'; +import Component from '../../component.js'; +import TextTrackMenuItem from './text-track-menu-item.js'; +import OffTextTrackMenuItem from './off-text-track-menu-item.js'; + +/** @import Player from '../../player' */ + +/** + * The base class for buttons that toggle specific text track types (e.g. subtitles) + * + * @extends MenuButton + */ +class TextTrackButton extends TrackButton { + + /** + * 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 = {}) { + options.tracks = player.textTracks(); + + super(player, options); + } + + /** + * Create a menu item for each text track + * + * @param {TextTrackMenuItem[]} [items=[]] + * Existing array of items to use during creation + * + * @return {TextTrackMenuItem[]} + * Array of menu items that were created + */ + createItems(items = [], TrackMenuItem = TextTrackMenuItem) { + + // Label is an override for the [track] off label + // USed to localise captions/subtitles + let label; + + if (this.label_) { + label = `${this.label_} off`; + } + // Add an OFF menu item to turn all tracks off + items.push(new OffTextTrackMenuItem(this.player_, { + kinds: this.kinds_, + kind: this.kind_, + label + })); + + this.hideThreshold_ += 1; + + const tracks = this.player_.textTracks(); + + if (!Array.isArray(this.kinds_)) { + this.kinds_ = [this.kind_]; + } + + for (let i = 0; i < tracks.length; i++) { + const track = tracks[i]; + + // only add tracks that are of an appropriate kind and have a label + if (this.kinds_.indexOf(track.kind) > -1) { + + const item = new TrackMenuItem(this.player_, { + track, + kinds: this.kinds_, + kind: this.kind_, + // MenuItem is selectable + selectable: true, + // MenuItem is NOT multiSelectable (i.e. only one can be marked "selected" at a time) + multiSelectable: false + }); + + item.addClass(`vjs-${track.kind}-menu-item`); + items.push(item); + } + } + + return items; + } + +} + +Component.registerComponent('TextTrackButton', TextTrackButton); +export default TextTrackButton; |
