Commit Graph
248 Commits
Author SHA1 Message Date
zqlit 1b2e3d46f8 fix(友链): 修复申请「通过不了/删不掉」;feat(评论): 通知按文章作者分派
## 友链自助申请(通过不了 / 删除不掉)
根因:admin.js 全局事件委托把 data-id 一律 parseInt,
而友链申请 id 是字符串(lamus5uptzcdam)→ NaN → JSON 成 {"id":null}
→ 后端 String(null||'') 为空 → 400 id and action required,查看/通过/拒绝全失效。
引入于 a74b3c71(10-04 归档 rss-robot 时;后台只有友链申请用字符串 id)。

- admin.js:纯数字才转数字,其余原样(评论/用户/站点按钮请求完全不变)
- admin.js:待审卡片加「删除」按钮
- links.ts:新增 action:'delete'(不受「已处理过」限制,处理过的也能删)
- links.ts:approve 改为先写友链再改状态 + URL 去重(重试幂等)
- links.ts:已是目标状态时返回 {ok:true,already:true},不再 409
  —— 否则网络抖动后重试会让用户以为「怎么点都通不过」

## 评论通知按文章作者分派
编辑角色(女朋友)写的文章,评论通知改发给她,不再打扰博主。
不需要「文章→作者」同步表:Hugo 模板把 author_id 注入 artalkConfig,
artalk.js 已有的 fetch 拦截器把它塞进评论提交体,Worker 直接读。

- artalk.html:artalkConfig 增 pageAuthorId(老文章 0)
- artalk.js:提交评论时带上 author_id(读 window.artalkConfig,防 PJAX 过期)
- comments.ts:createComment 解析 author_id 并传给通知
- mail.ts:收件人改为「这篇文章的主人」——作者非管理员且开了邮件则发给他,
  否则回退博主;已被回复通知过 / 作者本人评论自己的文章都不重复发
- mail.ts:增一行收件人决策日志,便于线上排查

验证:Worker tsc 通过;Hugo 构建通过;artalk.js 语法通过;
友链本地跑通(通过 200 → 再通过 already:true → 友链仅 1 条 → 删除 200 → 再删 404)。
2026-10-05 16:44:15 +08:00
zqlit 1b71fba413 feat: 走心评论(精选评论)+ 移动端评论框底栏布局修复
- 底栏:≤480px 压缩按钮内边距,SE 等小屏单行放下;换行时按钮组右对齐
- Worker:comments 加 is_featured;PUT /comments/:id 支持切换;新增公开接口
  GET /api/v2/featured/comments(排除悄悄话/待审/已删,服务端渲染 markdown)
- 前端:评论区注入「精选」按钮(回复右侧,仅管理员可见)
- 关于页:走心评论板块(标题寄语通栏 + 卡片瀑布流),排在热力图上方
2026-10-05 12:08:33 +08:00
zqlit 3d7d7bd396 fix(theme): pageTitle 加 safeJS —— 修 Go 模板 JS 上下文二次转义导致标题天生带引号
在 <script> 里 {{ .Title | jsonify }} 会被 Go 模板按 JS 上下文再转义一层:
标题「留言」渲染成 pageTitle: "\"留言\"",前端每次上报 page_title 都自带
一对引号 —— 评论入库、邮件标题因此出现《"留言"》,历史上 pages 表一堆标题带
引号(17 行)也是这个根因。jsonify 后用 safeJS 标明这就是最终 JS 字面量,
`</` 仍按惯例转义兜底;已验证中文/emoji 标题字面量均合法
2026-10-05 11:01:20 +08:00
zqlit 215929a67f feat(comments): 匿名评论 + 表情最近使用;fix: 自动填充聚焦提示 & 邮件模板回退原版 & 返回顶部改 CSS 动画
- 匿名评论:comments.is_anonymous 列;对外昵称/头像/网址/徽标/等级/IP归属全部脱敏,
  真实身份留 users 表(回复通知照发、autofill 不受污染);邮件昵称也用「匿名」防泄露
- 表情包最近使用:面板顶部「最近」栏,localStorage 记录 8 个,零侵入复用 Artalk 插入逻辑
- 匿名开关插在 textarea 与底栏之间独立一行,不挤移动端底栏
- 自动填充:提示改 focusin 触发(原 input+sessionStorage 一次性门导致永不触发);
  已填昵称/网址时不覆盖并弹提示
