feat(stage5): 文档主题系统/自定义 CSS/导出 HTML/打印/导入 HTML 与 Word
This commit is contained in:
36
docs/09-stage5-report.md
Normal file
36
docs/09-stage5-report.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# 阶段 5 · 主题系统与导入导出报告(实测记录)
|
||||
|
||||
> 日期:2026-11-13 · 范围(需求 §23 阶段 5):内置主题、自定义 CSS、导出 HTML/PDF、导入导出与打印。
|
||||
|
||||
## 1. 本阶段实现内容
|
||||
|
||||
- **文档主题系统**(`src/themes.ts` + styles.css 变量层):7 套内置主题——默认、GitHub、Notion、简约蓝、深色护眼(自带深色纸面)、专注写作(衬线窄栏)、经典纸张。主题只作用于编辑区排版(字体/行距/标题/链接/引用/代码底/纸面色),经 CSS 变量切换,与 UI 框架明暗相互独立。新增顶部「主题」菜单可直接切换(带勾选态)。
|
||||
- **当前文档临时主题**(需求 §14.3):外观弹窗里可为当前标签单独指定主题,覆盖全局、仅本会话有效,不写进文档文件。
|
||||
- **自定义 CSS**(需求 §14.2):外观弹窗内编辑、即时注入生效、随偏好落库;弹窗同时补齐了阶段 4 遗留的自动保存间隔设置(开关 + 10–600 秒)。
|
||||
- **导出 HTML**(`src/services/exportHtml.ts`):独立管线 unified/remark(gfm+math)→ rehype → rehype-katex 公式渲染 → 代码高亮 → Mermaid 渲染 SVG → 独立 HTML 文档(内联与主题同源的导出样式、`<title>` 取文档名)。图片两模式:保持相对路径 / 内嵌 base64 单文件(Rust 新增 `read_file_base64`,base64 实现已用标准向量实跑验证;相对路径按文档目录解析,含 `..` 归一化)。
|
||||
- **高亮引擎决策**:Shiki 默认的 Oniguruma WASM 加载依赖 fetch/stream,在 jsdom 实测直接失败(真实 WebView 亦有同类风险),已换 **shiki/core + JavaScript 正则引擎**(无 WASM、处处可跑),24 种常用语言,导出测试断言了着色 span 真实产出。
|
||||
- **复制为 HTML**:ClipboardItem 同时写 text/html 与 text/plain(降级 writeText),可直接粘贴到公众号/网页富文本编辑器。
|
||||
- **打印 / 导出 PDF**:Ctrl+P 与文件菜单;打印样式表隐藏全部框架(标题栏/菜单/标签/侧栏/状态栏/弹窗),只输出文档区并设定 @page 边距;PDF 经系统打印对话框「另存为 PDF」完成。
|
||||
- **导入**(文件菜单):HTML 与 Word(.docx) 转 Markdown 新建标签——HTML 走 turndown(ATX 标题/围栏代码块),DOCX 走 mammoth 先转 HTML 再 turndown;两个库均懒加载。Web 降级模式同样可导入。
|
||||
|
||||
## 2. 构建与测试结果(实跑)
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 类型检查 `tsc -b` | ✅ 0 错误 |
|
||||
| 自动化测试 | ✅ **53/53**(11 文件;本阶段新增 5:主题注册表、导出管线结构/公式/表格、Shiki 真高亮、图片内嵌替换、HTML 导入) |
|
||||
| Rust | ✅ base64 函数标准向量全过(空/1/2/3 字节/中文/高位字节);`read_file_base64` 命令包装随 Windows 构建验 |
|
||||
| 生产构建 | ✅ 通过(导出/导入相关库全部懒加载分包,不进首屏) |
|
||||
| dev 冒烟 | ✅ HTTP 200 |
|
||||
|
||||
## 3. 已知问题与边界
|
||||
|
||||
1. **导出 Word 未做**:DOCX 生成需要 pandoc 级别的转换器,本阶段只做了导入方向;导出 Word 留待后续评估(可考虑集成 pandoc 二进制或 docx 生成库,排版保真另说)。EPUB 导入/导出同样未做。
|
||||
2. 导出 HTML 的 KaTeX 样式走 CDN 链接:联网时公式显示完美;完全离线时公式退化为 MathML 原生渲染(Chromium/WebView2 可显示,样式略简)。把 KaTeX 字体内嵌进导出文件可做到全离线,但单文件体积会涨约 300KB,未默认启用。
|
||||
3. Mermaid 导出 SVG 在 jsdom 无法真验(同阶段 3 边界),失败时自动保留代码块原文,不丢内容。
|
||||
4. 打印效果(分页、页眉页脚)取决于 WebView2 打印对话框与驱动,真机验;打印样式已按类名核对过框架元素(titlebar/menubar/tabbar/sidebar/statusbar 均实存)。
|
||||
5. 文档临时主题与自定义 CSS 是会话/偏好级能力:临时主题不跨重启(按需求 §14.3 的「临时」定位),自定义 CSS 跨重启保留(在偏好里)。
|
||||
|
||||
## 4. 下一阶段(阶段 6)预告
|
||||
|
||||
编辑体验与性能:专注模式、打字机模式、文档内查找替换、全文搜索(工作区)、快捷键自定义中心、多窗口/多开、性能优化与大文档实测(100KB/1MB/5MB 打开与输入延迟,WebView2 真机口径)。
|
||||
Reference in New Issue
Block a user