ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

思源笔记 v3.1.25 更新详解:编辑体验、数据库交互与开发者 API 的全面精进

思源笔记 v3.1.25 更新详解:编辑体验、数据库交互与开发者 API 的全面精进 思源笔记 v3.1.25 更新详解编辑体验、数据库交互与开发者 API 的全面精进【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan导读本文围绕思源笔记SiYuanv3.1.25 版本的完整变更记录展开逐项剖析该版本在编辑器体验、数据库属性视图交互、集市与插件、移动端适配、渲染导出、缺陷修复以及开发者 API 层面的改进。通过结合仓库内核Go与前端TypeScript源码帮助读者理解每项变更背后的实现原理与使用场景并掌握新增 API 的实际调用方式。版本概览一次细节驱动的小步快跑v3.1.25 是一个典型的改进细节型版本没有破坏性的架构变动但一次性引入了数十项功能改进、两项平台支持移除、七项缺陷修复、两项开发重构和四项开发者相关变更。从变更粒度看该版本的重点集中在编辑器输入体验、数据库单元格操作、移动端可用性与开发者 API 扩展四条主线上同时完成了两项重要的底层替换图片导出库由 html2canvas 切换为 html-to-image以及桌面端 Electron 运行时升级。完整变更记录位于仓库的 v3.1.25_zh_CHT.md另有 简体中文版 与 英文版。编辑器与排版体验改进空段落块的零宽空格清理当文档中出现空白段落时编辑器内部可能残留零宽空格ZWSP字符导致段落看似为空却无法被检索或合并。本版本修复了从空段落块中删除零宽空格的问题issue #12273。在源码中零宽空格的处理集中在 app/src/protyle/util/compatibility.ts其通过正则替换Constants.ZWSP常量来清理文本同时 app/src/protyle/wysiwyg/enter.ts 中的回车处理逻辑也针对图片后的零宽空格做了专门分支可见零宽空格是思源块结构中的一类特殊字符本版本的改进旨在让空块的清理更加彻底。查找替换后合并相同元素查找替换后合并相同元素issue #14236针对的是当替换操作使相邻块或行内元素内容变得一致时编辑器可能留下冗余的相邻相同元素。该改进会在替换完成后自动合并这些元素避免出现两个紧邻的相同文本节点使替换结果更接近手工编辑的排版效果。输入后保留文本外观与行级元素改进输入后带有外观的文本保持其外观issue #14267在带标记如加粗、斜体、颜色的文本后继续输入时新输入内容会沿用当前文本外观不再因输入动作而丢失样式。改进行级元素的 CtrlXissue #14339修复行级元素inline 元素剪切时的边界处理确保剪切后光标位置与内容不产生异常。改进行级公式的优化排版issue #14344行内公式在触发优化排版操作后其渲染布局更稳定。大纲跳转与浮动窗口改进大纲跳转定位issue #14245大纲面板点击条目跳转时滚动策略经重构后更精准对应下方开发重构中的setCurrentById改动。缩放后固定浮动窗口issue #14278窗口缩放后浮动窗口浮窗不再随缩放产生位置漂移。改进浮窗编辑内容同步issue #14326浮窗中编辑的内容与主文档视图保持实时同步。某些情况下不显示块标issue #14304修正特定场景下块标块操作图标的显示逻辑避免误显。改进列表块的块标渲染位置issue #14211列表项块标的渲染位置与缩进对齐关系更符合直觉。菜单与快捷键细节支持按回车键进入子菜单issue #14343在块菜单或上下文菜单中聚焦到带子菜单的条目后可直接按回车展开子菜单减少鼠标操作。改进块菜单中的宽度子菜单issue #14163块宽调节子菜单的交互与展示得到优化。改进行级元素菜单与元素菜单issue #14339 / #14283行级元素与移动端元素菜单的操作项组织更合理。字体大小相对设置字体大小支持相对设置issue #14231是本版本在排版设置层面的一项重要改进字体大小不再只能使用绝对值还支持以相对方式相对当前文档/编辑器基准字号设定。该能力让用户在不同设备与不同基准字号下都能获得一致的阅读层级也方便主题通过相对值做整体缩放。配合思源现有的外观设置体系用户可在设置 → 外观中按需组合绝对与相对字号。数据库属性视图交互增强数据库是思源笔记的属性视图与表格/看板类数据管理核心。v3.1.25 对数据库单元格的键盘与剪贴板交互进行了成体系的增强在单元格末尾按Tab创建新条目issue #14305光标位于表格最后一个单元格末尾时按 Tab即可快速追加新行无需点击工具栏的添加按钮大幅提升连续录入效率。复制数据库单元格并粘贴到文档标题中仅粘贴纯文本issue #14306数据库单元格内容通常携带结构化标记直接粘贴到文档标题会破坏标题格式本版本在粘贴时自动降级为纯文本。改进数据库多选和关联字段单元格弹出编辑issue #14308多选字段与关联字段在弹出编辑面板中的交互如多选勾选、关联搜索更加流畅。通过箭头键改进数据库单元格或弹出选项的切换issue #14309在单元格之间、以及弹出下拉选项之间支持方向键快速切换键盘流操作体验对齐主流表格软件。改进包含表情符号的内容的数据库字段排序issue #14323修复含 emoji 的字段值在排序时因 Unicode 代理对surrogate pair处理不当导致的排序错乱。数据库资源字段支持键盘操作issue #14365资源附件/图片字段不再只能通过鼠标打开选择器也支持键盘聚焦与操作。这些改进的共同方向是让数据库在纯键盘录入与整理场景下可用对重度使用属性视图做任务管理、阅读清单的用户价值明显。集市Bazaar与插件改进改进集市包加载issue #13950优化集市主题、插件、模板、图标等包的加载流程降低列表渲染与资源拉取对启动与切换的阻塞。集市搜索多个关键字使用 AND 逻辑issue #14293此前多个搜索词之间可能是 OR 或模糊匹配本版本改为多个关键字按 AND 逻辑同时命中搜索结果更精准、更符合多条件过滤的直觉。集市插件包更新后重启该插件issue #14377插件在集市中更新完成后自动重启避免更新后仍需手动启用才能让新代码生效。改进浏览器剪藏扩展issue #14316浏览器剪藏插件的页面采集与正文提取质量得到优化。移动端与跨平台改进移动端操作体验在 iOS 上切换应用后改进重新连接提示issue #14279iOS 上从其他应用切回思源时内核连接可能因后台挂起而断开本版本改进重连提示避免静默失联造成数据写入失败的困惑。移动端资源菜单中的导出改为调用浏览器下载issue #14280移动端对资源执行导出时改为调用系统浏览器下载规避 WebView 内下载行为不一致的问题。改进行动端的元素菜单issue #14283移动端长按元素弹出的菜单在触控场景下的可用性提升。移动端支持资源设置issue #14380PR移动端补齐了资源附件的设置能力缩小与桌面端的功能差距。移动端返回导航时缺少switch-protyle或loaded-protyle-static事件issue #14296该缺陷属于开发者事件层面——移动端从子文档返回时未派发相应 Protyle 生命周期事件导致依赖这些事件做初始化/清理的插件失效本版本补齐了事件派发。平台支持调整移除 Android 7 与 iOS 14v3.1.25 宣布不再支持 Android 7issue #11010与不再支持 iOS 14issue #14264。这意味着该版本及后续版本的最低系统要求上浮老设备的用户将停留在旧版本。对于仍在使用 Android 7 / iOS 14 及更早系统的用户建议评估升级设备或固定使用旧版安装包对于开发者这意味着可放心使用更高版本系统 API 而无需兼容旧内核。Harmony NEXT 显示伺服 IP支持在 Harmony NEXT 上显示伺服 IPissue #14353鸿蒙原生版设置界面中新增伺服服务IP 显示便于用户在局域网内从其他设备连接思源内核进行协作或同步排查。渲染、复制粘贴与导出改进用 html-to-image 替换 html2canvas本版本最值得关注的底层替换是使用 html-to-image 替换 html2canvasissue #14161。该替换影响所有导出为图片类操作包括块菜单中的导出图片、工具栏操作以及图表预览的图片化。在源码中html-to-image 已被多处置入图片导出入口 app/src/protyle/export/util.ts 通过动态加载html-to-image.min.js版本号v1.11.13并注册脚本标识protyleHtml2image工具栏的图片导出 app/src/protyle/toolbar/index.ts 与图表预览 app/src/protyle/preview/diagram.ts 均复用同一库。仓库内置的压缩产物位于 app/stage/protyle/js/html-to-image.min.js。与 html2canvas 相比html-to-image 基于 SVG foreignObject 实现 DOM 快照对现代 CSS如 flex、grid、CSS 变量、滤镜的还原度更好生成图片的文字与排版更接近实际渲染效果。其他渲染相关改进改进图表编辑渲染issue #14288图表如流程图、Mermaid 类图表在编辑态的渲染刷新更及时、位置更稳定。导出为 PDF 时超级块中的公式块未完全显示issue #14318缺陷修复修复超级块Super Block内嵌公式块在 PDF 导出时被截断的问题。改进预览样式issue #13451预览模式的排版细节优化。改进从 Claude 粘贴公式issue #14360从 Claude 对话复制的内容含 LaTeX 公式粘贴进思源时公式识别与转义更正确避免粘贴出乱码或错误渲染。剪贴板相关缺陷修复移动端设备上无法长按粘贴issue #14277修复移动端长按无法唤起粘贴的问题。无法粘贴从 WPS 复制的特定文字issue #14301修复 WPS 复制文本含特殊格式标记无法粘贴或粘贴异常的问题。支持表格多选单元格复制纯文本issue #14144改进表格中框选多个单元格后执行复制粘贴到外部时为纯文本格式更可控。删除行级元素结尾异常issue #13881缺陷修复修复删除行级元素时末尾内容异常残留的问题。粘贴嵌入块后出现异常issue #14255缺陷修复修复嵌入块Blockquote Embed粘贴后的结构异常。缺陷修复清单除上述按主题归类的修复外v3.1.25 还包含全局搜索后闪卡管理会被错误高亮issue #13898修复全局搜索操作后侧边栏闪卡Flashcard管理入口被误判为活跃状态而错误高亮的问题。插件自定义的 URL 链接不起作用issue #14314修复插件通过自定义协议或 URL 打开链接失效的问题涉及插件对浏览器/系统默认打开方式的调用链。开发重构与运行时升级重构大纲函数setCurrentById的滚动策略PR #14312大纲同步定位函数由强制滚动改为更平滑、可中断的策略配合改进大纲跳转定位issue #14245共同优化了长文档下的大纲导航体验。升级至 Electron v34.3.3issue #14322桌面端运行时由更早版本升级至 Electron v34.3.3带来 Chromium/V8 的安全修复与渲染性能改进。作为参考当前仓库主线 app/package.json 中依赖的 Electron 版本已进一步迭代如electron: 42.6.1说明该升级是思源桌面端持续跟进 Electron 版本的其中一环。开发者 API 变更源码级详解v3.1.25 面向开发者插件与脚本作者提供了两处内核 API 能力更新与一处事件修复改进内核 API/api/filetree/getPathByID该 API 用于通过块 ID 获取其所在文档路径与笔记本 ID。改进后issue #14275返回信息更完整稳定。其实现位于 kernel/api/filetree.gofunc getPathByID(c *gin.Context) { ret : gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) arg, ok : util.JsonArg(c, ret) if !ok { return } id : arg[id].(string) if util.InvalidIDPattern(id, ret) { return } p, notebook, err : model.GetPathByID(id) if err ! nil { ret.Code -1 ret.Msg err.Error() return } ret.Data map[string]any{ path: p, notebook: notebook, } }底层实现model.GetPathByIDkernel/model/file.go通过LoadTreeByBlockID(id)加载块所属文档树随后返回tree.Path文档在笔记本内的路径与tree.Box笔记本 ID。路由注册于 kernel/api/router.go为POST /api/filetree/getPathByID需通过鉴权CheckAuth。调用示例请求参数为id{ id: 20231231235959-abcdefg }返回结构{ code: 0, msg: , data: { path: /folder/subfolder/document.sy, notebook: 20210808180117-6v0mkxr } }新增内核 API/api/block/batchUpdateBlock该 API 用于批量更新多个块的内容issue #14335是单块更新接口updateBlock的批量版本。其实现位于 kernel/api/block_op.go核心流程为解析blocks数组参数每个元素包含id、data、dataType校验id合法性util.InvalidIDPattern若dataType为markdown先通过dataBlockDOM将 Markdown 转为 Block DOM使用 Lute 引擎将 Block DOM 解析为文档树luteEngine.BlockDOM2Tree通过model.GetBlock(id, nil)加载现有块组装事务Transaction与操作Operation批量执行并广播变更broadcastTransactions。路由注册于 kernel/api/router.goPOST /api/block/batchUpdateBlock鉴权要求为CheckAuthCheckAdminRoleCheckReadonly即需要登录、管理员角色且工作空间非只读。请求示例{ blocks: [ { id: 20240101000000-aaaaaaa, data: 更新后的段落内容, dataType: markdown }, { id: 20240101000000-bbbbbbb, data: p更新的另一个块/p, dataType: dom } ] }其中dataType支持markdown先经 Lute 转换与dom直接作为 Block DOM 解析两种输入格式。该接口对需要批量改写文档内容的插件如批量格式化、批量迁移尤其实用可在一次往返中完成多个块的更新并保证事务一致性。插件 API通过块 ID 打开块属性面板插件 API 支持通过块 ID 开启块属性面板issue #14276插件现在可以只凭块 ID 直接唤起该块的属性面板无需先定位并选中块简化了属性查看与修改类插件的实现。事件派发修复移动端返回导航时缺少switch-protyle或loaded-protyle-static事件issue #14296该问题虽在开发者分组本质是事件契约修复——移动端导航返回时未触发 Protyle 切换/加载事件导致监听这些事件的插件状态不同步本版本已补齐。更新与验证建议升级到 v3.1.25 前请先确认设备系统满足新要求Android 7 与 iOS 14 及更早系统不再受支持。升级后建议重点验证以下场景以确认各项改进生效在数据库表格最后一个单元格末尾按Tab确认能直接新建条目复制表格多选单元格后粘贴到文档标题确认仅保留纯文本使用导出为图片块菜单或工具栏生成含复杂 CSS 的区块对比 html-to-image 替换前后的渲染还原度在集市中同时搜索多个关键字确认按 AND 逻辑过滤插件作者可调用新增的/api/block/batchUpdateBlock做批量块更新并通过/api/filetree/getPathByID回查块所属文档路径。小结v3.1.25 是思源笔记在细节打磨上的一个高密度版本编辑器输入、数据库键盘流、移动端交互、集市检索、剪贴板与导出链路均得到系统性改进底层以 html-to-image 替换 html2canvas 提升了图片导出质量桌面端运行时升级至 Electron v34.3.3面向开发者则提供了批量更新块的batchUpdateBlock与改进后的getPathByID。对于插件作者该版本的内核 API 是值得立即跟进的升级点对于普通用户数据库与键盘交互的改进则能直接提升日常记录效率。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表