Align resource tabs with workbench review
This commit is contained in:
+53
@@ -0,0 +1,53 @@
|
||||
# 5-16 Editor Group 与 Resource Tab 安全收口 Checklist v1
|
||||
|
||||
> 状态:process
|
||||
>
|
||||
> 日期:2026-05-20
|
||||
>
|
||||
> Owner:`mnote-web` 主编辑区 runtime / resource tab
|
||||
|
||||
## 1. 目标
|
||||
|
||||
把当前浏览器内存版 resource tab 收口为轻量 editor group 模型的第一阶段:不引入完整 VSCode 多 group,不改变 Page Aggregate 事实源,只解决打开、激活、关闭和脏资源防护的最小闭环。
|
||||
|
||||
## 2. 允许修改范围
|
||||
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
||||
- `rust/crates/mnote-web/src/ssr/pages/document.rs`
|
||||
- `rust/crates/mnote-web/src/ssr/styles.rs`
|
||||
- `scripts/task457-main-editor-resource-tab-smoke.js`
|
||||
- 可新增一个聚焦 smoke,例如 `scripts/task460-resource-tab-close-dirty-smoke.js`
|
||||
|
||||
## 3. Checklist
|
||||
|
||||
- [ ] 定义轻量 `MainEditorTabEntry` / `mainEditorTabRegistry` 语义,至少包含 `id`、`kind`、`title`、`dirty`、`saving`、`hasExternalConflict`、`lastActiveAt`。
|
||||
- [x] 保持 page tab 为固定 tab,但 resource tab 激活/关闭应走同一套 registry 状态更新。
|
||||
- [x] `closeResourceTab` 关闭前检查 resource session:
|
||||
- [x] `saving=true` 时禁止直接关闭或等待保存完成。
|
||||
- [x] `hasExternalConflict=true` 时禁止静默关闭。
|
||||
- [x] `dirty=true` 时触发保存或确认流程;不得直接释放 session。
|
||||
- [x] 关闭 active resource tab 后按 MRU 回到上一个 resource tab;没有可用 resource tab 时才回到 page tab。
|
||||
- [x] resource tab 激活时更新稳定 `aria-selected`、`tabindex` 和 panel hidden 状态。
|
||||
- [ ] 打开失败时保留 error placeholder tab,允许用户关闭或重试,不要留下半注册状态。
|
||||
|
||||
## 4. 验收
|
||||
|
||||
- [x] 打开两个 resource tab,切到第二个并关闭后,应回到第一个,而不是无条件回 page tab。
|
||||
- [x] 编辑 resource markdown 后立即点关闭,不应静默丢弃未保存内容。
|
||||
- [x] 保存中关闭不会释放 editor session。
|
||||
- [ ] 打开失败的 resource tab 有明确错误占位,并可关闭。
|
||||
- [x] 现有 `task457-main-editor-resource-tab-smoke.js` 继续通过。
|
||||
- [x] 新增 close dirty / MRU smoke 通过。
|
||||
|
||||
## 4.1 本轮执行记录
|
||||
|
||||
- 已合入:resource tab MRU、关闭 guard、`aria-selected` / `tabindex` 同步、关闭后回退到上一个 resource tab。
|
||||
- 已新增:`scripts/task460-resource-tab-close-dirty-smoke.js` 覆盖近期本地输入后的关闭阻止。
|
||||
- 未完成:正式 `MainEditorTabEntry` 模型、打开失败 placeholder tab。
|
||||
|
||||
## 5. 非目标
|
||||
|
||||
- 不实现完整 VSCode preview / pinned / sticky / drag reorder。
|
||||
- 不实现 tab 持久化恢复。
|
||||
- 不改变 secondary pane 布局。
|
||||
- 不把 `resourceTabRegistry` 移到后端持久状态。
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
# 5-17 Resource Editor Kind 与 Smoke 矩阵 Checklist v1
|
||||
|
||||
> 状态:process
|
||||
>
|
||||
> 日期:2026-05-20
|
||||
>
|
||||
> Owner:资源打开 resolver / Office / Markdown/Text/Code/Image/PDF smoke
|
||||
|
||||
## 1. 目标
|
||||
|
||||
把资源类型识别和打开策略从分散 if/else 收口为轻量 resolver,并补齐当前缺失的类型 smoke。默认目标是主编辑区 resource tab;右侧边栏和新窗口必须作为显式目标保留。
|
||||
|
||||
## 2. 允许修改范围
|
||||
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
||||
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
|
||||
- `rust/crates/mnote-web/src/ssr/styles.rs`
|
||||
- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
|
||||
- `scripts/task457-main-editor-resource-tab-smoke.js`
|
||||
- `scripts/task459-local-markdown-attachment-tab-smoke.js`
|
||||
- 可新增 resource kind smoke
|
||||
|
||||
## 3. Checklist
|
||||
|
||||
- [ ] 定义轻量 resource editor resolver:
|
||||
- [ ] 输入:`name`、`mimeType`、`href`、`assetId`、`rootUri`、`path`、`openTarget`。
|
||||
- [ ] 输出:`editorKind`、`badgeKind`、`defaultOpenMode`、`editable`、`viewerUrl`。
|
||||
- [x] `.md` / `.markdown` / `.txt` / 常见 code 文件继续使用 tiptap resource editor。
|
||||
- [ ] Office 文件默认在主编辑区 tab 内 iframe 打开,显式新窗口仍可打开。
|
||||
- [x] PDF 使用独立 `pdf` badge kind,不再复用 ppt。
|
||||
- [x] image 使用 image badge kind 和 img viewer。
|
||||
- [x] unknown file 有明确 fallback:下载/新窗口/错误占位,不应无响应。
|
||||
- [ ] `active-tab`、`side`、`new-window` 三个 target 在同一 resolver 后执行,不再散落在 attachment capture 与 filetree click 中。
|
||||
|
||||
## 4. Smoke 矩阵
|
||||
|
||||
- [x] `.md` 上传/文件树点击 -> 主编辑区 tiptap tab,可编辑并写回资源文件。
|
||||
- [x] `.txt` -> 主编辑区 tiptap tab,可编辑并写回。
|
||||
- [x] `.json` 或 `.ts` -> 主编辑区 tiptap/code-like tab,可编辑并写回。
|
||||
- [ ] `.docx` -> 主编辑区 Office iframe,DocumentServer 可回源。
|
||||
- [ ] `.pptx` / `.xlsx` -> badge 颜色分别正确。
|
||||
- [x] `.pdf` -> 主编辑区 iframe,badge 为 pdf 独立颜色。
|
||||
- [x] image -> 主编辑区 img viewer。
|
||||
- [x] unknown binary -> 明确 fallback,不破坏 page tab 切换。
|
||||
|
||||
## 4.1 本轮执行记录
|
||||
|
||||
- 已合入:PDF 独立 badge kind、file fallback badge、resource kind smoke 覆盖 markdown/text/code/image/pdf 与未知类型不破坏 tab 回退。
|
||||
- 已验证:`scripts/task461-resource-kind-smoke.js` 与 `uploaded_attachment_rows_use_colored_file_badges` 通过。
|
||||
- 未完成:正式 resource editor resolver 抽象、Office DocumentServer 回源修复、`active-tab` / `side` / `new-window` 统一 resolver 后执行。
|
||||
|
||||
## 5. 非目标
|
||||
|
||||
- 不引入 Monaco / CodeMirror。
|
||||
- 不实现云端资源写回。
|
||||
- 不重构 OnlyOffice DocumentServer 部署。
|
||||
- 不改变 `.md` 资源仍用 tiptap 编辑的产品口径。
|
||||
Reference in New Issue
Block a user