- 邮件模板 UI 回退原版深色气泡设计,保留表情内联尺寸/主题文案等逻辑修复
- 返回顶部:rAF 自绘改 CSS scroll-behavior(滚动期临时挂类),修移动端掉帧
2026-10-05 09:02:23 +08:00
zqlit bcfa229105 邮件模板微信化 + 评论老友自动填充 + CF 后台国内线路一键跳
- 邮件模板重做成微信聊天式:灰底、自己评论绿色气泡靠右、对方白色气泡靠左、
  40px 圆角方头像(weavatar,邮箱 md5 不外泄)、时间居中、#07C160 主按钮;
  布局全嵌套表格(Outlook 稳),表情内联 max-height:28px(修掉「表情太大」)、
  配图限宽 100%;管理员主题从「新的评论待审」改成「您有一个新的评论」
- 老友自动填充:新增 /comments/lookup(只回昵称+网址,绝不含邮箱;IP 限速
  30 次/10 分钟)+ 主题 comment-autofill 模块(填昵称弹提示、填邮箱自动带出
  上次的昵称/网址,事件委托不怕 Artalk 重建编辑器)
- CF 后台新增「国内线路」一键跳:/editor/handoff 用共享令牌对时间戳 HMAC
  签名 → editor-api /admin/handoff 验签发会话 Cookie(2 分钟有效、防重放),
  晚高峰丢包时直达国内机后台免重新登录
2026-10-05 07:36:26 +08:00
zqlit 437cd339ad fix: 管理员编辑跳过邮箱校验 + 返回顶部 rAF 丝滑滚动 + admin.js 正则笔误 + 页面标题污染
- artalk.js: beforeSubmit 在编辑态跳过昵称/邮箱校验(管理员改评论不再被拦)
- floating-tools.js: 返回顶部/去评论改 rAF + easeInOutCubic 自绘,原生 smooth 不可靠
- admin.js: 修 5 处 //s //n 正则笔误(整脚本 SyntaxError 致后台全灰),需 wrangler deploy
- artalk.html: 显式传 pageTitle(不再读 document.title,PJAX 竞态致文章页标题被记成「留言」)
- artalk.js: conf 缓存合并前剔除 pageKey/pageTitle/pageThumb,杜绝跨页串值
2026-10-04 18:30:30 +08:00
zqlit 571d552c9d fix(build): 消除构建期远程拉取隐患 + 评论提交反馈 + 友链卡片移动端
构建隐患(本次丢构建的根因)
- footer.html 用 resources.GetRemote 在每个页面渲染时拉 api/links 与 api/feeds,
  构建节点连不上 Cloudflare 时重试撞穿 Hugo partial 30s 超时 → 整站构建失败
- 改为「流水线 curl 快照 + 模板读本地文件」:
  · 新增 scripts/fetch_snapshots.sh,一次拉齐 conf / friend_links / friend_feeds
    (--max-time 30 --retry 2,JSON 校验,失败一律删文件且恒 exit 0)
  · .cnb.yml Hugo 构建 stage 改为调用该脚本
  · footer.html 改读 site.Data.friend_links / site.Data.friend_feeds,缺失渲染空值
  · .gitignore 忽略 /data/friend_links.json 与 /data/friend_feeds.json
- 降级实测:删掉快照后构建仍 EXIT=0,产物 friendLinks 为空数组

评论提交反馈(artalk.js 新增 __atkSubmit 模块)
- 校验:config.beforeSubmit 拦下 内容空 / 昵称空 / 邮箱空 / 邮箱格式错(网址不校验)
- 发送中:editor-submit 常驻 loading,超 7s 补「网络较慢」
- 成功:editor-submitted 按 normal/reply/edit 分文案,is_pending 提示等待审核
- 失败:拦 POST /api/v2/comments,403/429/4xx/5xx/网络异常全部翻译成人话
- 失败时输入内容保留,并清掉 Artalk 自带的重复小字通知
- 无头浏览器实测 19/19 通过(POST 走 mock,未向线上写数据)

友链申请卡片移动端
- max-width:640px 下隐藏 .atk-fl-nick(昵称 + 博主徽章),桌面端不变

改动:6 files, +282 / -61
2026-10-04 17:38:04 +08:00
zqlit e0c5ac5739 feat(comments): 人机验证改点按式 + 分割线可配置 + 投票契约修复
- 人机验证抽成 human.js 模块,改成 Cloudflare Turnstile 风格的「点一下验证」,
  控件移到「评论一下」发送按钮左侧(不再用图形验证码那一套)
- 留言页 / 文章页两段内联脚本(友链弹窗、人机验证)抽成模块随 page-only.js 加载。
  原先内联 <script> 写在 #pjax-container 外,PJAX 只换容器内容不重新执行它,
  从首页 PJAX 进留言页会出现「申请友链卡片点了没反应」「没有人机验证控件」
