fix(person-mention): respect modified-click and middle-click for new-tab nav
Felix #7: handleMentionClick unconditionally preventDefault'd and goto'd, breaking ctrl-click / cmd-click / shift-click / alt-click / middle-click — "open in new tab" is a real workflow for researchers comparing two persons. Add isPlainPrimaryClick() guard. Modified clicks fall through to the browser's default anchor handling (the <a href="/persons/{id}"> opens in the new tab as expected). Plain left-clicks still SPA-navigate via goto(). Three new tests assert ctrl-click, meta-click, and middle-click are not preventDefault'd. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -143,7 +143,18 @@ function handleMentionLeave(event: Event) {
|
||||
activeCard = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modified clicks (ctrl/meta/shift/alt) and middle-clicks must fall through to
|
||||
* the browser's default anchor behaviour so users can open the person page in
|
||||
* a new tab/window. Felix #7. Only the plain primary-button click navigates
|
||||
* via SPA goto().
|
||||
*/
|
||||
function isPlainPrimaryClick(event: MouseEvent): boolean {
|
||||
return event.button === 0 && !event.ctrlKey && !event.metaKey && !event.shiftKey && !event.altKey;
|
||||
}
|
||||
|
||||
async function handleMentionClick(event: MouseEvent) {
|
||||
if (!isPlainPrimaryClick(event)) return;
|
||||
const link = event.target as HTMLAnchorElement;
|
||||
const personId = link.dataset.personId;
|
||||
if (!personId) return;
|
||||
|
||||
Reference in New Issue
Block a user