fix(extension): 完善任务标题展示和思维导图高清导出#383
Open
techotaku39 wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
改动概述
修复浏览器插件任务列表在生成过程中仍显示视频链接的问题,并完善插件端 / 网页端思维导图的预览、复制和 PNG 导出体验。
这次改动主要解决原项目里两个实际使用痛点:
最终效果是:插件任务从开始处理到生成完成都尽量展示视频标题;思维导图在插件端能完整预览、能复制、能下载高清 PNG;网页端也同步修复 PNG 导出 / 复制,并将导出尺寸校准到接近插件端已验证的清晰度和文件体积。
为什么
原项目在这些场景下体验不够完整:
任务生成过程中难以识别视频
之前虽然笔记生成完成后能显示视频标题,但下载中 / 生成中阶段仍然显示视频链接。用户如果同时处理多个视频,只看链接很难快速判断每个任务对应哪个视频。
插件端思维导图“生成了但不好用”
插件侧边栏和打开笔记页里的思维导图原本容易只显示半框或一条内容,实际阅读价值很低。这个问题不是合理设计,而是 markmap 在插件窄容器、图片节点和尺寸变化场景下没有正确适配。
插件端缺少和笔记页一致的思维导图操作能力
笔记页已有复制 / 下载能力,但插件端思维导图没有对应工具栏。用户在插件里看到导图后,还需要能直接复制成图片或下载 PNG,而不是只能看预览。
原有导出不是“可放大查看”的高清图
早期按侧边栏当前显示尺寸导出,得到的 PNG 尺寸很小,放大后文字发糊。固定写死宽度也不可靠,因为不同思维导图的宽高和文字大小差异很大。更合理的方式是根据实际内容 bbox 和字体大小反推导出倍率,让导出的文字有足够像素高度。
网页端和插件端导出行为不一致
网页端也存在 PNG 下载 / 复制无反应、导出偏移、大面积空白、无处理中提示、导出尺寸过大等问题。尤其同一视频下,插件端导出尺寸已经足够清晰,而网页端会被放大到接近浏览器 canvas 单边上限,导致 PNG 体积明显偏大。
因此这次不是只改一个常数,而是把插件端和网页端的思维导图导出链路整体整理了一遍:先保证能完整预览,再保证能复制 / 下载,再保证导出清晰,最后校准网页端和插件端的尺寸差异。
做了什么
插件任务标题展示
BillNote_extension/src/logic/task-display.ts,集中处理任务展示标题。audio_meta.titletab.title插件端思维导图预览
ResizeObserver,侧边栏尺寸变化后自动重新适配。插件端思维导图复制 / 下载
复制下载Tainted canvases may not be exported:foreignObject转换为纯 SVG 文本网页端思维导图导出 / 复制
mm.fit()ClipboardItem({ 'image/png': Promise<Blob> }),尽量保留用户点击手势权限。正在生成高清 PNG…正在复制高清 PNG…PNG 已开始下载PNG 已复制网页端和插件端导出尺寸校准
MIN_EXPORT_FONT_PX = 256MIN_EXPORT_WIDTH = 12800MAX_EXPORT_SCALE = 24MAX_CANVAS_SIDE = 32767WEB_EXPORT_SCALE_FACTOR = 0.34,用于校准网页端和插件端因为 bbox / 字体渲染差异导致的倍率偏差。32767px长边,生成过大的 PNG。相比原项目的改进
测试方式
pnpm typecheck && pnpm build(浏览器插件)通过npm run build(Web 前端)通过回归风险
影响范围集中在:
主要风险:
本 PR 不涉及后端接口、数据库、配置或部署流程变更。
Checklist
feature/*/fix/*/release/*/hotfix/*)develop;线上紧急 →master;发版 → 见 §4.3)type(scope): subject格式(CONTRIBUTING.md §5.1).env/ 大型二进制