后台代码配色预览不上色 + donate.png 404 一并修复 #14

Bug 1:后台预览的示例代码没有高亮。三层原因叠在一起。
  ① yang_hl_admin_assets() 从未 enqueue hljs 本体,而 yang_hl_enqueue()
     开头 `if (is_admin() || is_feed()) return;` 挡掉后台
     ⇒ 后台 window.hljs 恒 undefined ⇒ recolor() 静默 return。
     卡片的边框/顶栏是 data-kind 驱动的纯 CSS,切深浅配色时照样会变,
     看起来像"预览在工作,只是代码没颜色"。
  ② init() 里 applyTheme(sel.value, true) 传 noRecolor=true ⇒ 首屏永不上色,
     只有手动拨下拉框才有颜色(正是报障的"下面的示例代码并没有高亮")。
  ③ recolor() 缺 hljs 时只是 return,控制台零输出 ⇒ 极难定位。

  修法:
  - inc/theme-highlight.php:后台 enqueue hljs 本体,并作为 preview 脚本的
    硬依赖(不靠 WP 的加载顺序碰运气);前台 yang_hl_enqueue() 仍挡后台。
  - assets/js/highlight-admin.js:删掉 noRecolor 这个"能否跳过核心动作"的
    参数(调用方迟早会用错);首屏与切换走同一条路径。
  - 缺 hljs / 上色失败时 console.error 出声,并给 code 打
    data-unhighlighted、给卡片打 data-hl-failed;CSS 画橙色虚线框 +
    顶栏文字,让失败在画面上也看得出来,不再是一坨单色字。
  - 配色样式加载主路径改为 setTimeout(once, 125),link.onload 只作加速。
    onload 三情形不触发:样式表已在缓存、link 移除后重插、jsdom 无网络。

Bug 2:后台设置页报 donate.png 404。
  库里 g_donate_alipay / g_donate_wechat 存的是旧主题目录名
  `.../themes/kratos-master/assets/img/donate.png` 的绝对 URL。前台走
  yang_option_image() 有 yang_image_url_is_stale() 兜底,后台
  class-options-media-uploader.php 直接 echo $value,绕过检测。
  修在渲染处:预览图与"浏览文件"href 走检测后的 $preview(带
  function_exists 兜底),输入框仍显示库里的原值,不偷偷改用户数据。

版本 3.2.44 → 3.2.45。
This commit is contained in:
2026-10-26 12:20:33 +08:00
parent 03b0bc6cc1
commit 9da5e9e2df
5 changed files with 165 additions and 39 deletions
+23
View File
@@ -110,4 +110,27 @@
.yang-hl-preview-hint {
flex-basis: 100%;
}
}
/* ── 上色失败的可视标记 ──────────────────────────────────
*
* 3.2.44 的教训:预览没上色时,画面上和"某套配色本来就很朴素"
* 完全无法区分。用户在后台看到单色代码,只能猜是配色问题还是坏了。
* ⇒ 上色失败时打一个 data 标记,这里给一道醒目的虚线框,
* 让"坏了"和"配色就这样"在视觉上立刻分开。
*
* 判据:这是**降级提示**,不是正常态。所以颜色用后台的警告橙
* (#dba617),不引入新色值。 */
.yang-hl-preview .cb[data-hl-failed="1"] {
outline: 2px dashed #dba617;
outline-offset: 2px;
}
.yang-hl-preview .cb[data-hl-failed="1"] .cb-bar::after {
content: "预览未能上色,请查看浏览器控制台";
margin-left: auto;
padding-left: 8px;
font-size: 11px;
color: #dba617;
white-space: nowrap;
}