Skip to content

Latest commit

 

History

History
48 lines (36 loc) · 4.65 KB

File metadata and controls

48 lines (36 loc) · 4.65 KB

v0.15 — 笔记体验打磨(标题切换 / 全站自适应 / 折叠 / 图片落盘 / 剪贴板导入 / 换行一致)

设计规格:2026-08-30-v0.15-notes-polish-design.md([ ] 已归档) 交付日期:2026-08-30(设计定稿 → 当日实施交付)

背景与目标

v0.14(编辑器 CM6 / 视觉系统 / 知识体系 / 采集质量)交付后,用户实测反馈 6 项(4 缺陷 + 2 体验增强),全部纳入 v0.15:

# 反馈 根因 交付方案
1 加 H1 后再点按钮无取消 headingCommand.ts/headingLines 对已是标题的行跳过(no-op),按钮高亮却暗示可切换 set-or-toggle 切换语义:同级别 → 剥除还原;其他 → 置为该级(CM + textarea 双路径)
2 组件大小不自适应 全站固定宽列硬编码(720px 固定 = 默认 960 窗宽下正文区 ~220px) 全站列自适应:useColumnLayout(拖拽 + 记忆 + min/max)+ ColumnResizer + ColumnBar(窄窗阈值自动折叠,<1100 大纲 / <860 侧栏 / <700 列表);迁移笔记/会话/知识/课堂 4 页 7 列;NoteImage 自适应
3 笔记组、笔记不可收起 组侧栏已按 kind 分区折叠,但中部列表平铺、列不可折叠 分组树 + 整列折叠:组头 chevron 收起(记忆 localStorage);组名点击=过滤(决策 1 保持);搜索/标签/排序激活树退化平铺;空组不渲染;三列均可折叠为 26px 窄条(大纲悬浮按钮并入统一体系)
4 用户插入图片需留副本 仅 🖼 文件选择复制;🌐 链接图只存 URL;剪贴板未落盘 图片落盘三入口:import_note_image_b64(剪贴板,字节嗅探定格式)+ import_note_image_url(ureq 下载限流 10MB/超时 10s/Content-Type+嗅探双保险,失败降级插原 URL)+ 现有文件入口不变;删除笔记顺带清理 notes-images/{nid}/
5 编辑模式不支持剪贴板导入图片 CM/textarea 均无 paste 处理 useClipboardImagePaste:event.clipboardData 同步提取(无权限弹窗)→ base64 → 落盘 → 插入引用(CM transaction / textarea 受控 + rAF 选区恢复);图片即时内联显示
6 编辑态换行、阅读态连上 CommonMark 软换行=空格(语义不一致,非 bug) remark-breaks:单换行渲染 <br>;零数据变更(存量自动修复);\/两空格强断行保留;不设开关(YAGNI)

方案要点与裁决

  • 不做巡检(用户裁决):入口全落盘后,粘贴/手写绝对路径仅剩一条漏网路径——登记为已知边界(§6),将来观察到高频再在 paste 钩子转换;保存管线不被改写(零惊喜)
  • 知识页详情面板保留既有内部折叠(34px 窄栏),仅加宽度 prop——统一列折叠体系仅接管笔记页三列与其他页面左列
  • 删除清理尽力而为:remove_dir_all 失败仅 eprintln(残留无害,不阻断删除;历史孤儿留垃圾回收后续任务)

验证

  • cargo test --test app_lib_tests:1840 passed / 3 failed——3 failed 为预存基线(ai_client 默认 Provider 断言旧 SiliconFlow、note_filter 两条黄金用例,CHANGELOG v0.13.8 已登记,与本版无关);本版新增 note_image 用例 5 个(嗅探定格式/垃圾拒绝/唯一命名/非 http 拒绝等)
  • cargo clippy:零新增警告
  • vitest:53 文件 431 用例全绿(新增:heading 切换 4 + markdownEdit 3 / NoteMarkdown 换行 4 / clipboardImage 5 / useColumnLayout 6 / 分组树 4 / tree 回归 5)
  • tsc --noEmit 零错误;vite build 通过(chunk 体积告警为存量)

状态

项 状态
① 标题切换 ✅ 交付(CM/textarea 双路径 + 4 单测改造)
② 全站自适应 ✅ 交付(4 页 7 列迁移;窄窗阈值折叠;宽度/折叠记忆)
③ 分组树 + 整列折叠 ✅ 交付(组折叠记忆;树退化规则;空组不渲染)
④ 图片落盘三入口 ✅ 交付(b64/url 命令 + 删除清理;12 用例全绿)
⑤ 剪贴板导入 ✅ 交付(双编辑器入口 + 尺寸预检 + status 降级提示)
⑥ 换行一致 ✅ 交付(remark-breaks;4 渲染断言用例)

遗留 / 已知边界

  • 正文手写/粘贴绝对路径图片引用:不改写(观察再议)
  • 历史孤儿图片目录:垃圾回收后续任务
  • ClassroomPage 607 行:超 600 硬限为预存债务(登记值 547 为过期快照已纠偏),拆分计划见豁免登记
  • 真机走查:待用户验收批执行(布局拖拽/折叠恢复/剪贴板粘贴/外链下载四项核心动线)