about summary refs log tree commit diff
path: root/src/view/com/util/Link.tsx
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-02-07 03:45:16 +0000
committerGitHub <noreply@github.com>2024-02-06 19:45:16 -0800
commitdc6603a1b978122238108792c9de2d4f3b040396 (patch)
tree32b5ff6e2618e6840148d16a0429b527b477d968 /src/view/com/util/Link.tsx
parent76811657e8bc30d57a084a050c2706f7bb0a4e8e (diff)
downloadvoidsky-dc6603a1b978122238108792c9de2d4f3b040396.tar.zst
Fix open-in-new-tab for TextLink (#2773)
Diffstat (limited to 'src/view/com/util/Link.tsx')
-rw-r--r--src/view/com/util/Link.tsx22
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)
+  )
+}