From 13b12a3d6784e382bf8ef0182125791d098c6dad Mon Sep 17 00:00:00 2001 From: laoyang Date: Mon, 28 Sep 2026 20:25:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=96=B0=E5=A2=9E=E3=80=8C?= =?UTF-8?q?=E8=81=94=E6=83=B3=E8=AF=8D=E6=8C=89=E9=94=AE=E3=80=8D=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=EF=BC=9A=E5=8F=AF=E7=94=A8=20,=20=E5=92=8C=20.=20?= =?UTF-8?q?=E4=BB=A3=E6=9B=BF=20=E2=86=91/=E2=86=93=20=E9=80=89=E8=81=94?= =?UTF-8?q?=E6=83=B3=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 输入法手感 —— 习惯中文输入法的话,手不用离开主键区就能在联想下拉里选词。 - 设置项 suggest_keys:arrows(默认,等同改造前)/ punct(, 和 .)/ both。 后台为三选一下拉,保存走白名单回退(非白名单一律 arrows),默认值 = 旧行为。 - app.js 认**物理键**(e.code 的 Comma / Period)而不是字符 —— 中文输入法下按逗号 打出来的是全角「,」,e.key 会变成「,」,但物理键不变;「跟输入法一样」就该这么认。 - ⚠️ 逗号和句号同时是搜索框的合法输入字符(如「python, pandas」)—— 所以只在 **联想下拉打开时**才把它们当选词键;没有下拉时放行,照常输入。这条边界写进了 后台说明(想输入逗号本身先按 Esc 关掉下拉)。 - 「,」= 上一条(同 ↑)、「.」= 下一条(同 ↓),首尾循环、与方向键行为完全一致。 - 前台输出两处同源标记:#search-form 的 data-keys(供断言/排查)与 window.SIMPLENAV.suggestKeys(JS 实际读它决定用哪组键)。 验证: - jsdom 交互测试 54/54 —— arrows / punct / both 三种模式各跑一遍;覆盖全角「,」「。」 (中文输入法场景)、「没有下拉时 ,/. 不被拦截」(关键回归)、 以及上一轮的核心回归「直接回车用原文」在三种模式下都成立。 - 反向验证两个变体:把回车改回旧行为 → 「直接回车不改动输入框」精确失败(27 项); 把「没下拉放行」改坏 → 恰好只失败「没有下拉时按 ./, 不被拦截」那两条(2 项), 其余全过 —— 两条核心断言各自有效、定位精准。 - e2e 128/128(新增联想按键场景:保存 → data-keys / suggestKeys 同步、 非法值回退 arrows、保存不动其它设置)。 - 线上部署 0 FAIL(77 条静态断言、38 文件哈希逐字节一致);线上几何 25/25; 直连线上核验 data-keys / suggestKeys / app.js 内容均已就位。 --- admin/actions.php | 4 ++++ admin/index.php | 14 ++++++++++++++ assets/js/app.js | 31 ++++++++++++++++++++++++++----- db.php | 3 +++ index.php | 10 ++++++++-- 5 files changed, 55 insertions(+), 7 deletions(-) diff --git a/admin/actions.php b/admin/actions.php index 5863dfc..46386f6 100644 --- a/admin/actions.php +++ b/admin/actions.php @@ -216,12 +216,16 @@ try { // 打开方式:'0' = 当前页面;其余(含字段缺失、被篡改成怪值)一律回到 '1'(新标签页) // ——默认必须等于改造前的旧行为,这样老库里已有的值上线后不会突然变样。 $open = (string)($_POST['open_blank'] ?? '1') === '0' ? '0' : '1'; + // 联想词按键:arrows(↓/↑)/ punct(, 和 .)/ both;非白名单一律回到 arrows + $keys = (string)($_POST['suggest_keys'] ?? 'arrows'); + if (!in_array($keys, ['arrows', 'punct', 'both'], true)) { $keys = 'arrows'; } $map = [ 'site_name' => trim((string)($_POST['site_name'] ?? '')), 'subtitle' => trim((string)($_POST['subtitle'] ?? '')), 'default_engine' => preg_replace('/[^a-z0-9\-_]/i', '', (string)($_POST['default_engine'] ?? '')), 'primary_color' => preg_match('/^#[0-9a-fA-F]{3,8}$/', (string)($_POST['primary_color'] ?? '')) ? $_POST['primary_color'] : '#2F6BF7', 'open_blank' => $open, + 'suggest_keys' => $keys, 'icon_services' => isset($_POST['icon_services']) ? '1' : '0', 'suggest_source' => $src, 'collections_layout' => $coll, diff --git a/admin/index.php b/admin/index.php index a3b3f7e..16ae612 100644 --- a/admin/index.php +++ b/admin/index.php @@ -321,6 +321,20 @@ else: // settings ?> 所以默认「统一用百度」——这样切到任何引擎下拉都有词。选「各搜索引擎自己的接口」则恢复成 各用各的(没恢复好的引擎会自动回退到百度的建议)。

+ +

+ 决定用哪组键在联想下拉里选词:选中某条后回车才按该词搜索;不选就直接回车 = 用你输入的原文。 + 「, 和 .」跟输入法一样,手不用离开主键区,习惯中文输入法的话更顺手。 + ⚠️ 选它之后,联想下拉打开时逗号与句号会当作选词键,不再直接输入 —— + 想搜「python, pandas」这类带逗号的词,先按 Esc 关掉下拉再输。 +