diff --git a/app/src/block/popover.ts b/app/src/block/popover.ts index 5429e513c..73444ca5e 100644 --- a/app/src/block/popover.ts +++ b/app/src/block/popover.ts @@ -15,8 +15,8 @@ export const initBlockPopover = (app: App) => { return; } const aElement = hasClosestByAttribute(event.target, "data-type", "a", true) || - hasClosestByAttribute(event.target, "data-type", "url") || hasClosestByAttribute(event.target, "data-type", "tab-header") || + hasClosestByClassName(event.target, "av__celltext") || hasClosestByClassName(event.target, "ariaLabel") || hasClosestByAttribute(event.target, "data-type", "inline-memo"); if (aElement) { @@ -25,6 +25,9 @@ export const initBlockPopover = (app: App) => { if (hasClosestByAttribute(event.target, "data-type", "fold", true)) { tip = window.siyuan.languages.fold; } + if (aElement.classList.contains("av__celltext") && aElement.scrollWidth > aElement.parentElement.clientWidth - 11) { + tip = aElement.textContent; + } if (!tip) { tip = aElement.getAttribute("data-href"); const title = aElement.getAttribute("data-title"); @@ -159,8 +162,9 @@ const getTarget = (event: MouseEvent & { target: HTMLElement }, aElement: false if (!popoverTargetElement) { popoverTargetElement = hasClosestByClassName(event.target, "popover__block") as HTMLElement; } - if (!popoverTargetElement && aElement && aElement.getAttribute("data-href")?.startsWith("siyuan://blocks") && - aElement.getAttribute("prevent-popover") !== "true") { + if (!popoverTargetElement && aElement && ( + (aElement.getAttribute("data-href")?.startsWith("siyuan://blocks") && aElement.getAttribute("prevent-popover") !== "true") || + (aElement.classList.contains("av__celltext") && aElement.dataset.type === "url"))) { popoverTargetElement = aElement; } if (!popoverTargetElement || window.siyuan.altIsPressed || @@ -208,11 +212,12 @@ export const showPopover = async (app: App, showRef = false) => { }); ids = postResponse.data; } - } else if ( - popoverTargetElement.getAttribute("data-type")?.split(" ").includes("a") || - popoverTargetElement.getAttribute("data-type")?.split(" ").includes("url")) { + } else if (popoverTargetElement.getAttribute("data-type")?.split(" ").includes("a")) { // 以思源协议开头的链接 ids = [getIdFromSYProtocol(popoverTargetElement.getAttribute("data-href"))]; + } else if (popoverTargetElement.dataset.type === "url") { + // 在 database 的 url 列中以思源协议开头的链接 + ids = [getIdFromSYProtocol(popoverTargetElement.textContent.trim())]; } else { // pdf let targetId; diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index 1f4a9e317..5c85a5708 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -116,16 +116,13 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle const linkElement = hasClosestByClassName(event.target, "av__celltext--url"); if (linkElement) { - // let prefix = ""; - // if (linkElement.dataset.type === "phone") { - // prefix = "tel:"; - // } else if (linkElement.dataset.type === "email") { - // prefix = "mailto:"; - // } - // window.open(prefix + linkElement.textContent.trim()); - - let linkUrl = linkElement.getAttribute("data-href") - window.open(linkUrl.trim()); + let prefix = ""; + if (linkElement.dataset.type === "phone") { + prefix = "tel:"; + } else if (linkElement.dataset.type === "email") { + prefix = "mailto:"; + } + window.open(prefix + linkElement.textContent.trim()); event.preventDefault(); event.stopPropagation(); return true; diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index f0b2041d2..941eeece3 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -68,18 +68,8 @@ style="width: ${column.width || "200px"}">${getCalcValue(column) || '${cell.value?.text.content || ""}`; - } else if (cell.valueType === "url") { - text = `${cell.value ? cell.value[cell.valueType as "url"].content : ""}`; - if (cell.value && cell.value[cell.valueType as "url"].content) { - text += ``; - } - } else if (cell.valueType === "email") { - text = `${cell.value ? cell.value[cell.valueType as "url"].content : ""}`; - if (cell.value && cell.value[cell.valueType as "url"].content) { - text += ``; - } - } else if (cell.valueType === "phone") { - text = `${cell.value ? cell.value[cell.valueType as "url"].content : ""}`; + } else if (["url", "email", "phone"].includes(cell.valueType)) { + text = `${cell.value ? cell.value[cell.valueType as "url"].content : ""}`; if (cell.value && cell.value[cell.valueType as "url"].content) { text += ``; } diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts index 754536a9f..1e07b16f2 100644 --- a/app/src/protyle/wysiwyg/index.ts +++ b/app/src/protyle/wysiwyg/index.ts @@ -1640,11 +1640,16 @@ export class WYSIWYG { const range = getEditorRange(this.element); // 需放在嵌入块之前,否则嵌入块内的引用、链接、pdf 双链无法点击打开 https://ld246.com/article/1630479789513 const blockRefElement = hasClosestByAttribute(event.target, "data-type", "block-ref"); - let ifaElement = hasClosestByAttribute(event.target, "data-type", "a"); - const aElement = ifaElement ? ifaElement : hasClosestByAttribute(event.target, "data-type", "url") - if (blockRefElement || - (aElement && aElement.getAttribute("data-href").startsWith("siyuan://blocks/")) - ) { + const aElement = hasClosestByAttribute(event.target, "data-type", "a") || hasClosestByAttribute(event.target, "data-type", "url"); + let aLink = "" + if (aElement) { + if (aElement.classList.contains("av__celltext")) { + aLink = aElement.textContent.trim() + } else { + aLink = aElement.getAttribute("data-href") + } + } + if (blockRefElement || aLink.startsWith("siyuan://blocks/")) { event.stopPropagation(); event.preventDefault(); hideElements(["dialog", "toolbar"], protyle); @@ -1656,7 +1661,7 @@ export class WYSIWYG { if (blockRefElement) { refBlockId = blockRefElement.getAttribute("data-id"); } else if (aElement) { - refBlockId = aElement.getAttribute("data-href").substring(16, 38); + refBlockId = aLink.substring(16, 38); } fetchPost("/api/block/checkBlockFold", {id: refBlockId}, (foldResponse) => { @@ -1666,7 +1671,7 @@ export class WYSIWYG { hideKeyboardToolbar(); /// #else if (aElement) { - window.open(aElement.getAttribute("data-href")); + window.open(aLink); return; } if (event.shiftKey) { @@ -1743,7 +1748,7 @@ export class WYSIWYG { if (aElement && !event.altKey) { event.stopPropagation(); event.preventDefault(); - const linkAddress = Lute.UnEscapeHTMLStr(aElement.getAttribute("data-href")); + const linkAddress = Lute.UnEscapeHTMLStr(aLink); /// #if MOBILE openByMobile(linkAddress); /// #else