fix(comments): 悄悄话允许管理员发表 + 邮件标题优先用实时标题;返回顶部改 UIkit 同款动画

- comments.ts: 去掉旧匿名语义遗留的 !admin 前置条件 —— 博主(登录态)发的悄悄话
  以前被忽略标志、入库 is_anonymous=0 变成公开评论
- 邮件标题改用本次请求带来的 page_title(前端 .Title 总是最新),D1 pages.title
  仅兜底:存量脏数据 /comment.html 曾存成字面量 "留言",邮件渲染出《"留言"》
  (线上已清洗 17 行带引号标题 + 3 篇被污染成「留言」的文章页标题)
- 返回顶部:CSS 挂类+scrollTo 同帧执行会被浏览器按旧计算样式瞬移("一下子就上去"),
  改 UIkit scrollIntoView 同款 rAF + 余弦 ease-in-out + 40*dist^0.375 时长(上限 1.2s),
  滚轮/触摸打断、reduced-motion 瞬移;main.css 移除 .css-smooth-scroll
This commit is contained in:
zqlit committed 2026-10-05 10:52:13 +08:00
1 parent 4fa592c11c
commit f7e0596218
3 files changed
+34 -43

No files matched your search

+9 -4
View File
@@ -429,10 +429,11 @@ export async function createComment(ctx: Ctx): Promise<Response> {
return fail(403, 'Admin access required', { need_login: true });
}
// 匿名评论:真实身份只留在 users 表(回复通知照发、自动填充不受污染),
// 对外一律显示「匿名」。管理员身份本来就不是匿名的,忽略标志。
// 悄悄话评论:只藏内容、身份照常显示,管理员同样可以发(2026-10-05 踩坑:
// 这里以前是旧「匿名藏身份」语义,带 !admin 把管理员的悄悄话标志整个忽略,
// 导致博主发的悄悄话入库 is_anonymous=0、内容对公众可见)
const anonymous =
!admin && (body.anonymous === true || body.anonymous === 1 || body.anonymous === '1' || body.anonymous === 'true');
body.anonymous === true || body.anonymous === 1 || body.anonymous === '1' || body.anonymous === 'true';
// 匿名用户:按 name+email 找或建
let author = user;
@@ -517,7 +518,11 @@ export async function createComment(ctx: Ctx): Promise<Response> {
parentAuthor,
siteName,
siteUrl,
pageTitle: page.title || pageTitle,
// 标题优先用本次请求带上来的(前端 artalk.html 传 .Title,总是最新、
// 干净);pages.title 是「首次评论时建页」落库的存量值,可能是历史
// 脏数据(例:/comment.html 曾存成字面量 "留言",邮件就渲染成
// 《"留言"》)。存量仅在本次没带标题时兜底。
pageTitle: pageTitle || page.title,
pageUrl: pageAccessibleUrl(pageKey, siteUrl),
});
} catch (e) {