写作增强:翻译服务商选了谁才显示谁对应的账号输入框 #26
之前四个密钥框(百度 APPID/密钥、有道应用 ID/密钥)无论选哪家服务商 都全摆在设置页上,四组输入框里永远有三组用不上。 改动: - inc/theme-options.php:新增 $yang_prov_class() 闭包,统一生成字段 的 class。服务端就按「当前已保存的服务商」把 yq-cond-hide 打好, 首帧不闪。分组标记 yang-prov / yang-prov-<key> 写在每个字段的 'class' 上,是**唯一的分组声明处**,JS 不再抄服务商清单。 原本一个 shared 的 info 块拆成三块,每家一句自己的说明。 - inc/options-framework/js/options-custom.js:重写 yq_toggle_writing_slug_fields()。两层条件(总开关 + 服务商归属) 必须在同一函数内合成一个结果再 toggleClass —— toggleClass 的 force 是绝对赋值,拆成两个函数各 toggle 一次的话结果只取决于 注册顺序。change 事件同时监听 #w_on_slug 与 #w_provider。 - style.css:3.2.57 -> 3.2.58 两处刻意避开的老坑: - 用 class + display:none !important,不用 jQuery show()/hide(), 后者会把行内 display 写成 block,回退 3.2.28 的 flow-root 修复。 - 隐藏不 disabled 输入框,密钥字段是「留空=不修改」语义,disabled 不随表单提交,会把已保存的密钥冲掉。
This commit is contained in:
@@ -135,25 +135,49 @@ jQuery(document).ready(function ($) {
|
||||
// 硬编码的 jQuery)。所以主题里其它 19 处 'requires' 其实都是死代码,
|
||||
// 这里不再往那个坑里加,直接写显式逻辑。
|
||||
//
|
||||
// 为什么连说明文字一起藏:用户没勾别名生成时,那段「去百度申请 APPID」
|
||||
// 只会是噪声。
|
||||
// ── 3.2.58 起这里变成**两层**条件 ──────────────────────────────────
|
||||
//
|
||||
// ⚠️ 用 delegation + toggleClass('yq-cond-hide'),不直接绑 input.hide():
|
||||
// 原因与上面的自动目录一致(.section 的 display 是 flow-root,
|
||||
// jQuery 会把行内 display 写成 block,回退 3.2.28 的布局修复)。
|
||||
// info 那块没有 .section 类,靠 CSS 里补的 .section-info 规则命中。
|
||||
// 第一层(原有):w_on_slug 勾了 → 这一整块才出现
|
||||
// 第二层(本次):w_provider 选了谁 → 只出现那一家的输入框
|
||||
//
|
||||
// 两层是「与」的关系:没勾别名生成时,整块都不该出现(不管下拉框选的谁)。
|
||||
//
|
||||
// 🔴🔴 最容易踩的坑:这两层必须**在同一个函数里一起算**,不能各写一个
|
||||
// yq_toggle_xxx() 分别去 toggleClass 同一批元素。因为 toggleClass 的
|
||||
// 第二参数是「绝对赋值」不是「与」:
|
||||
// 函数A 按第一层算出 true → 去掉 yq-cond-hide(显示)
|
||||
// 函数B 按第二层算出 false → 加上 yq-cond-hide(隐藏)
|
||||
// 两个都跑完之后,结果**只取决于谁后注册**,跟真实业务无关。
|
||||
// 表现就是「勾了别名生成、选了百度,百度框却时有时无」这种鬼故事。
|
||||
//
|
||||
// ── 分组是数据驱动的,不是 JS 里写死映射表 ────────────────────────
|
||||
// 服务商清单只有 theme-writing.php 的 yang_writing_providers() 一份。
|
||||
// 若在这里抄一遍 {baidu:[...], youdao:[...]},加一家要改两处,且不一致时
|
||||
// **不报错**,只表现成「新服务商的框永远不出现」。所以分组标记写在 PHP
|
||||
// 每个字段的 'class' 上:
|
||||
// yang-prov → 我参与「按服务商显示」
|
||||
// yang-prov-<key> → 我属于 <key> 这家
|
||||
// 这里只读 class、和下拉框当前 value 比对,零服务商知识。
|
||||
function yq_toggle_writing_slug_fields () {
|
||||
var on = jQuery('#w_on_slug').is(':checked')
|
||||
|
||||
// 整块的两个「共同成员」(不区分服务商的部分)
|
||||
jQuery('#section-w_provider').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#section-w_baidu_appid').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#section-w_baidu_key').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#section-w_youdao_appid').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#section-w_youdao_key').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#section-w_timeout').toggleClass('yq-cond-hide', !on)
|
||||
jQuery('#w_provider_help').toggleClass('yq-cond-hide', !on)
|
||||
|
||||
// 按服务商分组的字段:两层条件合成一个结果再赋值
|
||||
var provider = String(jQuery('#w_provider').val() || '')
|
||||
|
||||
jQuery('.yang-prov').each(function () {
|
||||
var el = jQuery(this)
|
||||
var belongs = el.hasClass('yang-prov-' + provider)
|
||||
// 第一层不成立时,第二层算什么都不重要 —— 一律隐藏
|
||||
el.toggleClass('yq-cond-hide', !(on && belongs))
|
||||
})
|
||||
}
|
||||
|
||||
jQuery(document).on('change', '#w_on_slug', yq_toggle_writing_slug_fields)
|
||||
// 两个控件任一变化都要重算:下拉框换了服务商、或者勾掉别名生成
|
||||
jQuery(document).on('change', '#w_on_slug, #w_provider', yq_toggle_writing_slug_fields)
|
||||
yq_toggle_writing_slug_fields()
|
||||
|
||||
// 写作增强:「每篇最多新增几个标签」只在「自动生成标签」勾选时才有意义。
|
||||
|
||||
Reference in New Issue
Block a user