Fix safe login submission, mobile fullscreen, and OIDC discovery

This commit is contained in:
Technomancer702
2026-10-13 18:31:48 -07:00
parent b85b160013
commit ce122eb34b
16 changed files with 479 additions and 72 deletions

View 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;

View File

@ -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;

View File

@ -756,25 +756,7 @@ class WatchPage {
}
toggleFullscreen() {
const container = document.querySelector('.watch-video-section');
const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement;
if (isFullscreen) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
} else {
if (container?.requestFullscreen) {
container.requestFullscreen();
} else if (container?.webkitRequestFullscreen) {
container.webkitRequestFullscreen();
} else if (this.video?.webkitEnterFullscreen) {
// iOS Safari: use native video fullscreen
this.video.webkitEnterFullscreen();
}
}
return PlayerFullscreen.toggle(this.video, document.querySelector('.watch-video-section'), document);
}
async togglePictureInPicture() {