/**
* @file video-track-list.js
*/
從 './track-list' 導入 TrackList;
/**
* 取消選擇所有其他已選擇的 {@link VideoTrack}。
*
* @param {VideoTrackList} 列表
* 工作清單
*
* @param {VideoTrack} 軌道
* 要跳過的曲目
*
* @私人的
*/
const disableOthers = function(list, track) {
為 (讓我 = 0; 我 < 列出. 長度; 我 ++) {
如果(!對象鍵(列表 [I])。長度 || 跟踪 ID === 列表 [我] .id){
繼續;
}
// 啟用另一個視頻軌道,禁用它
列表[i].selected = false;
}
};
/**
* 視頻的當前 {@link VideoTrack} 列表。
*
* @see [規範]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
* @extends 曲目列表
*/
類 VideoTrackList 擴展 TrackList {
/**
* 創建此類的一個實例。
*
* @param {VideoTrack[]} [tracks=[]]
* 用於實例化列表的 `VideoTrack` 列表。
*/
構造函數(軌道= []){
// 確保只啟用了 1 個軌道
// 從最後一個索引到第一個索引排序
對於(讓 i = tracks.length - 1; i >= 0; i--){
如果(曲目[i].selected){
禁用其他(曲目,曲目[i]);
休息;
}
}
超級(曲目);
this.changing_ = false;
/**
* @member {number} VideoTrackList#selectedIndex
* 所選 {@link VideoTrack`} 的當前索引。
*/
Object.defineProperty(this, 'selectedIndex', {
得到() {
對於(讓我 = 0; 我 < 這是。長度; 我 ++){
如果(這個[我]。選擇){
返回我;
}
}
返回-1;
},
放() {}
});
}
/**
* 添加一個 {@link VideoTrack} 到 `VideoTrackList`。
*
* @param {VideoTrack} 軌道
* 添加到列表中的 VideoTrack
*
* @fires TrackList#addtrack
*/
添加軌道(軌道){
如果(track.selected){
禁用其他(這,跟踪);
}
super.addTrack(軌道);
// 本機曲目沒有這個
如果(!track.addEventListener){
返回;
}
track.selectedChange_ = () => {
如果(this.changing_){
返回;
}
this.changing_ = true;
禁用其他(這,跟踪);
this.changing_ = false;
this.trigger('改變');
};
/**
* @listens VideoTrack#selectedchange
* @fires 曲目列表#change
*/
track.addEventListener('selectedchange', track.selectedChange_);
}
removeTrack(rtrack){
super.removeTrack(rtrack);
如果(rtrack.removeEventListener && rtrack.selectedChange_){
rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
rtrack.selectedChange_ = null;
}
}
}
導出默認的 VideoTrackList;