- 友链申请弹窗 #flApplyBox 隐藏滚动条(内容仍可滚,避开细滚动条 + 毛玻璃的割裂感)
- 内容分割线抽成 partial divider.html,hugo.toml [params.divider] 可切
  icon(原生 uk-divider-icon)/ image(本地图片),当前用 icon
- 投票契约修复(后端 blog-admin):Artalk 客户端把方向编在 target_name 后缀
  (comment_up / comment_down / page_up / page_down)、路径只有两段,
  而原先只注册了三段 :choice 路由 → 点赞/踩一路 404、界面点了没反应。
  补 POST /votes/:target_name/:target_id,新增 parseVoteTarget() 同时兼容两套契约
  (名字里与路径里方向矛盾时判非法,不静默取其一),错误文案改用实体名
- 无身份点赞不再静默失败:artalk.js 加 __atkVoteGuard,
  未填昵称/邮箱时拦截并提示「填写昵称和邮箱后才能点赞」,
  同时把光标送到昵称框(多个同名输入框逐个试,以 focus 真生效为判据)
2026-10-04 16:26:28 +08:00
zqlit 50a906e07c perf(comments): 评论加载提速 + 骨架屏 + 友链弹窗 pjax 修复 + toast 统一 Message.js
优化:
- initArtalk 加节点级幂等守卫(mount.__atkInited,失败回滚),
  消除 artalk.html/mypjax 多入口导致的 4× comments + 4× pv 重复请求
- fetch 包装层对无 body 的 GET/HEAD 去掉多余 content-type,
  消掉 Artalk 对 GET /comments 的 CORS 预检(按完整 URL 缓存,
  每篇文章都重付一次 RTT)。实测评论列表 +1150~1565ms → +626ms

修复:
- 评论列表骨架屏改注入 .atk-list-body(原骨架在 #Comments 内,
  被 Artalk.init 清空),list-loaded/故障/12s 兜底移除
