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 是 3.1.x 系列中一次以“细节打磨”为主的迭代围绕编辑器排版、数据库属性视图交互、集市与插件体系、移动端体验以及开发者 API 五大方向做了大量收敛性改进同时移除了对 Android 7 与 iOS 14 的兼容支持。本文以 v3.1.25 变更记录 为主体结合仓库内核与前端源码逐项解读这批变更背后的实现逻辑帮助你在升级到 v3.1.25 后快速掌握新增能力与行为变化。版本概览一次以“细节”为主题的收敛性迭代v3.1.25 共包含 38 项功能改进、2 项平台支持移除、7 项缺陷修复、2 项开发重构与 4 项开发者能力增强。从变更清单看本版本没有引入全新的编辑器范式或数据库模型而是集中火力解决三类问题编辑器细节零宽空格清理、文本外观保持、相对字体大小、行级元素剪切与公式排版等高频编辑操作的手感问题数据库交互键盘操作补全Tab新建条目、箭头键切换选项、多选/关联字段编辑弹窗、含 emoji 内容的字段排序等开发者生态新增内核 API/api/block/batchUpdateBlock、改进/api/filetree/getPathByID并升级桌面端 Electron 内核到 v34.3.3。下文按主题分组展开逐项说明改动内容并给出可验证的源码依据。编辑器与排版细节从零宽空格到相对字号从空段落块中删除零宽空格零宽空格ZWSP\u200b在思源的数据结构中承担着“空内容占位”的职责。在前端常量定义中可以看到其统一入口app/src/constants.tspublic static readonly ZWSP: string \u200b在空段落、行内元素占位等场景下编辑器会注入 ZWSP 以维持可编辑性与拖拽目标相关渲染逻辑可见 app/src/block/util.ts 中的空段落与空行构造。v3.1.25 的改进在于当空段落块不再需要占位时主动删除其中的零宽空格避免用户在复制、统计或导出时遇到“看不见的字符”改善文档数据的纯净度。输入后带有外观的文本保持其外观此前用户在带行级样式的文本如加粗、斜体、行内代码、行级公式末尾继续输入时新输入内容可能丢失原外观。v3.1.25 修复了该行为在带外观的行级元素末尾输入新字符继承该外观标记保持排版连续性。这与“改进行级公式的‘优化排版’”issue 14344同属行级元素编辑体验优化。字体大小支持相对设置编辑器字体大小设置从“绝对字号”扩展为支持“相对设置”即基于默认字体大小按比例/倍数调整便于在不同设备与投影场景下整体缩放正文同时保持文档结构与层级比例。该能力属于编辑器外观配置范畴可在 app/src/config/editor.ts 对应的编辑设置面板中调整。行级元素 CtrlX 与删除行为改进行级元素的 CtrlXissue 14339此前剪切行级元素时可能连带破坏上下文或丢失外观本版本改进了剪切后的 DOM 处理确保剪切后光标位置与剩余内容结构正确。修复删除行级元素末尾异常issue 13881在行级元素如行内代码、标记末尾执行删除时不再出现光标跳变或元素意外被拆分的异常。查找替换后合并相同元素全局/文档内查找替换Replace在处理连续相同行级元素时会产生“被替换文本前后仍存在相同样式元素”的冗余结构。v3.1.25 在替换完成后对相邻的相同元素进行合并使替换结果更贴近用户预期减少手动清理。其他排版与渲染改进改进预览样式issue 13451文档预览与导出预览的样式细节进一步对齐编辑器渲染。改进图表编辑渲染issue 14288图表如 Mermaid编辑态与渲染态的过渡更平滑。改进行级公式的“优化排版”issue 14344公式美化后排版结果更稳定。改进块引用动态锚文本添加行级样式issue 14299动态锚文本现在可以正确携带行级样式引用块在文档中展示更丰富。改进创建引用子文档时锚文本转义issue 14289创建引用子文档时对锚文本中的特殊字符做转义处理避免生成错误的引用链接。块标块标识相关两项调整改进列表块的块标渲染位置issue 14211某些情况下不再显示块标issue 14304减少干扰性 UI 元素。导出渲染引擎替换html-to-image 取代 html2canvas本版本用html-to-image替换了html2canvasissue 14161用于导出为图片与水印预览等需要“DOM 转位图”的场景。前端实现中可以看到新的调用方式app/src/protyle/export/util.ts通过addScript(.../js/html-to-image.min.js?v1.11.13, protyleHtml2image)动态加载库随后调用window.htmlToImage.toBlob(...)生成导出图片并在水印预览中使用window.htmlToImage.toCanvas(...)。html-to-image基于 SVG foreignObject 渲染相比 html2canvas 对现代 CSS如color()函数、oklch颜色、部分混合模式支持更好这也是本期“改进预览样式”的底层支撑之一。该改动同时影响 PDF 导出链路中“超级块内公式块未完全显示”的修复效果见下文缺陷修复部分。数据库属性视图交互全面补全键盘操作数据库是思源 3.x 的核心能力v3.1.25 对这一模块的改进密度最高几乎全部围绕“减少鼠标、键盘直达”展开数据库支持在单元格末尾按Tab创建新条目issue 14305在最后一个单元格末尾按下Tab直接新增一行无需再点击行尾的“”按钮。复制数据库单元格并粘贴到文档标题中仅粘贴纯文本issue 14306跨数据库到标题的粘贴不再携带 HTML 结构避免污染标题格式。改进数据库多选和关联字段单元格弹出编辑issue 14308多选MultiSelect与关联Relation字段的弹窗编辑器在交互细节上更稳定。通过箭头键改进数据库单元格或弹出选项的切换issue 14309在单元格之间、以及下拉选项列表中均可使用方向键快速移动与选中。数据库资源字段支持键盘操作issue 14365资源字段图片、文件、附件可脱离鼠标完成打开、替换等操作。改进包含表情符号的内容的数据库字段排序issue 14323排序算法对 emoji 字符序列进行归一化处理避免含 emoji 的文本排序结果异常。数据库相关渲染与字段编辑逻辑集中在 app/src/config/ 与内核 kernel/av/属性视图值处理、kernel/sql/av_table.go表视图 SQL 层中本期键盘操作改进主要落地于前端表格/看板/画廊布局的事件绑定层。集市与插件体系搜索逻辑与加载策略优化集市搜索多个关键字使用 AND 逻辑issue 14293此前集市搜索多关键字时按 OR 匹配结果过于宽泛v3.1.25 改为多个关键字取交集AND检索更精准。集市包检索与安装逻辑见 kernel/bazaar/ 与 app/src/bazaar/。改进集市包加载issue 13950优化集市包主题、图标、模板、插件的加载时序与资源解析降低加载失败概率。集市插件包更新后重启该插件issue 14377插件在市场内完成更新后自动重启该插件实例使新版本立即生效无需重启整个内核。插件生命周期管理见 kernel/plugin/manager.go。修复插件自定义的 URL 链接不起作用issue 14314修复插件通过自定义协议或回调地址注册的 URL 无法被正确拦截触发的问题。支持按回车键进入子菜单issue 14343块菜单等子菜单项可一键Enter直达减少鼠标定位成本。改进“移动”自动填充搜索关键字issue 14337移动文档/块时目标路径搜索框会自动带入当前文档名等关键字提升检索效率。移动端与多端适配体验对齐与平台支持调整移动端体验改进在 iOS 上切换应用后改进重新连接提示issue 14279从后台切回应用时WebSocket 重连状态提示更清晰避免“假死”无反馈。移动端资源菜单中的“导出”改为调用浏览器下载issue 14280在移动端资源菜单中执行导出时改为调用系统浏览器下载适配移动端缺少桌面下载管道的限制。改进移动端的元素菜单issue 14283元素菜单的布局与触达面积针对触屏优化。移动端支持资源设置PR 14380资源Assets设置面板登录移动端可管理资源路径、重命名策略等对应设置项位于 app/src/config/assets.ts。修复移动端设备上无法长按粘贴issue 14277恢复移动端长按唤出系统粘贴菜单的能力。伺服服务端相关支持在 Harmony NEXT 上显示伺服 IPissue 14353鸿蒙 NEXT 端新增伺服 IP 展示便于用户在局域网内用其他设备访问本机工作空间。伺服相关实现见 app/electron/main.js 与内核 kernel/server/serve.go。平台支持调整不再支持 Android 7 与 iOS 14不再支持 Android 7issue 11010Android 7API 24 及以下将无法获得后续更新与兼容性保障建议升级系统或使用较新设备。不再支持 iOS 14issue 14264iOS 14 同样进入不支持名单。这意味着 v3.1.25 是面向旧系统用户的最后一个兼容版本移动端构建产物对应的内核入口可参考 kernel/mobile/kernel.go 与 kernel/harmony/kernel.go。缺陷修复本版本修复的 7 个问题除上文已并入各主题的修复外本版本还包含以下修复项全局搜索后闪卡管理会被错误高亮issue 13898全局搜索触发后闪卡管理面板的错误高亮状态被清除。粘贴嵌入块后出现异常issue 14255修复从其他文档粘贴嵌入块Blockquote Embed导致的结构异常。无法粘贴从 WPS 复制的特定文本issue 14301适配 WPS 复制内容中特有的 HTML 结构使其可正常粘贴为思源块。导出为 PDF 时超级块中的公式块未完全显示issue 14318修复 PDF 导出链路中超级块Super Block内行级公式渲染不全的问题该修复与上文 html-to-image 替换、渲染引擎调整同属导出渲染链路改造相关实现位于 app/src/protyle/export/ 与内核 kernel/model/export.go。开发重构与底层升级重构大纲函数setCurrentById的滚动策略PR 14312大纲面板跟随当前块的滚动定位逻辑重构修复快速滚动时定位抖动。升级到 Electron v34.3.3issue 14322桌面端 Electron 运行时升级至 v34.3.3获得 Chromium 与 Node.js 侧的稳定性与安全修复桌面端打包配置见 app/electron-builder.yml。开发者 API 增强两个内核 API 的变化v3.1.25 面向开发者提供了 2 个内核 API 级别的能力变化均可在官方 API 文档 docs/API.md 中检索到说明。改进/api/filetree/getPathByID该接口按块 ID 返回其在工作空间内的存储路径与所属笔记本 ID。路由注册位于 kernel/api/router.go实现位于 kernel/api/filetree.go入参{id: 20210808180320-fqgskfj}Block ID校验对id执行util.InvalidIDPattern合法性校验非法 ID 直接返回错误返回data为{notebook: ..., path: /.../....sy}其中path是.sy文档文件在数据仓库中的相对存储路径notebook是所属笔记本 ID。请求示例与返回结构完整定义见 docs/API.md。本期对该接口做了行为改进使其在“文档已被移动/重命名”等场景下返回路径更准确。新增/api/block/batchUpdateBlock该接口支持在一次请求中批量更新多个块内容路由注册于 kernel/api/router.go并挂载了CheckAuth、CheckAdminRole、CheckReadonly三层权限与只读检查。核心实现位于 kernel/api/block_op.go其处理流程清晰可循解析入参请求体中的blocks数组逐项校验 ID 模式每项包含id、data、dataType三个字段Markdown 转 DOM当dataType为markdown时先用 Lute 引擎将 Markdown 转换为 BlockDOMdataBlockDOM再统一BlockDOM2Tree解析加载目标块通过model.GetBlock(id, nil)校验块存在性并区分块类型构造事务对NodeDocument类型执行“整树清空 追加插入”策略清空时设置createEmptyParagraph: false避免前端生成空段落对普通块则复用api/block/updateBlock的更新逻辑——当目标是列表项且新内容是列表时会将列表项提升为根级节点以规避渲染错误对应 issue 4658 的历史问题批量执行将所有操作汇总到单个事务的DoOperations调用model.PerformTransactions执行并FlushTxQueue落库最后通过broadcastTransactions广播给前端各窗口。{ blocks: [ { id: 20210808180320-fqgskfj, dataType: markdown, data: 新的内容 } ] }该 API 适用于插件与自动化脚本对多个块做批量内容更新的场景可显著减少逐块调用updateBlock的网络与事务开销。事件与插件 API 修复插件 API 支持通过块 ID 打开块属性面板issue 14276插件可调用openAttr类 API 直接按块 ID 打开属性面板无需先定位块元素。相关插件 API 面定义见 app/src/plugin/ 与 kernel/plugin/。移动端返回导航时缺少事件issue 14296修复移动端从文档返回上级时未触发switch-protyle或loaded-protyle-static事件的问题保证插件监听这些事件时在移动端同样可靠。升级建议与小结v3.1.25 是 3.1.x 阶段的“细节收敛”版本编辑器输入手感、数据库键盘流操作与集市检索效率均有可感知的提升html-to-image替换html2canvas则是一次影响深远的渲染引擎换代为后续版本更现代的 CSS 导出能力铺路。开发者侧新增的batchUpdateBlock与改进的getPathByID值得插件作者重点关注。升级前请留意平台兼容性变化Android 7 与 iOS 14 用户需要评估设备是否在支持范围内。桌面端用户在升级后将随 Electron v34.3.3 获得更新的 Chromium 内核建议升级后顺手验证导出图片、PDF 导出与集市插件加载三类高影响功能。完整的逐项变更清单始终以仓库内 v3.1.25 变更记录 为准API 使用细节可查阅 API 文档 与 SY-FORMAT 文档。【免费下载链接】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),仅供参考
返回列表