docs(memory): 页面作用域机制、10 槽位约束与生成器重做的坑

This commit is contained in:
tamakyi
2026-10-20 10:54:34 +08:00
parent ddee221de2
commit ef18d91920
2 changed files with 53 additions and 0 deletions
+13
View File
@@ -104,6 +104,19 @@
按发布者 `owner.Theme`。都看箱主/发布者,不看访客。全站页(`/`、`/explore`、`/login`)不主题化。
- 投票页**语言**也跟发布者:`applyOwnerLocale(data map[string]interface{}, owner)`(与主题同一个函数),
必须在任何 i18n 取词之前调用;箱主未配语言才回退访客/站点默认。签名收 map 是为了能纯内存单测。
- **按页面作用域**:`internal/context.pageScope()` 输出 `<html data-page-scope>`,取值
`box`/`question`/`admin`(/user/questions,/user/votes*)/`profile`/`vote`。主题用
`html[data-theme-style="x"][data-page-scope="y"]` 覆盖整页背景与装饰。⚠️ 深色覆盖必须写
**三重选择器**(加 `[data-theme="dark"]`),否则被浅色作用域块盖掉(同特异性、写在后面)。
没写覆盖块的页面自动回退全局。首页/`/explore` 不加载主题 css。
- ⚠️ **装饰层固定 10 槽**(base.css 12 层 = pattern1 + deco10 + image1),`--tb-deco`/
`-size`/`-position` 三组必须等长。`TestDecoSlotCount` 逐文件逐声明检查;少写一个不报错,
只会让图层与 size/position 错位(整页重复同一张图 / 人物跑到左上角)。
- 位置一律写两值 `calc(0%|50%|100% ± Npx)`(百分比相对「容器 − 图片」)。**别用 left/bottom
关键字混搭**:「水平居中 + 垂直贴底」是三值语法,非法时整条声明作废、图层静默回左上。
- 可视化编辑走 `dev/theme-builder/`(`serve.py` 起服务 + iframe 加载真实页面快照)。
file:// 下父页面读不到 iframe 的 DOM,所以必须走 HTTP;预览快照由
`TEST_PREVIEW=1 go test ./templates -run TestGenPreview` 生成。
- 一套主题 = `static/css/themes/<slug>.css`,**只覆盖令牌**,不碰布局。`static/fs.go` 已嵌整个 `themes/` 目录,
新增主题只需放文件 + 登记 `[theme] available`(底稿 `_scaffold.css`)。
- ⚠️ **`[theme] available` 是硬白名单,启动时读一次**:css 发布了但没登记,设置页就是看不到,现象和「部署没生效」一样。