- 友链申请弹窗抽成 modules/friendlink.js 进 page-only bundle
  (原内联脚本在 #pjax-container 外,pjax 后 flApplyOpenModal 未定义)
- toast 统一走本地化 Message.js/Qmsg 适配层(保留 window.Toast/showToast 旧 API)

文档:
- README / 架构总览 更新;新增 评论加载优化方案.md
2026-10-04 15:00:52 +08:00
zqlit bff48517c0 评论验证码取不到时降级为可重试提示(不留破图)
Deploy to Production / pre-check (push) Successful in 59s
Deploy to Production / build (push) Successful in 4m42s
Deploy to Production / deploy-edgeone (push) Successful in 4m0s
Deploy to Production / finalize (push) Successful in 31s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 20:37:46 +08:00
zqlit 45afb53580 评论人机验证(自研一键验证):静默PoW+行为信号,必要时点一下/图形验证码兜底
Deploy to Production / pre-check (push) Successful in 49s
Deploy to Production / build (push) Successful in 4m39s
Deploy to Production / deploy-edgeone (push) Successful in 3m42s
Deploy to Production / finalize (push) Successful in 33s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 19:30:07 +08:00
zqlit ae93bc7d08 友圈卡片背景头像效果恢复:背景图/头像统一用自建favicon绝对地址+失败兜底,缓存key升v2
Deploy to Production / pre-check (push) Successful in 1m47s
Deploy to Production / build (push) Successful in 4m23s
Deploy to Production / deploy-edgeone (push) Successful in 3m57s
Deploy to Production / finalize (push) Successful in 28s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 17:39:06 +08:00
zqlit 899dcfd006 友圈头像不再兜底第三方默认头像:改用站内/api/favicon(绝对地址),兜底也从cravatar换成自建服务
Deploy to Production / pre-check (push) Successful in 48s
Deploy to Production / build (push) Canceled after 2m55s
Deploy to Production / deploy-edgeone (push) Canceled after 0s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:35:32 +08:00
zqlit 5858188628 友链卡片移动端适配:≤640px隐藏头像、收紧间距内边距、微调字号字距
Deploy to Production / pre-check (push) Successful in 47s
Deploy to Production / build (push) Successful in 4m17s
Deploy to Production / deploy-edgeone (push) Canceled after 37s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:29:20 +08:00
zqlit 627b6e6512 徽章样式补充卡片上下文(.atk-fl-card):卡片已移出.atk-comment导致博主徽章露出Artalk内联蓝底
Deploy to Production / pre-check (push) Canceled after 22s
Deploy to Production / build (push) Canceled after 0s
Deploy to Production / deploy-edgeone (push) Canceled after 0s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:22:58 +08:00
zqlit c952620fd6 友链卡片固定在评论列表上方(不再被新评论挤到中间):整条评论用class隐藏,卡片插入atk-list-body首位
Deploy to Production / pre-check (push) Successful in 53s
Deploy to Production / build (push) Canceled after 1m2s
Deploy to Production / deploy-edgeone (push) Canceled after 0s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:20:04 +08:00
zqlit ab94c25273 修复发评论后卡片被挤下去:原评论内容改用class+!important隐藏(Artalk重渲染会抹掉内联display),转换逻辑改幂等自愈
Deploy to Production / pre-check (push) Successful in 50s
Deploy to Production / build (push) Successful in 4m30s
Deploy to Production / deploy-edgeone (push) Canceled after 2m21s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:13:06 +08:00
zqlit 0f4761803c 友链申请表单新增可选图标链接字段(留空由/api/favicon自动抓取站点图标)
Deploy to Production / pre-check (push) Canceled after 6m47s
Deploy to Production / build (push) Canceled after 0s
Deploy to Production / deploy-edgeone (push) Canceled after 0s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 17:05:57 +08:00
zqlit 98126cafe6 评论徽章DOM/尺寸统一(拆badge-wrap+单一类名)、修复main.css!important劫持徽章尺寸、友链卡片挂到comment级与输入框对齐、卡片动效+打字机、申请弹窗按钮错位与滚动条修复
Deploy to Production / pre-check (push) Successful in 58s
Deploy to Production / build (push) Successful in 3m56s
Deploy to Production / deploy-edgeone (push) Canceled after 1m23s
Deploy to Production / finalize (push) Canceled after 0s
Deploy to Production / notify-failure (push) Canceled after 0s
2026-10-03 16:59:34 +08:00
zqlit 87c47d13c9 徽章样式定稿:博主浅底灰黑描边(回线上版)、置顶浅底红字描边;恢复Artalk默认徽章右间距与CN地域徽标原样
Deploy to Production / pre-check (push) Successful in 44s
Deploy to Production / build (push) Successful in 4m40s
Deploy to Production / deploy-edgeone (push) Successful in 3m48s
Deploy to Production / finalize (push) Successful in 24s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 16:12:23 +08:00
zqlit 36e74d46f4 友链申请入口改URL评论触发+卡片原生风格化; 博主/头衔徽章改浅底描边风格与友链友圈官职统一
Deploy to Production / pre-check (push) Successful in 39s
Deploy to Production / build (push) Successful in 4m55s
Deploy to Production / deploy-edgeone (push) Successful in 4m1s
Deploy to Production / finalize (push) Successful in 25s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 15:16:00 +08:00
zqlit e84de9033d 友链申请卡片重设计(头像+昵称+徽章+主题色) + 弹窗横向滚动条/显隐bug修复
Deploy to Production / pre-check (push) Successful in 1m9s
Deploy to Production / build (push) Successful in 4m9s
Deploy to Production / deploy-edgeone (push) Successful in 3m46s
Deploy to Production / finalize (push) Successful in 28s
Deploy to Production / notify-failure (push) Skipped
2026-10-03 14:28:50 +08:00
QunLIn da1a77a313 友链申请卡片改挂置顶评论 + 弹窗挂 body 加毛玻璃
Deploy to Production / pre-check (push) Successful in 28s
Deploy to Production / build (push) Successful in 2m41s
Deploy to Production / deploy-edgeone (push) Successful in 3m47s
Deploy to Production / finalize (push) Successful in 27s
Deploy to Production / notify-failure (push) Skipped
- 置顶评论卡片化:管理员置顶且内容含「友链自助申请」的评论,
  整条解析成申请入口卡片(隐藏昵称/页脚,渐变虚线卡片,点击打开
  申请弹窗),其余置顶评论不受影响
- 弹窗 DOM 动态挂 document.body:评论容器带 transform 动画会把
  position:fixed 劫持成相对定位,导致遮罩/表单跟着容器变形——
  挂 body 彻底规避
- 遮罩加 backdrop-filter 毛玻璃(GPU 合成,不影响页面性能)
2026-10-03 13:08:14 +08:00
QunLIn 5fcbd2a7b6 字体切全量、评论徽章优先级、友链自助申请卡片、友圈头像兜底
Deploy to Production / pre-check (push) Successful in 1m27s
Deploy to Production / build (push) Successful in 4m49s
Deploy to Production / deploy-edgeone (push) Successful in 3m50s
Deploy to Production / finalize (push) Successful in 21s
Deploy to Production / notify-failure (push) Skipped
- 字体:zql 从 subset(776K) 切换到全量(1.2MB woff2),subset 覆盖
  不足导致大量字回退系统字体,视觉不一致;全量一次加载彻底解决
- 评论徽章统一 comment-rendered 注入,优先级互斥:友链 > 友圈 >
  官职(后端 rank 字段),官方系统徽章(博主)独立显示
- 留言页新增友链自助申请入口卡片 + 弹窗表单(名称/链接/订阅/邮箱
  必填),提交进 api.200181.xyz 待审队列,审核结果邮件通知申请人
- 友圈头像:favicon 抓取失败时兜底第三方 favicon 服务
2026-10-03 12:13:45 +08:00
QunLIn 20869a3c45 RSS API 地址全部收敛到 hugo.toml [params.rssapi],切到 api.200181.xyz
Deploy to Production / pre-check (push) Successful in 2m0s
Deploy to Production / build (push) Successful in 9m9s
Deploy to Production / deploy-edgeone (push) Successful in 4m3s
Deploy to Production / finalize (push) Successful in 29s
Deploy to Production / notify-failure (push) Skipped
- 新增 [params.rssapi] base 配置,主题 7 处硬编码改为读配置:
  head(preconnect+window.rssApiBase)、footer(构建时拉 links/feeds)、
  render-link(favicon)、circles/links 页 fetch、linkify.js(读 window.rssApiBase)
- scripts/fetch_greetings.js 支持 RSS_API_BASE 环境变量,默认新地址
- scfapi.usj.cc(国内代理)保持不变
2026-10-03 01:19:02 +08:00
Vaica 673af08c33 Update artalk.html 2026-06-30 12:47:27 +08:00
Vaica 3a8db8fb12 1907 2026-06-25 19:07:58 +08:00
Vaica 5651d494ba 1507 2026-06-25 15:07:25 +08:00
Vaica f19d91039a 1353 2026-06-25 13:53:18 +08:00
Vaica 56ea059fc0 2022 主题bug修复 2026-06-24 20:22:40 +08:00
Vaica f73bf33bce 1725 功能大改 2026-06-24 17:25:54 +08:00
Vaica f70b603cf7 1835 2026-06-22 18:35:51 +08:00
Vaica 2189a60bc5 Update video.html 2026-06-22 18:10:52 +08:00
Vaica 350f4f0ce4 Update video.html 2026-06-22 18:06:45 +08:00
Vaica 6aa9dff831 Update head.html 2026-06-22 17:43:52 +08:00
Vaica 60354b982e 1721 2026-06-22 17:21:57 +08:00
Vaica 0cc176e867 1715 2026-06-22 17:15:55 +08:00
Vaica ad65bfbb4c Update video.html 2026-06-22 17:08:07 +08:00
Vaica fe8c99a53e 1623 2026-06-22 16:23:10 +08:00
Vaica 290312e8b2 Update head.html 2026-06-04 21:04:27 +08:00
Vaica 6135b6dcd5 fix: 修复Hugo版本兼容性问题
- 回滚footer.html,使用 .Err 语法(兼容0.128.2)
- 固定GitHub Actions的Hugo版本为0.128.2
- 确保本地和CI环境一致
2026-06-03 14:04:44 +08:00
Vaica 36f6622775 fix: 修复Hugo版本兼容性问题 2026-06-03 14:01:37 +08:00
Vaica cbf2034f78 perf: JS按需加载优化 + PJAX适配
- 首页JS减少56%(800KB → 350KB)
- 文章页JS减少44%(800KB → 450KB)
- 完美适配PJAX导航
- 保持所有功能正常
2026-06-03 12:29:56 +08:00
Vaica c65dbab67e Update comment.html 2026-06-03 10:40:07 +08:00
Vaica 8c1ee075e8 优化加载卡顿问题,最稳定版本 2026-06-02 16:26:38 +08:00
Vaica 40a86bcc76 加入昼夜切换的动画优化 2026-06-02 15:49:17 +08:00
Vaica bcd4bc9282 rename content/post to content/posts 2026-06-02 15:37:49 +08:00
Vaica cda4dbb24b 优化pjax刷新 2026-06-02 14:34:23 +08:00
Vaica cc5887a74d 美化url和mp4链接 2026-06-02 12:44:47 +08:00
Vaica 2c6bd1c964 优化github action 逻辑 2026-06-02 10:56:59 +08:00