47 lines
2.8 KiB
Markdown
47 lines
2.8 KiB
Markdown
# 菜单与切换五项(2026-11-14)
|
||
|
||
> **勘误(2026-11-14 晚,见 docs/26)**:本文 §1 所称「全局监听 contextmenu 屏蔽 WebView 菜单」当时并未真正落进代码(提交里只有文档与说明文字),编辑区右键一直是浏览器自带菜单。屏蔽与编辑区自绘右键菜单已在 docs/26 补齐。
|
||
|
||
## 1. 屏蔽浏览器右键菜单
|
||
|
||
App 全局监听 contextmenu 并 preventDefault:编辑区、标题栏等处不再冒出
|
||
WebView 自带菜单;应用自绘菜单(标签/文件树/菜单栏)走各自的 contextmenu
|
||
处理,不受影响。文本输入框(input/textarea)保留系统菜单,方便粘贴。
|
||
|
||
## 2. 菜单点别处不消失——全量排查与统一修复
|
||
|
||
排查结论:菜单栏下拉本身有外部 mousedown + Esc 关闭(正常);文件树菜单
|
||
只监听 window click(右键点别处、滚动时不关);**标签右键菜单只在标签栏
|
||
内部点击时关闭,点编辑区/侧边栏都不消失(实测确认)**。
|
||
新增共享 hook `src/hooks/useDismiss.ts`:捕获阶段监听 mousedown/contextmenu
|
||
(先于 React 的 contextmenu 处理,右键另一个标签时先关旧再开新)、Esc、
|
||
窗口失焦、菜单外滚动,统一应用到标签菜单与文件树菜单;菜单栏维持原实现。
|
||
|
||
## 3. 左侧栏收起
|
||
|
||
开关逻辑本身正常(视图菜单与 Ctrl+Shift+L 实测可收起),问题在侧栏自身
|
||
没有入口、必须去菜单里找。侧栏页签行右侧新增收起按钮(‹);收起后编辑区
|
||
左上角出现展开按钮(›)。菜单与快捷键保持不变。
|
||
|
||
## 4. 源码模式切换按钮
|
||
|
||
编辑区右下角新增浮动按钮:渲染模式下显示「源码模式」、源码模式下显示
|
||
「即时渲染」,一键切换,不必再去视图菜单。打印时隐藏。
|
||
|
||
## 5. 右键菜单补文件类动作
|
||
|
||
- 标签右键:新增 保存(未修改时禁用)、另存为…、在新窗口打开(桌面模式)、
|
||
导出…、打印 / 导出 PDF…,与原有关闭类动作以分隔线分组。动作针对被右键
|
||
的标签:导出/打印会先激活该标签再执行,不必先手动切过去。
|
||
- 文件树右键(文件条目):新增 在新窗口打开(桌面模式)、另存为…、导出…、
|
||
打印 / 导出 PDF…。文件未打开时先打开/激活再执行(withOpenedTab)。
|
||
|
||
## 验证
|
||
|
||
- tsc 0 错误;vitest 97 通过 + 2 跳过(新增 tests/context-menus.test.tsx:
|
||
两类菜单的条目、回调、点别处关闭)。
|
||
- 无头浏览器实测:编辑区 contextmenu 已被 preventDefault;标签菜单条目齐全、
|
||
点编辑区后关闭;收起/展开按钮往返正常;源码按钮切换后源码编辑器出现、
|
||
按钮文案翻转为「即时渲染」。
|
||
- 待真机验:桌面模式下「在新窗口打开」两处入口、文件树导出/打印的先开后行链路。
|