summaryrefslogtreecommitdiff
path: root/javascript/videojs/src/js/control-bar/track-button.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/videojs/src/js/control-bar/track-button.js')
-rw-r--r--javascript/videojs/src/js/control-bar/track-button.js56
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;