diff --git a/app/src/dialog/tooltip.ts b/app/src/dialog/tooltip.ts index d10db5ef575..d5a77d86f97 100644 --- a/app/src/dialog/tooltip.ts +++ b/app/src/dialog/tooltip.ts @@ -13,6 +13,20 @@ export const showTooltip = ( if (isMobile() || !message) { return; } + const messageElement = document.getElementById("tooltip"); + const showDetail = { + message, + target, + tooltipElement: messageElement, + }; + window.siyuan.ws.app.plugins.forEach(plugin => { + plugin.eventBus.emit("before-show-tooltip", showDetail); + }); + message = showDetail.message; + if (!message) { + hideTooltip(); + return; + } tooltipTargetElement = target; let targetRect = target.getBoundingClientRect(); // 跨行元素 @@ -40,7 +54,6 @@ export const showTooltip = ( hideTooltip(); return; } - const messageElement = document.getElementById("tooltip"); messageElement.className = tooltipClass ? `tooltip tooltip--${tooltipClass}` : "tooltip"; messageElement.innerHTML = window.DOMPurify.sanitize(message); // 避免原本的 top 和 left 影响计算 @@ -138,5 +151,14 @@ export const showTooltip = ( export const hideTooltip = () => { tooltipTargetElement = null; - document.getElementById("tooltip").classList.add("fn__none"); + const messageElement = document.getElementById("tooltip"); + if (messageElement.classList.contains("fn__none")) { + return; + } + window.siyuan.ws.app.plugins.forEach(plugin => { + plugin.eventBus.emit("before-hide-tooltip", { + tooltipElement: messageElement, + }); + }); + messageElement.classList.add("fn__none"); }; diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index dc372dab0fa..623bacaf05b 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -93,7 +93,8 @@ type TEventBus = "ws-main" | "sync-start" | "sync-end" | "sync-fail" | "lock-screen" | "mobile-keyboard-show" | "mobile-keyboard-hide" | "code-language-update" | "code-language-change" | - "kernel-plugin-state-change" + "kernel-plugin-state-change" | + "before-show-tooltip" | "before-hide-tooltip" type TAVView = "table" | "gallery" | "kanban" type TAVCol = "text"