diff --git a/static/public/css/theme.css b/static/public/css/theme.css index 04fe2ce..3627224 100644 --- a/static/public/css/theme.css +++ b/static/public/css/theme.css @@ -256,6 +256,32 @@ input[type="button"]:disabled { white-space: nowrap; } +/* ===== Card Stats (dnfs 互动统计:观看/点赞/分享) ===== */ +.card-stats { + display: flex; + align-items: center; + justify-content: center; + gap: 1.1rem; + margin-top: 0.45rem; +} +.stat-item { + display: inline-flex; + align-items: center; + gap: 0.3rem; + font-size: 0.78rem; + color: var(--muted); +} +.stat-item svg { + width: 14px; + height: 14px; + flex-shrink: 0; +} +.stat-num { + font-weight: 600; + color: var(--fg-secondary); + font-variant-numeric: tabular-nums; +} + /* ===== Minimap (dnfs) ===== */ .minimap { position: fixed; diff --git a/static/public/js/dnfs.js b/static/public/js/dnfs.js index 563761e..6f617d5 100644 --- a/static/public/js/dnfs.js +++ b/static/public/js/dnfs.js @@ -177,6 +177,23 @@ function renderMarkdown(element, content) { element.innerHTML = md.render(content, {html: false}); } +/* by qing — 互动统计图标:inline SVG,stroke=currentColor 自动跟随主题色 */ +const ICON_EYE = ''; +const ICON_HEART = ''; +const ICON_SHARE = ''; + +/* by qing — 生成一个统计项:图标 + 数字,count 缺省显示 0 */ +function makeStatItem(iconSvg, count) { + let span = document.createElement('span'); + span.className = "stat-item"; + span.innerHTML = iconSvg; // 上方固定常量字符串,不含用户输入 + let num = document.createElement('span'); + num.className = "stat-num"; + num.textContent = (count == null) ? "0" : String(count); + span.appendChild(num); + return span; +} + /* ---- by qing ---- */ const stack = []; /* 用于存储当前节点的路径,也就是经过的每一个节点的id, 否则就回不去上一层*/ var article_title = document.getElementById('article-title'); @@ -269,9 +286,6 @@ function load_notes(main_node) { ttl.appendChild(ttl1); card.appendChild(ttl); let wrt_div = document.createElement('p'); - //let vit_div = document.createElement('p'); - //let lke_div = document.createElement('p'); - //let srd_div = document.createElement('p'); // 发帖用户:头像圆点(取昵称首字符)+ 昵称,样式见 theme.css 的 Owner Chip 段 wrt_div.className = "card-owner"; let owner_text = (item.owner == null || item.owner === "") ? "匿名" : String(item.owner); @@ -283,13 +297,14 @@ function load_notes(main_node) { owner_name.textContent = owner_text; wrt_div.appendChild(owner_avatar); wrt_div.appendChild(owner_name); - //vit_div.textContent = "观看数:" + item.visit_count; - //lke_div.textContent = "点赞数:" + item.like_count; - //srd_div.textContent = "分享数:" + item.share_count; + // 互动统计:眼睛=观看、爱心=点赞、转发=分享(后端 Notes 表暂无计数字段,缺省显示 0) + let sts_div = document.createElement('div'); + sts_div.className = "card-stats"; + sts_div.appendChild(makeStatItem(ICON_EYE, item.visit_count)); + sts_div.appendChild(makeStatItem(ICON_HEART, item.like_count)); + sts_div.appendChild(makeStatItem(ICON_SHARE, item.share_count)); ttl.appendChild(wrt_div); - //ttl.appendChild(vit_div); - //ttl.appendChild(lke_div); - //ttl.appendChild(srd_div); + ttl.appendChild(sts_div); let ctt = document.createElement('p'); renderMarkdown(ctt, item.content); card.appendChild(ctt)