画面上でのテストは完了. 移行にす早さが求められるので,準備ができたらマージする. Reviewed-on: #430 Co-authored-by: miteruzo <miteruzo@naver.com>
このコミットはプルリクエスト #430 でマージされました。
このコミットが含まれているのは:
@@ -1,4 +1,52 @@
|
||||
import { useMemo } from 'react'
|
||||
import { useLocation } from 'react-router-dom'
|
||||
|
||||
import PrefetchLink from '@/components/PrefetchLink'
|
||||
|
||||
import type { MDXComponents } from 'mdx/types'
|
||||
import type { ComponentProps } from 'react'
|
||||
|
||||
|
||||
export const useMDXComponents = (): MDXComponents => ({ })
|
||||
const MDXLink = (
|
||||
{ href, children, ...props }: ComponentProps<'a'>,
|
||||
) => {
|
||||
const location = useLocation ()
|
||||
const url = useMemo (() => {
|
||||
try
|
||||
{
|
||||
const base = new URL (location.pathname + location.search, window.location.origin)
|
||||
return href ? new URL (href, base) : null
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null
|
||||
}
|
||||
}, [href, location.pathname, location.search])
|
||||
const internal = url != null
|
||||
&& url.origin === window.location.origin
|
||||
&& (url.protocol === 'http:' || url.protocol === 'https:')
|
||||
const anchor = href?.startsWith ('#')
|
||||
|| (url?.pathname === location.pathname
|
||||
&& url.search === location.search && Boolean (url.hash))
|
||||
const external = url != null && !(internal)
|
||||
&& (url.protocol === 'http:' || url.protocol === 'https:')
|
||||
|
||||
if (internal && !(anchor) && props.download == null)
|
||||
{
|
||||
return (
|
||||
<PrefetchLink to={url.pathname + url.search + url.hash} {...props}>
|
||||
{children}
|
||||
</PrefetchLink>)
|
||||
}
|
||||
|
||||
return (
|
||||
<a href={href}
|
||||
{...props}
|
||||
target={external ? props.target ?? '_blank' : props.target}
|
||||
rel={props.rel ?? 'noopener noreferrer'}>
|
||||
{children}
|
||||
</a>)
|
||||
}
|
||||
|
||||
|
||||
export const useMDXComponents = (): MDXComponents => ({ a: MDXLink })
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする