fix: properly handle svg anchor elements

pull/3989/head
Divyansh Singh 3 months ago
parent 8538e22f2c
commit b785bd6ab3

@ -174,36 +174,39 @@ export function createRouter(
window.addEventListener(
'click',
(e) => {
// temporary fix for docsearch action buttons
const button = (e.target as Element).closest('button')
if (button) return
if (
e.defaultPrevented ||
!(e.target instanceof Element) ||
e.target.closest('button') || // temporary fix for docsearch action buttons
e.button !== 0 ||
e.ctrlKey ||
e.shiftKey ||
e.altKey ||
e.metaKey
)
return
const link = (e.target as Element | SVGElement).closest<
HTMLAnchorElement | SVGAElement
>('a')
const link = e.target.closest<HTMLAnchorElement | SVGAElement>('a')
if (
link &&
!link.closest('.vp-raw') &&
(link instanceof SVGElement || !link.download)
) {
const { target } = link
const linkHref = link.getAttribute('href')
!link ||
link.closest('.vp-raw') ||
link.hasAttribute('download') ||
link.hasAttribute('target')
)
return
const linkHref =
link.getAttribute('href') ??
(link instanceof SVGAElement ? link.getAttribute('xlink:href') : null)
if (linkHref == null) return
const { href, origin, pathname, hash, search } = new URL(
linkHref,
link.baseURI
)
const currentUrl = new URL(location.href) // copy to keep old data
// only intercept inbound html links
if (
!e.ctrlKey &&
!e.shiftKey &&
!e.altKey &&
!e.metaKey &&
!target &&
origin === currentUrl.origin &&
treatAsHtml(pathname)
) {
if (origin === currentUrl.origin && treatAsHtml(pathname)) {
e.preventDefault()
if (
pathname === currentUrl.pathname &&
@ -231,7 +234,6 @@ export function createRouter(
go(href)
}
}
}
},
{ capture: true }
)

Loading…
Cancel
Save