From cf4e412ab863d6f53213a459d5a6c8a747ae88a3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 21 Feb 2026 09:37:35 +0200 Subject: [PATCH] fix(geomap): read-only map pin click broken (closes #8755) --- apps/client/src/services/note_tooltip.ts | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/client/src/services/note_tooltip.ts b/apps/client/src/services/note_tooltip.ts index 60af420468..23263966e2 100644 --- a/apps/client/src/services/note_tooltip.ts +++ b/apps/client/src/services/note_tooltip.ts @@ -1,20 +1,20 @@ -import treeService from "./tree.js"; -import linkService from "./link.js"; -import froca from "./froca.js"; -import utils from "./utils.js"; -import attributeRenderer from "./attribute_renderer.js"; -import contentRenderer from "./content_renderer.js"; import appContext from "../components/app_context.js"; import type FNote from "../entities/fnote.js"; +import attributeRenderer from "./attribute_renderer.js"; +import contentRenderer from "./content_renderer.js"; +import froca from "./froca.js"; import { t } from "./i18n.js"; +import linkService from "./link.js"; +import treeService from "./tree.js"; +import utils from "./utils.js"; // Track all elements that open tooltips let openTooltipElements: JQuery[] = []; let dismissTimer: ReturnType; function setupGlobalTooltip() { - $(document).on("mouseenter", "a:not(.no-tooltip-preview)", mouseEnterHandler); - $(document).on("mouseenter", "[data-href]:not(.no-tooltip-preview)", mouseEnterHandler); + $(document).on("pointerenter", "a:not(.no-tooltip-preview)", mouseEnterHandler); + $(document).on("pointerenter", "[data-href]:not(.no-tooltip-preview)", mouseEnterHandler); // close any note tooltip after click, this fixes the problem that sometimes tooltips remained on the screen $(document).on("click", (e) => { @@ -37,10 +37,12 @@ function dismissAllTooltips() { } function setupElementTooltip($el: JQuery) { - $el.on("mouseenter", mouseEnterHandler); + $el.on("pointerenter", mouseEnterHandler); } -async function mouseEnterHandler(this: HTMLElement) { +async function mouseEnterHandler(this: HTMLElement, e: JQuery.TriggeredEvent) { + if (e.pointerType !== "mouse") return; + const $link = $(this); if ($link.hasClass("no-tooltip-preview") || $link.hasClass("disabled")) { @@ -91,7 +93,7 @@ async function mouseEnterHandler(this: HTMLElement) { } const html = `
${content}
`; - const tooltipClass = "tooltip-" + Math.floor(Math.random() * 999_999_999); + const tooltipClass = `tooltip-${ Math.floor(Math.random() * 999_999_999)}`; // we need to check if we're still hovering over the element // since the operation to get tooltip content was async, it is possible that @@ -224,7 +226,7 @@ function renderFootnoteOrAnchor($link: JQuery, url: string) { } let footnoteContent = $targetContent.html(); - footnoteContent = `
${footnoteContent}
` + footnoteContent = `
${footnoteContent}
`; return footnoteContent || ""; }