MooTool Next Compose 查找条「查找」按钮补齐与 JSON 替换后 notice 清空:DIFF-289 对齐 Electron 的实现剖析

发布时间:2026/10/15 2:29:06
MooTool Next Compose 查找条「查找」按钮补齐与 JSON 替换后 notice 清空:DIFF-289 对齐 Electron 的实现剖析 桌面应用开发工具【免费下载链接】MooToolHandy tool set for developers项目地址https://gitcode.com/gh_mirrors/mo/MooTool点击查看免费下载导读本文围绕 MooTool NextCompose 桌面版的 DIFF-289 差异记录展开讲解两处与 Electron 版对齐的行为修正一是 JSON / 随手记 / Host / HTTP 四处查找条统一补齐独立「查找」按钮使点击与 Enter、下一处保持一致的向前跳转语义二是 JSON 单次替换、全部替换成功后清空状态栏/检查器的notice提示避免旧提示残留误导。通过仓库源码与测试用例的交叉印证读者可以完整掌握 Compose 版查找条「按钮 快捷键 守卫 notice 生命周期」的实现链路并可直接复用到 Electron 与 Compose 的双端行为对齐工作中。一、DIFF-289 的来龙去脉Electron 与 Compose 的查找条差距1.1 问题背景在 MooTool Next 的 Electron 版中FindReplaceBar查找条在查找输入框旁一直带有一个独立的「查找」按钮对应findReplace.find且点击该按钮与按下 Enter 的行为完全一致。而 Compose 版此前只有「上一处 / 下一处」两个步进按钮Enter 也仅由输入框的onFindQueryEnterKey触发缺失了与 Electron 对齐的显式「查找」按钮。与此同时JSON 替换成功后存在一处提示残留问题Electron 版在替换成功后清空notice而 Compose 版 JSON 工具在替换成功时虽然调用了clearJsonPathQueryResult()清空 JSONPath 结果但状态栏/检查器的notice仍可能保留旧提示例如上一次「格式化成功」「已导入」等导致界面状态与事实不符。1.2 本文涉及的修复范围按 DIFF-289 记录本次行为对齐包含两条规则JSON / 随手记 / Host / HTTP 查找条查找词非空时启用find.find即「查找」按钮点击执行与 Enter / 下一处相同的向前跳转JSON 单次替换、全部替换成功notice置空仍然保留clearJsonPathQueryResult()的调用。二、「查找」按钮四处查找条的统一补齐2.1 按钮本体MooButton 文案键find.find四处查找条JSON、随手记、Host、HTTP 响应的「查找」按钮实现高度一致均使用MooButton组件、国际化文案键find.find并复用同一套启用守卫模块查找条所在文件启用守卫跳转逻辑JSONJsonScreen.ktEditorFindBarPresentation.findQueryActionEnabledjumpFind(container, session, true)随手记QuickNoteScreen.ktEditorFindBarPresentation.findQueryActionEnabledjump(true)HostHostScreen.ktHostWiringPresentation.findQueryActionEnabledjumpFind(true)HTTP 响应HttpScreen.ktHttpResponsePresentation.findQueryActionEnabledstep(true)此外仅查找模式的通用组件 EditorFindOnlyBar.kt 同样实现了「查找」按钮供其他只查找不替换的编辑器场景复用。2.2 启用守卫EditorFindBarPresentationDIFF-289 的关键语义是「查找词非空时启用」。这一规则被收敛到了公共领域层对象 EditorFindBarPresentation.ktobject EditorFindBarPresentation { fun findQueryActionEnabled(query: String): Boolean query.isNotBlank() fun findStepActionEnabled(query: String): Boolean findQueryActionEnabled(query) }findQueryActionEnabled仅当查询词isNotBlank()时「查找」按钮可用空白串包括纯空格一律禁用findStepActionEnabled直接复用上述守卫因此「上一处 / 下一处」与「查找」按钮的启用条件完全一致。Host 与 HTTP 模块通过薄封装复用同一规则避免各端漂移HostWiringPresentation.ktfindQueryActionEnabled/findStepActionEnabled均委托给EditorFindBarPresentationHttpResponsePresentation.kt同样委托并在 KDoc 中注明「对齐 HTTP 响应查找条」。对应的单元测试 EditorFindBarPresentationTest.kt 覆盖了空串、纯空格、普通词与带空格词四类输入assertFalse(EditorFindBarPresentation.findQueryActionEnabled()) assertFalse(EditorFindBarPresentation.findStepActionEnabled( )) assertTrue(EditorFindBarPresentation.findQueryActionEnabled(x)) assertTrue(EditorFindBarPresentation.findStepActionEnabled( x ))HostWiringPresentationTest.kt 与 HttpResponsePresentationTest.kt 也分别验证了空串禁用、有效词启用的边界。2.3 点击即「向前跳转」与 Enter / 下一处的行为对齐DIFF-289 要求「点击执行与 Enter / 下一处相同的向前跳转」。以 JSON 为例JsonScreen.kt 的私有函数jumpFind统一收口了三种触发路径private fun jumpFind(container: AppContainer, session: JsonSession, forward: Boolean) { if (session.findQuery.isBlank()) return val match RstaFindNavigation.jump(session.editor, session.findQuery, session.findOptions, forward) if (match null) { container.toastFindNoMatches() } else { onEdt { session.editor.select(match.start, match.end) } } }「查找」按钮onClick { jumpFind(container, session, true); onChanged() }即forward true「下一处」按钮jumpFind(container, session, true)Enter 键输入框通过onFindQueryEnterKey { jumpFind(container, session, true); onChanged() }触发。三者最终都走到同一条向前跳转链路。底层跳转由 RstaFindNavigation.jump 承担它先通过选区计算selectionIndex有选区时取前进方向末端的maxOf/minOf再调用FindReplace.findNext返回下一处匹配。匹配失败时统一弹出「无匹配」ToasttoastFindNoMatches()。三、JSON 替换成功后的 notice 清空3.1 问题的具体表现Compose 版 JSON 工具的notice字段承载状态栏/检查器的提示信息如「格式化成功」「已导入」「Vault 已保存」等。在替换成功但未清空notice之前用户完成一次替换后底部状态栏仍可能残留与当前操作无关的旧提示与 Electron 版「替换即清空」的体验不一致。3.2 单次替换与全部替换的清空实现在 JsonScreen.kt 的查找条中两个替换按钮在成功分支都执行了相同的三连操作单次替换「替换」按钮MooButton(container.t(find.replace), onClick { onEdt { if (!RstaFindNavigation.replaceAndSelectNext(session.editor, session.findQuery, session.replaceText, session.findOptions)) { container.toastFindNoMatches() } else { session.findReplacedCount 1 session.clearJsonPathQueryResult() session.notice session.copyState CopyFeedbackPolicy.IDLE } onChanged() } })全部替换「全部替换」按钮MooButton(container.t(find.replaceAll), onClick { val (next, count) FindReplace.replaceAll(session.editor.text, session.findQuery, session.replaceText, session.findOptions) if (count 0) { container.toastFindNoMatches() } else { onEdt { session.editor.setText(next, recordUndo true) } session.clearJsonPathQueryResult() session.findReplacedCount count session.notice session.copyState CopyFeedbackPolicy.IDLE } onChanged() })成功分支的四个动作含义如下session.findReplacedCount 1或 count累加替换计数驱动查找条尾部「已替换 N 处」文本session.clearJsonPathQueryResult()清空检查器的 JSONPath 查询结果DIFF-289 明确「仍clearJsonPathQueryResult()」session.notice 即本次修复新增的核心动作置空状态栏提示session.copyState CopyFeedbackPolicy.IDLE重置复制反馈状态防止旧的「已复制」UI 状态残留。3.3clearJsonPathQueryResult与notice的职责边界clearJsonPathQueryResult定义在 JsonInspectorResult.kt实现极为简单——只把pathResult置空internal fun JsonSession.clearJsonPathQueryResult() { pathResult }它是JsonSession的扩展函数通过注释明确了适用场景「编辑器经EditorBuffer.setText批量替换后调用避免残留 JSONPath 结果」。因此它与notice是两个独立的状态通道pathResult对应检查器结果区的 JSONPath 查询/路径预览notice对应状态栏提示文本。DIFF-289 的修复正是在替换成功路径上把两条通道同时清空与 Electron 行为完全对齐。3.4 验证方式DIFF-289 记录的验证命令为./gradlew :composeApp:desktopTest --offline该命令在离线模式下运行 Compose 桌面端测试集。与本次改动直接相关的守卫测试分布在commonTestEditorFindBarPresentationTest与desktopTestHostWiringPresentationTest、HttpResponsePresentationTest它们覆盖了「查找词非空才启用」的完整边界条件。四、与相邻 DIFF 的关系查找条行为演进的一环DIFF-289 并非孤立改动它处于 Compose 查找条持续对齐 Electron 的行为链路上。仓库中相邻编号的差异记录可帮助理解上下文DIFF-280 查找条键盘与 DIFF-266 查找条选区预填建立查找条键盘事件与选区预填基础DIFF-283 JSON 无匹配提示、DIFF-290 HTTP 无匹配提示、DIFF-308 仅 Toast 提示处理「无匹配」时按钮点击 / Enter 的提示行为DIFF-287 替换计数与 DIFF-288 Host 替换计数定义「已替换 N 处」计数展示DIFF-289 查找按钮与替换 notice本文补齐「查找」按钮并清空替换后的 notice。这些记录共同说明 MooTool Next 通过「一条 DIFF 一个行为差异」的渐进式方式将 Compose 版界面逐步拉齐到 Electron 版体验。五、从源码结构可推断的复用要点结合上述实现从源码结构可以总结出三条可直接复用的工程模式行为守卫集中化启用条件query.isNotBlank()收敛到EditorFindBarPresentation各模块通过委托封装复用杜绝「各写一份、口径不一」的漂移多条触发路径统一收口「查找」按钮、Enter、上一处/下一处都调用同一个jump(forward)函数保证语义恒等于「向前/向后跳转」状态通道分层清理pathResultJSONPath 结果与notice状态栏提示分开管理业务操作成功时按需同时清空避免用户界面出现过期信息。结语DIFF-289 以两条极简规则完成了 Compose 查找条与 Electron 的两处对齐独立「查找」按钮让鼠标用户获得与键盘Enter完全一致的向前跳转体验JSON 替换成功后notice置空则消除了状态栏过期提示的误导。其实现细节——EditorFindBarPresentation的统一守卫、jumpFind的多路收口、clearJsonPathQueryResult与notice的分层清理——为后续所有查找/替换类工具的跨端对齐提供了清晰样板。如需复现或验证可直接运行./gradlew :composeApp:desktopTest --offline。赞分享桌面应用开发工具【免费下载链接】MooToolHandy tool set for developers项目地址https://gitcode.com/gh_mirrors/mo/MooTool点击查看免费下载相关推荐MooTool next-compose 查找条键盘交互指南对齐 Electron FindReplaceBar 的 Compose Desktop 实现MooTool next compose 查找条键盘交互指南对齐 Electron FindReplaceBar 的 Compose Desktop 实现 导桌面应用开发工具MooTool Next Compose JSON 查找无匹配提示实现详解DIFF-283 全面剖析MooTool Next Compose JSON 查找无匹配提示实现详解DIFF 283 全面剖析 本篇文章围绕 MooTool 的 Kotlin Com桌面应用开发工具MooTool next-compose Host 正文查找匹配高亮FindHighlightTransformation 与 Electron 查找高亮对位实现解析MooTool next compose Host 正文查找匹配高亮FindHighlightTransformation 与 Electron 查找高亮对位桌面应用开发工具上一篇dsa.js-data-structures-algorithms-javascript算法思维创新问题解决方法下一篇Ferret 标准库维护契约全解析上下文取消规则、能力分组与五大函数族契约创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询