/**
 * @Datei video-track-list.js
 * /
importiere TrackList von './track-list';

/**
 * Heben Sie die Auswahl aller anderen ausgewählten {@link VideoTrack}s auf.
 *
 * @param {VideoTrackList} list
 *        zu bearbeitende Liste
 *
 * @param {VideoTrack} track
 *        Der zu überspringende Titel
 *
 * @privat
 * /
const disableOthers = function(list, track) {
  for (let i = 0; i < list.length; i++) {
    if (!Object.keys(list[i]).length || track.id === list[i].id) {
      weiter;
    }
    // eine andere Videospur ist aktiviert, deaktivieren Sie sie
    list[i].selected = false;
  }
};

/**
 * Die aktuelle Liste von {@link VideoTrack} für ein Video.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
 * @erweitert TrackList
 * /
class VideoTrackList extends TrackList {

  /**
   * Erstellen Sie eine Instanz dieser Klasse.
   *
   * @param {VideoTrack[]} [tracks=[]]
   *        Eine Liste von `VideoTrack`, mit der die Liste instanziiert wird.
   * /
  constructor(tracks = []) {
    // Sicherstellen, dass nur 1 Spur aktiviert ist
    // sortiert vom letzten Index zum ersten Index
    for (let i = tracks.length - 1; i >= 0; i--) {
      if (tracks[i].selected) {
        disableOthers(tracks, tracks[i]);
        pause;
      }
    }

    super(tracks);
    this.changing_ = false;

    /**
     * @Mitglied {Nummer} VideoTrackList#selectedIndex
     *         Der aktuelle Index des ausgewählten {@link VideoTrack`}.
     * /
    Object.defineProperty(this, 'selectedIndex', {
      get() {
        for (let i = 0; i < this.length; i++) {
          if (this[i].selected) {
            rückgabe i;
          }
        }
        rückgabe -1;
      },
      set() {}
    });
  }

  /**
   * Hinzufügen eines {@link VideoTrack} zur `VideoTrackList`.
   *
   * @param {VideoTrack} track
   *        Der VideoTrack zum Hinzufügen in die Liste
   *
   * @fires TrackList#addtrack
   * /
  addTrack(track) {
    if (track.selected) {
      disableOthers(this, track);
    }

    super.addTrack(track);
    // native Tracks haben dies nicht
    if (!track.addEventListener) {
      rückkehr;
    }

    track.selectedChange_ = () => {
      if (this.changing_) {
        rückkehr;
      }
      this.changing_ = true;
      disableOthers(this, track);
      this.changing_ = false;
      this.trigger('change');
    };

    /**
     * @listens VideoTrack#selectedchange
     * @brände TrackList#ändern
     * /
    track.addEventListener('selectedchange', track.selectedChange_);
  }

  removeTrack(rtrack) {
    super.removeTrack(rtrack);

    if (rtrack.removeEventListener && rtrack.selectedChange_) {
      rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
      rtrack.selectedChange_ = null;
    }
  }
}

standard VideoTrackList exportieren;