diff options
author | dan <dan.abramov@gmail.com> | 2024-02-07 03:45:16 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-06 19:45:16 -0800 |
commit | dc6603a1b978122238108792c9de2d4f3b040396 (patch) | |
tree | 32b5ff6e2618e6840148d16a0429b527b477d968 /src | |
parent | 76811657e8bc30d57a084a050c2706f7bb0a4e8e (diff) | |
download | voidsky-dc6603a1b978122238108792c9de2d4f3b040396.tar.zst |
Fix open-in-new-tab for TextLink (#2773)
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/util/Link.tsx | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx index afbdeb8f4..d52d3c0e6 100644 --- a/src/view/com/util/Link.tsx +++ b/src/view/com/util/Link.tsx @@ -197,6 +197,15 @@ export const TextLink = memo(function TextLink({ href, }) } + if ( + isWeb && + href !== '#' && + e != null && + isModifiedEvent(e as React.MouseEvent) + ) { + // Let the browser handle opening in new tab etc. + return + } if (onPress) { e?.preventDefault?.() // @ts-ignore function signature differs by platform -prf @@ -382,3 +391,16 @@ function onPressInner( } } } + +function isModifiedEvent(e: React.MouseEvent): boolean { + const eventTarget = e.currentTarget as HTMLAnchorElement + const target = eventTarget.getAttribute('target') + return ( + (target && target !== '_self') || + e.metaKey || + e.ctrlKey || + e.shiftKey || + e.altKey || + (e.nativeEvent && e.nativeEvent.which === 2) + ) +} |