feat(books): 书架定稿方案 C——抽书阅读 + 多本置顶默认展开
用户 2026-11-03 拍板:选方案 C,「指定换成一个向上的箭头即可,不用表示为文字」,
并问是否支持多个置顶(答:支持,已实现并实测)。
- BooksPage 重写为抽书列表:情绪色脊 + 定宽标题列 + 作者 + 展开 chevron,
details 原生展开显示封面与简介,零 JS
- 置顶标记改为图标:↑ + 横线的「回到顶部」字形,不写「置顶」二字,
与右侧 chevron 形状区分;title/aria 仍带「置顶」以便读屏
- 多本置顶:所有 pinned: true 的书排在最前(沿用 sortPosts 契约)且全部
默认展开;实测两本同时置顶 → 序列前两位、两条都 open、两个图标
- 展开/收起用 chevron(收起朝下、展开旋转 180°),reduced-motion 下不旋转
- 移动端:标题列自适应、作者隐藏、简介与封面改纵向堆叠
- 删除一次性预览路由 /books-preview/ 与 content-lint 的临时白名单;
文档补「书架页置顶图标语义 + 多本置顶」
验证: 构建 exit 0;content-lint 53 页 0/0/0;Playwright 实测 5 行/作者列 x 唯一/
标题零截断/点击展开且 chevron 旋转 179°/390 无溢出;
临时两本置顶实测:顺序前两位、两条 open、图标 2 个(数据已还原)
Spec: 2026-11-02_blog-5i-fonts-polish (T7 定稿)
Co-authored-by: GLM-5.3
This commit is contained in:
1 parent
18ea5b17b8
commit
073e124344
5 files changed
+191
-682
No files matched your search
@@ -16,10 +16,6 @@ if (MODE === 'skip') {
|
||||
const SKIP_PREFIX = ['/admin/', '/photos-originals/']; // admin=CMS 路由;photos-originals=部署期 rsync 叠加层(不在 dist,另有部署链保障)
|
||||
const SKIP_FILE = new Set(['/404.html']); // Astro 404 页不参与配对
|
||||
|
||||
// 完全不参与检查的产物(连站内链接也不查):仅用于一次性预览路由。
|
||||
// 书架方案预览页没有 en 对应页,而 Header 的语言切换会自动生成 /en/… 链接,
|
||||
// 会误报「断链 + 配对缺」;该路由在用户选定方案后即删除。
|
||||
const SKIP_ALL = new Set(['/books-preview/index.html']);
|
||||
|
||||
function walk(dir, out = []) {
|
||||
for (const e of readdirSync(dir)) {
|
||||
@@ -54,7 +50,6 @@ const warns = [];
|
||||
|
||||
for (const f of files) {
|
||||
const rel = f.slice(DIST.length) || '/';
|
||||
if (SKIP_ALL.has(rel)) continue;
|
||||
const html = readFileSync(f, 'utf8');
|
||||
|
||||
// 站内 <a href>:仅根相对路径;#锚点/mailto/tel/外部/data: 全跳过
|
||||
|
||||
Reference in new issue
Block a user