/**
 * @file 菜單項.js
 */
從 '../clickable-component.js' 導入 ClickableComponent;
從 '../component.js' 導入組件;
從'../utils/obj'導入{assign};
從 './menu-keys.js' 導入 {MenuKeys};
從“鍵碼”導入鍵碼;
從'../utils/dom.js'導入{createEl};

/**
 * 菜單項的組件。 `<li>`
 *
 * @extends 可點擊組件
 */
類 MenuItem 擴展 ClickableComponent {

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

    this.selectable = options.selectable;
    this.isSelected_ = options.selected ||錯誤的;
    this.multiSelectable = options.multiSelectable;

    this.selected(this.isSelected_);

    如果(this.selectable){
      如果(this.multiSelectable){
        this.el_.setAttribute('角色', 'menuitemcheckbox');
      }其他{
        this.el_.setAttribute('角色', 'menuitemradio');
      }
    }其他{
      this.el_.setAttribute('角色', '菜單項');
    }
  }

  /**
   * 創建 `MenuItem 的 DOM 元素
   *
   * @param {字符串} [type=li]
   * 元素的節點類型,未實際使用,始終設置為 `li`。
   *
   * @param {對象} [道具={}]
   * 應在元素上設置的屬性對象
   *
   * @param {對象} [屬性={}]
   * 應在元素上設置的屬性對象
   *
   * @return {元素}
   * 被創建的元素。
   */
  createEl(類型,道具,屬性){
    // 控件是文本的,而不僅僅是一個圖標
    this.nonIconControl = true;

    const el = super.createEl('li', assign({
      類名:'vjs-菜單項',
      選項卡索引:-1
    }, 道具), 屬性);

    // 將圖標與菜單項文本交換。
    el.replaceChild(createEl('span', {
      className: 'vjs-menu-item-text',
      文本內容:this.localize(this.options_.label)
    }), el.querySelector('.vjs-icon-placeholder'));

    返回 el;
  }

  /**
   * 忽略菜單使用的鍵,但傳遞任何其他鍵。看
   * {@link ClickableComponent#handleKeyDown} 用於調用它的實例。
   *
   * @param {EventTarget~Event} 事件
   * 導致調用此函數的 `keydown` 事件。
   *
   * @listens 按鍵
   */
  handleKeyDown(事件){
    如果 (!MenuKeys.some((key) => keycode.isEventKey(event, key))) {
      // 為未使用的鍵傳遞 keydown 處理
      super.handleKeyDown(事件);
    }
  }

  /**
   * 任何點擊 `MenuItem` 都會將其置於選中狀態。
   * 請參閱 {@link ClickableComponent#handleClick} 以了解調用此方法的實例。
   *
   * @param {EventTarget~Event} 事件
   * 導致此功能被執行的 `keydown`、`tap` 或 `click` 事件
   * 打電話。
   *
   * @listens 水龍頭
   * @listens 點擊
   */
  handleClick(事件){
    這個。選擇(真);
  }

  /**
   * 將此菜單項的狀態設置為選中或未選中。
   *
   * @param {boolean} 選中
   * 菜單項是否被選中
   */
  選擇(選擇){
    如果(this.selectable){
      如果(選擇){
        this.addClass('vjs-selected');
        this.el_.setAttribute('aria-checked', 'true');
        // 瀏覽器/屏幕閱讀器不完全支持 aria-checked,
        // 因此在控製文本中向屏幕閱讀器指示選定狀態。
        this.controlText(', selected');
        this.isSelected_ = true;
      }其他{
        this.removeClass('vjs-selected');
        this.el_.setAttribute('aria-checked', 'false');
        // 向屏幕閱讀器指示未選擇狀態
        this.controlText('');
        this.isSelected_ = false;
      }
    }
  }
}

Component.registerComponent('MenuItem', MenuItem);
導出默認菜單項;