_includes/video/VideoPlayer.11ty.tsx (55 lines of code) (raw):
export type VideoPlayerProps = {
source: string | { url: string; start: number; end: number };
width?: number;
height?: number;
vertical?: boolean;
};
const VideoPlayer = ({
source,
width,
height,
vertical,
}: VideoPlayerProps): JSX.Element => {
const { url, start, end } =
typeof source === "string"
? { url: source, start: undefined, end: undefined }
: { url: source.url, start: source.start, end: source.end };
let ratio = `"ratio": "${vertical ? "9:16" : "16:9"}"`;
let plyrConfig = `\{${ratio}\}`;
if (url.endsWith(".webm")) {
let style = "aspect-ratio:" + (vertical ? "9/16" : "16/9") + ";";
if (width) {
style += `max-width: ${width}px;`;
}
if (height) {
style += `max-height: ${height}px;`;
}
return (
<div style={style}>
<video
class="video-player"
playsinline
controls
data-start={start}
data-end={end}
data-plyr-config={plyrConfig}
>
<source src={url} type="video/webm" />
</video>
</div>
);
} else {
return (
<div
title="Video Player"
class="video-player"
data-start={start}
data-end={end}
data-plyr-provider="youtube"
data-plyr-config={plyrConfig}
data-plyr-embed-id={`${url}?iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1`}
></div>
);
}
};
export default VideoPlayer;