 wait4xandGLM-5.3
|
58baad5a7b
|
feat(content): 瞬间/书架标题下的话语改为后台可编辑(5j T3)
用户原话:「瞬间、书架大标题下的话语我从哪里去改?包括其字号颜色还有字体」——
此前这两行是硬编码(瞬间来自 i18n 字典、书架是组件里的字面量),后台完全改不了。
- 新增 sitePages 单例(content/site/pages.yaml)+ pageNote() 访问器:note 走富文本
行内管线,空则回落内置默认(原硬编码两句逐字搬入 PAGE_NOTE_DEFAULTS)
- 样式只开放三档并全部夹取:size 11–16px、color 仅 ink-1..ink-4、font 仅排版类白名单
—— 后台可填任意值,不能让它破版或染色
- **关键坑**:字体类不能只挂 class——global.css 的 .font-kai/.font-sans 全挂在富文本
容器作用域(.prose-*/.rich/.mom-text/.prose-body),裸 .page-note.font-kai 拿不到
规则(实测第一次无效,仍是 Noto Sans)。改为复用 fontVarFor() 产出 inline
font-family,class 仅作语义
- 书架与瞬间各自独立配置;默认值取「改造前外观」(均 font-sans)
验证: 构建 exit 0;content-lint 52 页 0/0/0;E2E 56/56;
实测(只改 books 样式)书架 computed = 16px / rgb(51,52,58) / Ma Shan Zheng,
瞬间保持 13px / ink-4 / Noto Sans(两页互不影响);
op-gitea 侧另测:仅改文本、整段删 style(与基线逐字段一致)、非法值
(size:40/color:red/font 乱写)全部安全回落
Spec: 2026-11-03_blog-5j-content-refine (T3)
Co-authored-by: GLM-5.3
|
2026-11-04 20:14:59 +08:00 |
|
 wait4xandGLM-5.3
|
d4fe273812
|
fix(visual): 修视觉终审的折行/豆腐块与灰阶纪律违规
视觉终审(glm-5.3-flash:max)判 BLOCK,逐条修完并复测。
P1 阻断:
- 瞬间页日期折成两行(`2026-` / `04-29`):日期列复用 var(--space-5)=40px,
而 10 字符 mono 日期需 ≈75px 且缺 nowrap。抽 --tl-rail(5.4rem) 统一驱动
轨道宽度与两处偏移,加 nowrap;实测日期单行(高度 20px)且圆点与卡片对齐
P2 交付可见破形:
- 关于页「关于我」行首 emoji 在无彩色 emoji 字体的环境渲染成黑方块:
正文行首 emoji 全部去掉(改纯文字段落),并给 --font-serif/--font-sans
链尾补 Apple/Segoe/Noto emoji 回退——用户内容里的 emoji(瞬间、书评)
同样不再落豆腐块
移动端导航两字折行(开/源、文/章):
- ≤450px 的 overflow-x 内滚从未生效:flex 子项默认可压缩,中文词被压到就地
折行。给 nav ul > li 加 flex:none + .nav-link nowrap;实测 360/390/430
三档全部单行(Range.getClientRects 计数逐项验证)
灰阶纪律:
- 项目墙原来按 GitHub linguist 给每个仓染语言色点,开源页铺 15 个仓 = 15 种
彩色,破「外壳灰阶、彩色只作正文强调」红线 → 统一改灰阶点,语言靠文字承载
- 语言占比并列(Python/TypeScript 各 36%)只有第一名着色,读起来像谁领先 →
判定改为「百分比等于最大值者一并着色」
版式与文案细节:
- prose 标题到正文比 tracks 多一档(16+16=32 vs 16)→ .sec-title + .prose-body
margin-top: 0
- 开源页 bio 破折号贴链接(`blog—— Astro`)→ 破折号前补空格
- 页脚 built from<hash> 缺空格(Astro 吃掉换行处空白)→ 显式 {' '}
- 新增一条真实瞬间(含青色楷体富文本)替代只有占位串的样本,让评论区与标签行
的间距可在真实数据下验收
验证: 构建 51 页 exit 0;content-lint 51 页 0/0/0;E2E **46/46 PASS**;
390px 四页 scrollWidth == innerWidth(无横向滚动);
导航 360/390/430 全部单行;日期单行;config-check 全过
Spec: 2026-11-02_blog-5h-content-social (视觉修复)
Co-authored-by: GLM-5.3
|
2026-11-02 20:56:00 +08:00 |
|
 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 |
|