# -*- coding: utf-8 -*- r'''把 HTML 模板里的 `reveal` 类去掉。 == 为什么 == 我在 HTML 里写了:
而 CSS 是: .reveal{opacity:0;transform:translateY(22px)} .reveal.in{opacity:1;transform:none} 于是**这些卡片默认是隐藏的**,必须等 JS 跑起来加上 `in` 才显示。 一旦 JS 被拦截 / 报错 / IntersectionObserver 没触发 —— 整页功能区、步骤区、评价区**全空白**。 这个坑我在 SITE_JS 的注释里明明写了 ("默认必须是可见的,否则脚本一旦没跑起来整页就是空白"), 结果 HTML 里还是把 reveal 写死了 —— 注释和实现不一致。 正确做法: * HTML 里**不带** reveal(默认可见) * JS 确认可用之后,自己补上 reveal,再注册观察器 * 这样没 JS = 正常显示;有 JS = 滚动淡入 ''' from __future__ import annotations import re import sys from pathlib import Path SRC = Path(__file__).resolve().parent.parent / "relay" / "landing.py" # (原样, 改成) —— 逐个精确替换,不用正则免得误伤 CSS PAIRS = [ ('
', '
'), ('
', '
'), ('
', '
'), ('
', '
'), ('
', '
'), ] def main() -> int: text = SRC.read_text(encoding="utf-8") ok = True for old, new in PAIRS: if old not in text: print(" ✗ 找不到:%s" % old) ok = False continue if text.count(old) != 1: print(" ! %s 出现 %d 次" % (old, text.count(old))) text = text.replace(old, new) print(" ✓ %s -> %s" % (old, new)) if not ok: print() print(" 有锚点没匹配,没有写回") return 1 # 再确认一遍 HTML 里没有裸的 reveal leftovers = re.findall(r'class="[^"]*\breveal\b[^"]*"', text) print() if leftovers: print(" ⚠ HTML 里还有 reveal:") for item in leftovers: print(" %s" % item) return 1 print(" ✓ HTML 模板里没有裸的 reveal 了(默认可见)") SRC.write_text(text, encoding="utf-8", newline="\n") print(" 已写回") return 0 if __name__ == "__main__": sys.exit(main())