Files
NodecastV2/public/js/components/PlayerFullscreen.js

32 lines
1.7 KiB
JavaScript

/** Invoke fullscreen synchronously within the click/keyboard gesture, then handle its promise. */
const PlayerFullscreen = {
async toggle(video, container, doc = document) {
try {
if (doc.fullscreenElement && doc.exitFullscreen) {
await doc.exitFullscreen();
} else if (doc.webkitFullscreenElement && doc.webkitExitFullscreen) {
await doc.webkitExitFullscreen();
} else if (video?.webkitDisplayingFullscreen && video.webkitExitFullscreen) {
await video.webkitExitFullscreen();
} else {
const target = container || video;
// Some iPhones expose element methods even though element fullscreen is disabled.
const standard = doc.fullscreenEnabled === true ||
(doc.fullscreenEnabled === undefined && !video?.webkitEnterFullscreen);
const prefixed = doc.webkitFullscreenEnabled === true ||
(doc.webkitFullscreenEnabled === undefined && doc.fullscreenEnabled !== false && !video?.webkitEnterFullscreen);
if (standard && target?.requestFullscreen) await target.requestFullscreen();
else if (prefixed && target?.webkitRequestFullscreen) await target.webkitRequestFullscreen();
else if (video?.webkitEnterFullscreen) await video.webkitEnterFullscreen();
else return false;
}
return true;
} catch (error) {
console.error('Fullscreen failed:', error.message);
return false;
}
}
};
if (typeof window !== 'undefined') window.PlayerFullscreen = PlayerFullscreen;
if (typeof module !== 'undefined') module.exports = PlayerFullscreen;