- 1 :
/**
- 2 :
* @file playback-rate-menu-item.js
- 3 :
*/
- 4 :
import MenuItem from '../../menu/menu-item.js';
- 5 :
import Component from '../../component.js';
- 6 :
- 7 :
/**
- 8 :
* The specific menu item type for selecting a playback rate.
- 9 :
*
- 10 :
* @extends MenuItem
- 11 :
*/
- 12 :
class PlaybackRateMenuItem extends MenuItem {
- 13 :
- 14 :
/**
- 15 :
* Creates an instance of this class.
- 16 :
*
- 17 :
* @param {Player} player
- 18 :
* The `Player` that this class should be attached to.
- 19 :
*
- 20 :
* @param {Object} [options]
- 21 :
* The key/value store of player options.
- 22 :
*/
- 23 :
constructor(player, options) {
- 24 :
const label = options.rate;
- 25 :
const rate = parseFloat(label, 10);
- 26 :
- 27 :
// Modify options for parent MenuItem class's init.
- 28 :
options.label = label;
- 29 :
options.selected = rate === player.playbackRate();
- 30 :
options.selectable = true;
- 31 :
options.multiSelectable = false;
- 32 :
- 33 :
super(player, options);
- 34 :
- 35 :
this.label = label;
- 36 :
this.rate = rate;
- 37 :
- 38 :
this.on(player, 'ratechange', (e) => this.update(e));
- 39 :
}
- 40 :
- 41 :
/**
- 42 :
* This gets called when an `PlaybackRateMenuItem` is "clicked". See
- 43 :
* {@link ClickableComponent} for more detailed information on what a click can be.
- 44 :
*
- 45 :
* @param {EventTarget~Event} [event]
- 46 :
* The `keydown`, `tap`, or `click` event that caused this function to be
- 47 :
* called.
- 48 :
*
- 49 :
* @listens tap
- 50 :
* @listens click
- 51 :
*/
- 52 :
handleClick(event) {
- 53 :
super.handleClick();
- 54 :
this.player().playbackRate(this.rate);
- 55 :
}
- 56 :
- 57 :
/**
- 58 :
* Update the PlaybackRateMenuItem when the playbackrate changes.
- 59 :
*
- 60 :
* @param {EventTarget~Event} [event]
- 61 :
* The `ratechange` event that caused this function to run.
- 62 :
*
- 63 :
* @listens Player#ratechange
- 64 :
*/
- 65 :
update(event) {
- 66 :
this.selected(this.player().playbackRate() === this.rate);
- 67 :
}
- 68 :
- 69 :
}
- 70 :
- 71 :
/**
- 72 :
* The text that should display over the `PlaybackRateMenuItem`s controls. Added for localization.
- 73 :
*
- 74 :
* @type {string}
- 75 :
* @private
- 76 :
*/
- 77 :
PlaybackRateMenuItem.prototype.contentElType = 'button';
- 78 :
- 79 :
Component.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);
- 80 :
export default PlaybackRateMenuItem;