diff --git a/site/components/MDX.js b/site/components/MDX.js index fe906ff..c704c05 100644 --- a/site/components/MDX.js +++ b/site/components/MDX.js @@ -1,37 +1,49 @@ -import Head from 'next/head' -import ReactPlayer from 'react-player/lazy' -import { Paragraph } from './Link' -import { NextSeo } from 'next-seo' -import siteConfig from "../config/siteConfig" +import Head from "next/head"; +import ReactPlayer from "react-player/lazy"; +import { Paragraph } from "./Link"; +import { NextSeo } from "next-seo"; +import siteConfig from "../config/siteConfig"; +import { YOUTUBE_REGEX } from "../lib/constants"; const components = { Head, - p: Paragraph -} + p: Paragraph, +}; export default function MdxPage({ children, editUrl }) { - const { Component, frontmatter: { - title, description, date, authors, youtube, podcast, image, _raw - }} = children + const { + Component, + frontmatter: { + title, + description, + date, + authors, + youtube, + podcast, + image, + _raw, + }, + } = children; - let youtubeThumnbnail - let podcastEmbed + let youtubeThumnbnail; + let podcastEmbed; - if (youtube && !image) { + if (youtube && YOUTUBE_REGEX.test(youtube) && !image) { // get the youtube thumbnail image from https://img.youtube.com/vi//maxresdefault.jpg - const regex = - /\www.youtube.com\/\embed\/|youtube.com\/\embed\/|youtu.be\/|\www.youtube.com\/\watch\?v=|\youtube.com\/\watch\?v=/; - youtubeThumnbnail = - youtube.replace(regex, "img.youtube.com/vi/") + "/maxresdefault.jpg"; + const youtubeId = youtube.split(/^|=|\//).pop(); + youtubeThumnbnail = youtube.replace( + YOUTUBE_REGEX, + `https://img.youtube.com/vi/${youtubeId}/maxresdefault.jpg` + ); } if (podcast && podcast.includes("life-itself")) { - const podcastUrl = podcast - podcastEmbed = ([ + const podcastUrl = podcast; + podcastEmbed = [ podcastUrl.slice(0, "https://anchor.fm/life-itself".length), "/embed", - podcastUrl.slice("https://anchor.fm/life-itself".length) - ].join("")) + podcastUrl.slice("https://anchor.fm/life-itself".length), + ].join(""); } const titleFromUrl = _raw.flattenedPath @@ -44,7 +56,9 @@ export default function MdxPage({ children, editUrl }) { const SeoTitle = title ?? titleFromUrl; const imageUrl = image ? siteConfig.url + image - : youtubeThumnbnail ? youtubeThumnbnail : null + : youtubeThumnbnail + ? youtubeThumnbnail + : null; return ( <> @@ -56,15 +70,15 @@ export default function MdxPage({ children, editUrl }) { title: SeoTitle, description: description, images: imageUrl - ? ([ + ? [ { url: imageUrl, width: 1200, height: 627, alt: title, - type: "image/png" + type: "image/png", }, - ]) + ] : siteConfig.nextSeo.openGraph.images, }} /> @@ -82,10 +96,8 @@ export default function MdxPage({ children, editUrl }) { on {date}

)} - {description && ( -

{description}

- )} - {youtube && ( + {description &&

{description}

} + {youtube && YOUTUBE_REGEX.test(youtube) && (
- -
- {editUrl && ( -
- - Edit this page - - - - - - -
)} + +
+ {editUrl && ( +
+ + Edit this page + + + + + + +
+ )}