feat preview: add support for youtube clips (#6942)

This commit is contained in:
Pranav Joglekar
2024-05-27 18:07:39 +05:30
committed by GitHub
parent e3837f6ad5
commit 20642f4225

View File

@@ -5,24 +5,30 @@ import { EmbedProps as Props } from ".";
function YouTube({ matches, ...props }: Props) {
const videoId = matches[1];
let start;
let src;
try {
const url = new URL(props.attrs.href);
const searchParams = new URLSearchParams(url.search);
start = searchParams.get("t")?.replace(/s$/, "");
const start = searchParams.get("t")?.replace(/s$/, "");
// Youtube returns the url in a html encoded format where
// '&' is replaced by '&'. So we also check if the search params
// contain html encoded query params.
const clip = (
searchParams.get("clip") || searchParams.get("amp;clip")
)?.replace(/s$/, "");
const clipt = (
searchParams.get("clipt") || searchParams.get("amp;clipt")
)?.replace(/s$/, "");
src = `https://www.youtube.com/embed/${videoId}?modestbranding=1${
start ? `&start=${start}` : ""
}${clip ? `&clip=${clip}` : ""}${clipt ? `&clipt=${clipt}` : ""}`;
} catch (_e) {
// noop
}
return (
<Frame
{...props}
src={`https://www.youtube.com/embed/${videoId}?modestbranding=1${
start ? `&start=${start}` : ""
}`}
title={`YouTube (${videoId})`}
/>
);
return <Frame {...props} src={src} title={`YouTube (${videoId})`} />;
}
export default YouTube;