From 73336bcc0e3cfef0a84d22764e8849a21b1b1ab2 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Tue, 7 Jul 2026 16:03:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=89=8D=E7=AB=AF=E7=95=8C=E9=9D=A2):=20?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=89=8D=E7=AB=AF=E7=95=8C=E9=9D=A2=E6=96=87?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.css | 17 ++++++++++++- assets/webui/ofdgo.js | 56 +++++++++++++++++++++++++++++++++--------- ofdgo_font_info.go | 14 +++++------ 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/assets/webui/ofdgo.css b/assets/webui/ofdgo.css index 59d7a82..86ae5c1 100644 --- a/assets/webui/ofdgo.css +++ b/assets/webui/ofdgo.css @@ -645,10 +645,25 @@ body[data-hide-meta] .meta-panel { } .doc-font-detail { + overflow: hidden; color: var(--text-muted); font-size: 11px; line-height: 1.35; - overflow-wrap: anywhere; + text-overflow: ellipsis; + white-space: nowrap; +} + +.doc-font-result { + display: grid; + grid-template-columns: minmax(72px, 42%) minmax(0, 1fr); + gap: 8px; +} + +.doc-font-result span { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .font-list { diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 0982208..9cd337e 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -1535,17 +1535,44 @@ function renderDocumentFonts() { if (font.embedded && font.status !== "embedded") { badges.append(fontBadge("内嵌", "embedded")); } - const detail = document.createElement("div"); - detail.className = "doc-font-detail"; - detail.textContent = fontDetail(font); + const result = fontResult(font); + const metaText = fontMeta(font); head.append(name, badges); - row.append(head, detail); + row.append(head); + appendFontResult(row, result); + appendFontDetail(row, metaText); fragment.append(row); } el.docFontList.append(fragment); } +function appendFontResult(row, result) { + if (!result.source && !result.detail) { + return; + } + const detail = document.createElement("div"); + const source = document.createElement("span"); + const text = document.createElement("span"); + detail.className = "doc-font-detail doc-font-result"; + source.textContent = result.source; + text.textContent = result.detail; + detail.title = [result.source, result.detail].filter((item) => item).join(" · "); + detail.append(source, text); + row.append(detail); +} + +function appendFontDetail(row, text) { + if (!text) { + return; + } + const detail = document.createElement("div"); + detail.className = "doc-font-detail"; + detail.textContent = text; + detail.title = text; + row.append(detail); +} + function fontBadge(text, status) { const badge = document.createElement("span"); badge.className = `font-badge ${status}`; @@ -1582,7 +1609,18 @@ function statusText(status) { } } -function fontDetail(font) { +function fontResult(font) { + const result = { source: "", detail: "" }; + if (font.matched) { + result.source = font.embedded || font.status === "embedded" ? `内嵌 ${font.matched}` : `匹配 ${font.matched}`; + } + if (font.detail) { + result.detail = font.detail; + } + return result; +} + +function fontMeta(font) { const parts = []; if (font.familyName && font.familyName !== font.fontName) { parts.push(`字体族 ${font.familyName}`); @@ -1590,13 +1628,7 @@ function fontDetail(font) { if (font.charset) { parts.push(`字符集 ${font.charset}`); } - if (font.matched) { - parts.push(font.embedded || font.status === "embedded" ? `内嵌 ${font.matched}` : `匹配 ${font.matched}`); - } - if (font.detail) { - parts.push(font.detail); - } - return parts.join(" · ") || "-"; + return parts.join(" · "); } function fitWidth(updateStatus = true) { diff --git a/ofdgo_font_info.go b/ofdgo_font_info.go index 2398917..f054eda 100644 --- a/ofdgo_font_info.go +++ b/ofdgo_font_info.go @@ -22,13 +22,13 @@ import ( ) const ( - // FontStatusEmbedded 字体使用OFD内嵌字体 + // FontStatusEmbedded 内嵌字体可用 FontStatusEmbedded = "embedded" - // FontStatusMatched 字体命中外部字体 + // FontStatusMatched 外部字体匹配 FontStatusMatched = "matched" - // FontStatusFallback 字体使用外部字体回退 + // FontStatusFallback 外部字体回退 FontStatusFallback = "fallback" - // FontStatusMissing 字体缺失 + // FontStatusMissing 字体资源缺失 FontStatusMissing = "missing" ) @@ -98,7 +98,7 @@ func (r *Renderer) FontInfos() ([]FontInfo, error) { ID: id, FontName: id, Status: FontStatusMissing, - Detail: "未在OFD资源中声明", + Detail: "字体资源未被声明", Used: used, }) } @@ -130,7 +130,7 @@ func (r *Renderer) fontInfo(font Font) FontInfo { if _, err := r.Reader.ResData(font.FontFile); err == nil { info.Status = FontStatusEmbedded info.Matched = path.Base(font.FontFile) - info.Detail = "使用OFD内嵌字体" + info.Detail = "使用内嵌字体文件" } else { info.Status = FontStatusMissing info.Detail = "内嵌字体文件缺失" @@ -149,7 +149,7 @@ func (r *Renderer) fontInfo(font Font) FontInfo { return info } info.Status = FontStatusMissing - info.Detail = "未找到可用字体" + info.Detail = "可用字体文件缺失" return info }