fix: use readonly preview for code resource tabs
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# 5-43 大 JSON 资源 tab 打开后卡死且无法关闭
|
||||
|
||||
## 状态
|
||||
|
||||
- 状态:done
|
||||
- owner:05-editor-mainline
|
||||
- 发现时间:2026-06-04
|
||||
- 修复时间:2026-06-04
|
||||
|
||||
## 现象
|
||||
|
||||
在 local-folder 文件树中打开 OCR sidecar 的 source-map JSON,例如:
|
||||
|
||||
- `/mnt/Data1T/research/DHA_cosmetics/literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json`
|
||||
|
||||
页面会把 JSON 当作可编辑 code 资源加载进 Tiptap resource tab。大 JSON 打开后主线程明显卡顿,标签页关闭按钮无响应或被资源编辑 session 的关闭保护阻止;其它普通资源 tab 仍可关闭。
|
||||
|
||||
## 根因
|
||||
|
||||
`document-resource-tab-runtime.js` 将 `.json` 归类为 `code`,并且 `markdown/text/code` 统一走 `openTiptapResourceTab`。这会为 JSON 创建完整 Tiptap 编辑 session、序列化大文档、挂本地文件事件 channel,并把 code 资源纳入 dirty close guard。
|
||||
|
||||
OCR source-map JSON 是机器生成的只读索引文件,不适合作为页面编辑器文档打开;大文件走 Tiptap 会放大渲染和关闭保护成本。
|
||||
|
||||
## 修复
|
||||
|
||||
- `code` 资源不再声明为 editable。
|
||||
- `.json` 等 code 资源改走轻量只读 `<pre><code>` 预览,不创建 Tiptap editor session。
|
||||
- 只读预览显示文件大小,超过预览上限时截断提示。
|
||||
- Markdown 和普通 text resource tab 仍保留原可编辑 Tiptap 路径。
|
||||
|
||||
## 验证
|
||||
|
||||
- `node --check rust/crates/mnote-web/browser/document-resource-tab-runtime.js`
|
||||
- `cargo build -p mnote-web --manifest-path rust/Cargo.toml`
|
||||
- 临时启动 `127.0.0.1:3023` 后用 Playwright 打开真实页面:
|
||||
- `rootUri=file:///mnt/Data1T/research/DHA_cosmetics`
|
||||
- 页面:`literature/dha_computational_modeling_literature.md`
|
||||
- 资源:`literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json`
|
||||
- 浏览器验证结果:
|
||||
- resource tab 成功打开只读 code preview。
|
||||
- 当前 panel 不存在 `mnote-leptos-tiptap-island-editor-root`,证明没有挂 Tiptap 编辑器。
|
||||
- 预览加载 `970708` 字符,meta 显示 `只读预览 · 971,098 bytes`。
|
||||
- 点击 tab close 后 `openResourcePanels=0`,主页面 tab 恢复选中。
|
||||
|
||||
## 备注
|
||||
|
||||
`task505-resource-tab-watch-contract-smoke.js` 在本次临时 standalone 服务上未通过,失败点是 Markdown resource 外部文件变更 watcher 未把写盘更新同步回 resource editor;该路径与本次 JSON 只读预览不同,未作为本 bug 验收条件。
|
||||
Reference in New Issue
Block a user