 wait4xandGLM-5.3
|
63c9c8ad4a
|
feat(counts): 浏览/评论徽标接入文章与瞬间页,修同载双计(5h T4)
用户要「加一个访客数量、评论数量,采用类似于开源页面从 GitHub 移植过来的那个
眼睛图标」——落地为 ViewMeta 本地 SVG 徽标,无第三方图片依赖。
接入(op-artalk 车道):
- 文章详情页 reading/tech 两分支各挂一枚 mode="page"(两分支互斥,同页仅一处计数)
- ArtalkComments 顶部旧的纯文本 pv 行与自成一套的 bumpPv 脚本整段删除,改为
readonly chip:评论区只读展示,不再各计一次
- 瞬间页顶部整页 pv 行同样改 chip;每条瞬间卡片底部为 readonly 徽标
组件修复(本人,op-artalk 实测揪出):
- **同载双计**:脚本既注册 astro:page-load 又立即调用 run(),首屏两者都会触发
→ 每元素 POST 两次、浏览量翻倍(实测 15→17→19 每载 +2)。加每元素一次性
守卫后 1/2/3 每载 +1;软导航新元素仍照常计数
- **同页两枚数字差 1**:readonly 实例独立 GET 到的 pv 可能比计过数的少 1;
改为同键存在 page 实例时 readonly 让位,由 page 实例回填同一份结果
- page 实例请求失败时释放兄弟自读,避免评论区永远停在「–」
验证: 构建 exit 0;E2E 37/37;Playwright 拦截对账——
每载 POST=1、同页两枚徽标文本一致(101/101)、刷新后累计 2、
接口全挂时两枚均显示占位「–」不报错
Spec: 2026-11-02_blog-5h-content-social (T4)
Co-authored-by: GLM-5.3
|
2026-11-02 20:29:44 +08:00 |
|
 wait4xandGLM-5.3
|
8e74bead62
|
feat(moments): 瞬间富文本与逐条评论(5h T2/T3)
瞬间文字从纯文本直出升级到与文章同级表达力,每条动态获得独立评论流。
T2 富文本:
- text 在 frontmatter 预渲染成 momentId → html 的 Map(renderRich 是 async,
模板内不能 await),模板只此一处 set:html 且喂的是净化产物
- 走与全站文案同一条管线:markdown → 内容净化(标签/属性/协议三层白名单)
→ class 白名单 35 项,故 <span class="c-blue font-kai"> 生效、
<script> 整棵子树被丢弃(实测)
- 纯文本老数据零回归:无 markdown 的 text 得到单个 <p>,与旧直出视觉等价
- 卡片内富文本首尾 margin 归零、段间半档、列表缩进 1.35em,15px/ink-2 基调不变
T3 逐条评论:
- 新增 MomentComments.astro:<details> 折叠,**展开才拉 Artalk 并 init**
(未展开连 Artalk.js 都不下载,时间线一屏十几条不白付成本)
- page_key = /moments/#<slug>,中英双语共用同一评论流(与文章页同策略)
- pvAdd: false 且复用 ViewMeta readonly 计数:读者开评论不会虚增浏览数
- 5s 兜底失败提示 + 重试;软导航回页对已展开的框补挂
- Playwright 实测同页两个容器各自 init 成功(各渲染 31 个 atk-* 节点,无异常),
故无需降级;若日后内存吃紧可对上一实例调 destroy() 一行切换
验证: 构建 exit 0;E2E 37/37(快照口径);临时瞬间实测 markdown 粗体、
彩色+楷体类保留、行内码、<script> 净化丢弃、details 与 /moments/# 键、
ViewMeta 只读挂载全部命中(验收数据已还原)
Spec: 2026-11-02_blog-5h-content-social (T2/T3)
Co-authored-by: GLM-5.3
|
2026-11-02 20:20:31 +08:00 |
|
 wait4xandGLM-5.3
