Fix safe login submission, mobile fullscreen, and OIDC discovery
This commit is contained in:
31
public/js/components/PlayerFullscreen.js
Normal file
31
public/js/components/PlayerFullscreen.js
Normal file
@ -0,0 +1,31 @@
|
||||
/** 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;
|
||||
@ -422,25 +422,7 @@ class VideoPlayer {
|
||||
* Toggle fullscreen mode (cross-browser including Safari)
|
||||
*/
|
||||
toggleFullscreen() {
|
||||
const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement;
|
||||
|
||||
if (isFullscreen) {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
}
|
||||
} else {
|
||||
const element = this.container;
|
||||
if (element.requestFullscreen) {
|
||||
element.requestFullscreen().catch(err => console.error('Fullscreen error:', err));
|
||||
} else if (element.webkitRequestFullscreen) {
|
||||
element.webkitRequestFullscreen();
|
||||
} else if (this.video.webkitEnterFullscreen) {
|
||||
// iOS Safari: use native video fullscreen
|
||||
this.video.webkitEnterFullscreen();
|
||||
}
|
||||
}
|
||||
return PlayerFullscreen.toggle(this.video, this.container, document);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1306,17 +1288,6 @@ class VideoPlayer {
|
||||
window.app.channelList.selectChannel({ channelId: channels[nextIdx].id });
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle fullscreen
|
||||
*/
|
||||
toggleFullscreen() {
|
||||
if (document.fullscreenElement) {
|
||||
document.exitFullscreen();
|
||||
} else if (this.container) {
|
||||
this.container.requestFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
async zapBeforeStreaming(channel, streamUrl, signal) {
|
||||
if (!channel?.zapBeforeStreaming) return;
|
||||
if (!channel?.streamId || !streamUrl) return;
|
||||
|
||||
Reference in New Issue
Block a user