Manav Rathi
2025-04-02 10:26:44 +05:30
parent b9bb7c074d
commit 6bbfcb1d13

View File

@@ -544,6 +544,24 @@ export class FileViewerPhotoSwipe {
video.style.height = `${height}px`;
});
/**
* Get the video element, if any, that is a descendant of the given HTML
* element.
*
* While the return type is an {@link HTMLVideoElement}, the result can
* also be an instance of a media-chrome `CustomVideoElement`,
* specifically a {@link HlsVideoElement}.
* https://github.com/muxinc/media-elements/blob/main/packages/hls-video-element/hls-video-element.js#L284
*
* The media-chrome `CustomVideoElement`s provide the same API as the
* browser's built-in {@link HTMLVideoElement}s, so we can use the same
* methods on them.
*
* For ergonomic use at call sites, it accepts an optional.
*/
const queryVideoElement = (element: HTMLElement | undefined) =>
element?.querySelector<HTMLVideoElement>("video, hls-video");
pswp.on("contentDeactivate", (e) => {
// Reset failures, if any, for this file so that the fetch is tried
// again when we come back to it^.
@@ -558,9 +576,7 @@ export class FileViewerPhotoSwipe {
// Pause the video element, if any, when we move away from the
// slide.
const video = e.content.slide?.container.querySelector(
"video, hls-video",
) as HTMLVideoElement | null;
const video = queryVideoElement(e.content.slide?.container);
video?.pause();
});
@@ -580,6 +596,8 @@ export class FileViewerPhotoSwipe {
/**
* If the current slide is showing a video, then the DOM video element
* showing that video.
*
* See also {@link queryVideoElement}.
*/
let videoVideoEl: HTMLVideoElement | undefined;
@@ -634,7 +652,7 @@ export class FileViewerPhotoSwipe {
// It works subsequently, which is why, e.g., we can use it to
// pause the video in "contentDeactivate".
const contentElement = pswp.currSlide?.content.element;
videoVideoEl = contentElement?.getElementsByTagName("video")[0];
videoVideoEl = queryVideoElement(contentElement) ?? undefined;
if (videoVideoEl) {
onVideoPlayback = () =>