@7sage/vidstack
Version:
UI component library for building high-quality, accessible video and audio experiences on the web.
59 lines (56 loc) • 1.62 kB
JavaScript
import { listenEvent, scoped, getScope, isString } from './vidstack-BGSTndAW.js';
function findActiveCue(cues, time) {
for (let i = 0, len = cues.length; i < len; i++) {
if (isCueActive(cues[i], time)) return cues[i];
}
return null;
}
function isCueActive(cue, time) {
return time >= cue.startTime && time < cue.endTime;
}
function watchActiveTextTrack(tracks, kind, onChange) {
let currentTrack = null, scope = getScope();
function onModeChange() {
const kinds = isString(kind) ? [kind] : kind, track = tracks.toArray().find((track2) => kinds.includes(track2.kind) && track2.mode === "showing");
if (track === currentTrack) return;
if (!track) {
onChange(null);
currentTrack = null;
return;
}
if (track.readyState == 2) {
onChange(track);
} else {
onChange(null);
scoped(() => {
const off = listenEvent(
track,
"load",
() => {
onChange(track);
off();
},
{ once: true }
);
}, scope);
}
currentTrack = track;
}
onModeChange();
return listenEvent(tracks, "mode-change", onModeChange);
}
function watchCueTextChange(tracks, kind, callback) {
watchActiveTextTrack(tracks, kind, (track) => {
if (!track) {
callback("");
return;
}
const onCueChange = () => {
const activeCue = track?.activeCues[0];
callback(activeCue?.text || "");
};
onCueChange();
listenEvent(track, "cue-change", onCueChange);
});
}
export { findActiveCue, isCueActive, watchActiveTextTrack, watchCueTextChange };