|
73c31ffb2a
|
feat(pwa): 瞬间页安装引导与启动快捷方式(车道 H)
- manifest shortcuts:瞬间直达(/moments/ + 复用 192 图标;lang
zh 单份中文)
- 安装 CTA:时间线后灰阶虚线小条+ghost 按钮;beforeinstallprompt
模块级立即绑定(跨软导航存活),三态=可装显示/已装
(display-mode:standalone 或 iOS standalone)永不显/不支持默认
hidden;prompt 后 accepted/appinstalled 清引用;文案组件内
locale 双份
- SW 复核零改动:PRECACHE 已含双轨瞬间、IMMUTABLE 覆盖
/_astro/ 瞬间图片管线、NEVER_CACHE 拦 pv 走 '–' 降级——三处
现成正确;离线实证:断网瞬间页 200+时间线完整+pv 降级;图片
0/0 为数据现状(3 条瞬间均无图),同管线文章页图片离线 1/1
等价实证成立
车道:op-artalk(自验 11/11);收编验收:CTA hidden 态+离线 200+
标题+manifest shortcuts 解析实测(首轮探针 context API 误用致假
FAIL,selector 复核全过)
验证: pnpm astro build exit 0;E2E 33/33;断网瞬间页 playwright
实测 200
Spec: none (PWA 增强:shortcuts+CTA+离线实证,车道级交付)
Co-authored-by: GLM-5.3
|
2026-10-25 22:45:18 +08:00 |
|
 wait4xandGLM-5.3
|
55cfc73cb7
|
feat(interact): 访问量小字+瞬间时间线动效(车道 F)
- pv:ArtalkComments/MomentsPage 组件级独立 POST /artalk/api/v2/
pages/pv(页面加载即计,不等懒加载;POST 天然绕 ESA 边缘缓存);
init 加 pvAdd:false 防双计(默认 true 此前评论加载一直在默默计
数——mian-sha pv=2 即此来源);双轨 pageKey 分开计数
- 瞬间动效:.tl-item IntersectionObserver 进入视口一次性渐显
(opacity 0+8px);降级链=data-mom-anim 前置标记——无 JS/
reduced-motion/无 IO 三情形标记缺席则初始隐藏不生效;软导航
astro:page-load 重注册
- Artalk 后台真根因修复(车道侧宿主件,非仓内):容器日志实锤
登录从未成功过(12+ 次 401/400,非会话丢失)——CLI 重置密码+
凭据入 INITIAL-CREDENTIALS.txt 0600+login_timeout 3d→30d+
容器重启;API 全链 200 实测
- 遗留(ESA 侧归 orchestrator):ESA 缓存 /artalk/api GET 响应
(stats Age 头实锤),需边缘规则绕缓存
车道:op-artalk(自验 8/8 含 route mock/reduced-motion/无 JS 三降
级);收编验收:pv 元素+动效标记+reduced-motion 豁免实测
验证: pnpm astro build exit 0;E2E 33/33;三降级链 playwright 实测
Spec: none (pv+动效,车道级交付)
Co-authored-by: GLM-5.3
|
2026-10-25 22:19:41 +08:00 |
|
 wait4xandGLM-5.3
|
4aa79fca06
|
feat(i18n): UI 字典串接与三页薄化——/en/ 全站落成
- op-gitea 车道:ui.ts 扩 26 键(占位 {n}/{title}/{exif} 约定),五组件
locale prop 串接,zh 零回归(48 键/18 页实测)
- orchestrator 收尾:gallery/moments/about 三页 body 提取为
components/pages/*Page(zh/en 薄页双路由),/en/ 全家福 21 页
- 提取工程三坑入库:HTML 注释不可进 frontmatter 模块区;搬移脚本会吃
开栏 ---;单级页面搬二级目录后 import 全线差一层
验证: astro build 21 页 exit 0;/en/ 七类路由产物断言过;en 页
ICP 备案保留;zh 侧文案抽查不变
Spec: 2026-10-25_add-blog-i18n
Co-authored-by: GLM-5.3
|
2026-10-25 09:26:14 +08:00 |
|