From 02cc92dda2ad9339475d0169ced155922419cc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=98=89=E9=A2=96?= <568296125@qq.com> Date: Fri, 13 Mar 2026 23:04:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E5=86=99=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E4=B8=8E=E8=BD=AC=E6=8D=A2=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=8D=87=E7=BA=A7=E8=87=B3=20v3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 公式解析 - 废弃正则整体匹配,改用字符级逐字扫描,解决歧义和越界问题 - 完整支持 $、$$、\(...\)、\[...\] 四种公式格式 - 新增转义字符检测(isEscaped)、行内公式有效性校验 - Token 携带 start/end/lineStart/lineEnd/standaloneBlock 等精确位置信息 行内公式转换 - 通过 getTextSegments + resolveTextPosition 精确映射跨文本节点的选区 - 新增 waitForInlineInput 机制,确认公式输入框已打开再写入, 避免误替换正文内容 - 修复行内公式在新版 Notion 界面下因输入框未就绪导致的失败问题 块公式转换 - 非独立行的块公式自动降级为行内公式(添加 \displaystyle) - 采用 waitForCondition 轮询替代固定 sleep,大幅缩短等待时间 - 移除表格内公式的特殊处理逻辑;getEditableEditors 直接过滤表格单元格 - 删除 retryFailedBlockEquations 重试逻辑,由前置检测保证可靠性 性能与稳定性 - 引入两阶段转换:先处理全部行内公式,再处理块公式,避免位置漂移 - 关键等待时间从数百 ms 降至 10-40 ms 量级 - simulateKey / simulateShortcut 新增 target 参数,事件派发更精准 - 新增 DEBUG_MODE 开关,便于调试时输出详细日志 --- .gitignore | 1 + Notion-Formula-Auto-Conversion-Tool.js | 1584 +++++++++++++++--------- 2 files changed, 1017 insertions(+), 568 deletions(-) diff --git a/.gitignore b/.gitignore index 0fd0354..1277a92 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .history/ +.DS_Store diff --git a/Notion-Formula-Auto-Conversion-Tool.js b/Notion-Formula-Auto-Conversion-Tool.js index 7cfde5d..b34ed59 100644 --- a/Notion-Formula-Auto-Conversion-Tool.js +++ b/Notion-Formula-Auto-Conversion-Tool.js @@ -1,9 +1,9 @@ // ==UserScript== // @name Notion-Formula-Auto-Conversion-Tool // @namespace http://tampermonkey.net/ -// @version 2.0 +// @version 3.0 // @description 自动公式转换工具 -// @author skyance +// @author skyance、0xstride // @match https://www.notion.so/* // @grant GM_addStyle // @github https://github.com/skyance/Notion-Formula-Auto-Conversion-Tool @@ -12,10 +12,10 @@ // @updateURL https://update.greasyfork.org/scripts/525730/Notion-Formula-Auto-Conversion-Tool.meta.js // ==/UserScript== -(function() { - 'use strict'; +(function () { + "use strict"; - GM_addStyle(` + GM_addStyle(` /* 基础样式 */ #formula-helper { position: fixed; @@ -239,19 +239,24 @@ } `); - // 缓存DOM元素 - let panel, statusText, convertBtn, progressBar, progressContainer, collapseBtn; - let isProcessing = false; - let shouldStop = false; - let formulaCount = 0; - let isCollapsed = true; - let hoverTimer = null; - - function createPanel() { - panel = document.createElement('div'); - panel.id = 'formula-helper'; - panel.classList.add('collapsed'); - panel.innerHTML = ` + // 缓存DOM元素 + let panel, + statusText, + convertBtn, + progressBar, + progressContainer, + collapseBtn; + let isProcessing = false; + let shouldStop = false; + let formulaCount = 0; + let isCollapsed = true; + let hoverTimer = null; + const DEBUG_MODE = false; + function createPanel() { + panel = document.createElement("div"); + panel.id = "formula-helper"; + panel.classList.add("collapsed"); + panel.innerHTML = `