laoyang
8f8cffd69e
3.2.43: 修代码块重影与语言识别,含 4 个静默 bug (#12)
排查结论:不是插件冲突,对手是主题自己的 kratos.css。
现象一「重影/阴影」的真实成因是 CSS 优先级 + 行高错位:
kratos.css 的 .content code(0,4,1) / .content pre code(0,4,2) 抢走了
border-radius:4px、color:#333、font-size:13px。字号被顶到 13px 后
行高算成 21.06px,而行号槽是 12.5px/20.25px,每行错开 0.81px,
30 行累计 24px —— 视觉上就是「两层东西叠在一起」。
现象二「多一个 copy 按钮」未能复现:2 个页面实测每张卡恰好 1 个
.cb-copy;Prism.plugins 只有 autoloader,copy-to-clipboard 未注册;
Enlighter 插件目录不存在。已请用户指认页面。
修复:
- highlight.css 的选择器提到与原主题同级 (0,4,2),靠出现更晚取胜,
不用 !important。
- 顺带修掉 4 个静默 bug(都不报错、页面看着正常):
1. header.php 从未调 body_class(),裸 <body> ⇒ 所有挂 body_class
过滤器的类全部静默失效,包括行号开关 opt-ln(选项已开却不显示)。
2. 79 个代码块的语言写在 <pre lang=> 或 data-enlighter-language 上,
只读 <code> class 必然读不到 ⇒ 标签显示「—」。
3. 白名单 4 项指向未打包语言(powershell/dos/dockerfile/nginx)。
hljs 遇到不认识的语言不抛错,只 warn 一句就退回不高亮 ⇒
整块白板。站内这 4 种用量均为 0,属潜伏 bug。
4. hljs 把 plaintext 块改写成 language-undefined;highlightAuto
对纯文本返回字符串 'undefined',if (r.language) 会误当真值。
顺带收敛:yang_hl_languages() 原本手写第二份清单,与 yang_hl_norm_lang()
里的表互相漂移,改为从 yang_hl_known_map() 单一来源派生。
验证:
- 单测 44 + 24 断言全通过
- 反向验证 10 组注入全部变红(含专门注入「恢复手写清单」验证新判据)
- 全站 284 块直连数据库校验:568 通过 / 0 失败,
语言覆盖率 71.8% → 98.6%,残留与污染全 0
- 剩余 4 块显示「—」是正确降级(jsp×2、latex×2 未打包进 hljs)
- 夹具对照:新版 0 失败 vs 全旧版 10 失败
2026-10-26 11:00:47 +08:00
..
2022-01-07 11:15:42 +08:00
2022-01-07 11:15:42 +08:00
2026-10-26 09:00:17 +08:00
2026-10-26 11:00:47 +08:00
2022-01-07 11:15:42 +08:00
2026-10-25 09:52:07 +08:00
2026-10-25 09:52:07 +08:00
2022-01-07 11:15:42 +08:00
2026-10-25 23:03:13 +08:00
2026-10-25 10:36:29 +08:00
2026-10-25 13:37:26 +08:00
2022-01-07 11:15:42 +08:00