vidstack
Version:
Build awesome media experiences on the web.
62 lines (59 loc) • 1.64 kB
JavaScript
import { listenEvent } from 'maverick.js/std';
import { N as LIST_ADD, W as LIST_REMOVE, L as LIST_SELECT } from '../../media-core.js';
class NativeAudioTracks {
constructor(_provider, _context) {
this.q = _provider;
this.ph = _context;
this.ri.onaddtrack = this.ti.bind(this);
this.ri.onremovetrack = this.ui.bind(this);
this.ri.onchange = this.vi.bind(this);
listenEvent(this.ph.audioTracks, "change", this.wi.bind(this));
}
get ri() {
return this.q.media.audioTracks;
}
ti(event) {
const _track = event.track;
if (_track.label === "")
return;
const audioTrack = {
id: _track.id + "",
label: _track.label,
language: _track.language,
kind: _track.kind,
selected: false
};
this.ph.audioTracks[LIST_ADD](audioTrack, event);
if (_track.enabled)
audioTrack.selected = true;
}
ui(event) {
const track = this.ph.audioTracks.getById(event.track.id);
if (track)
this.ph.audioTracks[LIST_REMOVE](track, event);
}
vi(event) {
let enabledTrack = this.si();
if (!enabledTrack)
return;
const track = this.ph.audioTracks.getById(enabledTrack.id);
if (track)
this.ph.audioTracks[LIST_SELECT](track, true, event);
}
si() {
return Array.from(this.ri).find((track) => track.enabled);
}
wi(event) {
const { current } = event.detail;
if (!current)
return;
const track = this.ri.getTrackById(current.id);
if (track) {
const prev = this.si();
if (prev)
prev.enabled = false;
track.enabled = true;
}
}
}
export { NativeAudioTracks as N };