From af49171cb9df5c4c92a148ebb736213e97384668 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 30 Sep 2022 19:52:41 -0500 Subject: [PATCH] fullscreen.js --> fullscreen.ts --- .../ui/util/{fullscreen.js => fullscreen.ts} | 34 +++++++++++++------ app/soapbox/features/video/index.tsx | 2 +- 2 files changed, 24 insertions(+), 12 deletions(-) rename app/soapbox/features/ui/util/{fullscreen.js => fullscreen.ts} (57%) diff --git a/app/soapbox/features/ui/util/fullscreen.js b/app/soapbox/features/ui/util/fullscreen.ts similarity index 57% rename from app/soapbox/features/ui/util/fullscreen.js rename to app/soapbox/features/ui/util/fullscreen.ts index cf5d0cf98..5e13d68cc 100644 --- a/app/soapbox/features/ui/util/fullscreen.js +++ b/app/soapbox/features/ui/util/fullscreen.ts @@ -1,31 +1,43 @@ // APIs for normalizing fullscreen operations. Note that Edge uses // the WebKit-prefixed APIs currently (as of Edge 16). -export const isFullscreen = () => document.fullscreenElement || - document.webkitFullscreenElement || - document.mozFullScreenElement; +export const isFullscreen = (): boolean => { + return Boolean( + document.fullscreenElement || + // @ts-ignore + document.webkitFullscreenElement || + // @ts-ignore + document.mozFullScreenElement, + ); +}; -export const exitFullscreen = () => { +export const exitFullscreen = (): void => { if (document.exitFullscreen) { document.exitFullscreen(); - } else if (document.webkitExitFullscreen) { + } else if ('webkitExitFullscreen' in document) { + // @ts-ignore document.webkitExitFullscreen(); - } else if (document.mozCancelFullScreen) { + } else if ('mozCancelFullScreen' in document) { + // @ts-ignore document.mozCancelFullScreen(); } }; -export const requestFullscreen = el => { +export const requestFullscreen = (el: Element): void => { if (el.requestFullscreen) { el.requestFullscreen(); - } else if (el.webkitRequestFullscreen) { + } else if ('webkitRequestFullscreen' in el) { + // @ts-ignore el.webkitRequestFullscreen(); - } else if (el.mozRequestFullScreen) { + } else if ('mozRequestFullScreen' in el) { + // @ts-ignore el.mozRequestFullScreen(); } }; -export const attachFullscreenListener = (listener) => { +type FullscreenListener = (this: Document, ev: Event) => void; + +export const attachFullscreenListener = (listener: FullscreenListener): void => { if ('onfullscreenchange' in document) { document.addEventListener('fullscreenchange', listener); } else if ('onwebkitfullscreenchange' in document) { @@ -35,7 +47,7 @@ export const attachFullscreenListener = (listener) => { } }; -export const detachFullscreenListener = (listener) => { +export const detachFullscreenListener = (listener: FullscreenListener): void => { if ('onfullscreenchange' in document) { document.removeEventListener('fullscreenchange', listener); } else if ('onwebkitfullscreenchange' in document) { diff --git a/app/soapbox/features/video/index.tsx b/app/soapbox/features/video/index.tsx index 503d0105c..736fe8114 100644 --- a/app/soapbox/features/video/index.tsx +++ b/app/soapbox/features/video/index.tsx @@ -368,7 +368,7 @@ const Video: React.FC = ({ const toggleFullscreen = () => { if (isFullscreen()) { exitFullscreen(); - } else { + } else if (player.current) { requestFullscreen(player.current); } };