/**
 * @file playback-rate-menu-button.js
 */
從 '../../menu/menu-button.js' 導入 MenuButton;
從“./playback-rate-menu-item.js”導入 PlaybackRateMenuItem;
從 '../../component.js' 導入組件;
import * as Dom from '../../utils/dom.js';

/**
 * 控製播放速率的組件。
 *
 * @extends 菜單按鈕
 */
類 PlaybackRateMenuButton 擴展 MenuButton {

  /**
   * 創建此類的一個實例。
   *
   * @param {Player} 播放器
   * 此類應附加到的 `Player`。
   *
   * @param {對象} [選項]
   * 播放器選項的鍵/值存儲。
   */
  構造函數(播放器,選項){
    超級(播放器,選項);

    this.menuButton_.el_.setAttribute('aria-describedby', this.labelElId_);

    這個.updateVisibility();
    這個.updateLabel();

    this.on(player, 'loadstart', (e) => this.updateVisibility(e));
    this.on(player, 'ratechange', (e) => this.updateLabel(e));
    this.on(player, 'playbackrateschange', (e) => this.handlePlaybackRateschange(e));
  }

  /**
   * 創建 `Component` 的 DOM 元素
   *
   * @return {元素}
   * 創建的元素。
   */
  創建El() {
    const el = super.createEl();

    this.labelElId_ = 'vjs-playback-rate-value-label-' + this.id_;

    this.labelEl_ = Dom.createEl('div', {
      className: 'vjs-playback-rate-value',
      id: this.labelElId_,
      文字內容:'1x'
    });

    el.appendChild(this.labelEl_);

    返回 el;
  }

  處置(){
    this.labelEl_ = null;

    super.dispose();
  }

  /**
   * 構建默認的 DOM `className`。
   *
   * @return {字符串}
   * 此對象的 DOM `className`。
   */
  buildCSSClass() {
    返回`vjs-播放率${super.buildCSSClass()}`;
  }

  buildWrapperCSSClass() {
    返回`vjs-播放率${super.buildWrapperCSSClass()}`;
  }

  /**
   * 創建菜單項列表。具體到每個子類。
   *
   */
  創建項目(){
    const rates = this.playbackRates();
    常量項 = [];

    對於(讓 i = rates.length - 1; i >= 0; i--){
      items.push(new PlaybackRateMenuItem(this.player(), {rate: rates[i] + 'x'}));
    }

    退換貨品;
  }

  /**
   * 更新 ARIA 輔助功能屬性
   */
  更新 ARIAAttributes() {
    // 當前播放速率
    this.el().setAttribute('aria-valuenow', this.player().playbackRate());
  }

  /**
   * 當 `PlaybackRateMenuButton` 被“點擊”時調用。看
   * {@link ClickableComponent} 以獲取有關點擊的更多詳細信息。
   *
   * @param {EventTarget~Event} [事件]
   * 導致此功能被執行的 `keydown`、`tap` 或 `click` 事件
   * 打電話。
   *
   * @listens 水龍頭
   * @listens 點擊
   */
  handleClick(事件){
    // 選擇下一個利率選項
    const currentRate = this.player().playbackRate();
    const rates = this.playbackRates();
    const currentIndex = rates.indexOf(currentRate);
    // 這將獲得下一個速率,如果當前選擇的是最後一個,它將選擇第一個
    const newIndex = (currentIndex + 1) % rates.length;

    this.player().playbackRate(rates[newIndex]);
  }

  /**
   * 在 playbackrateschange 上,更新菜單以說明新項目。
   *
   * @listens Player#playbackrateschange
   */
  handlePlaybackRateschange(事件){
    這個.更新();
  }

  /**
   * 獲取可能的播放速率
   *
   * @return {數組}
   *所有可能的播放速率
   */
  回放率(){
    const player = this.player();

    返回(player.playbackRates && player.playbackRates())|| [];
  }

  /**
   * 獲取技術是否支持播放速率
   * 並且存在一系列播放速率
   *
   * @return {布爾值}
   * 是否支持改變播放速率
   */
  playbackRateSupported() {
    返回 this.player().tech_ &&
      this.player().tech_.featuresPlaybackRate &&
      this.playbackRates() &&
      this.playbackRates().length > 0
    ;
  }

  /**
   * 在沒有可供選擇的播放速率選項時隱藏播放速率控制
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#loadstart
   */
  更新可見性(事件){
    如果(this.playbackRateSupported()){
      this.removeClass('vjs-hidden');
    }其他{
      this.addClass('vjs-hidden');
    }
  }

  /**
   * 匯率變化時更新按鈕標籤
   *
   * @param {EventTarget~Event} [事件]
   * 導致此函數運行的事件。
   *
   * @listens Player#ratechange
   */
  更新標籤(事件){
    如果(this.playbackRateSupported()){
      this.labelEl_.textContent = this.player().playbackRate() + 'x';
    }
  }

}

/**
 * 應顯示在 `FullscreenToggle` 控件上的文本。添加本地化。
 *
 * @type {字符串}
 * @私人的
 */
PlaybackRateMenuButton.prototype.controlText_ = '播放速率';

Component.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);
導出默認 PlaybackRateMenuButton;