From 43d3e3a4f8fce0f10350af133021ec39926cfb51 Mon Sep 17 00:00:00 2001
From: Vaica <94612053+zqlit@users.noreply.github.com>
Date: Tue, 2 Jun 2026 14:34:23 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96pjax=E5=88=B7=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/deploy.yml | 6 ----
hugo.toml | 12 +++----
static/js/ai_greetings.js | 1 -
themes/Ying/assets/js/modules/linkify.js | 2 ++
themes/Ying/assets/js/modules/mypjax.js | 7 ++++
themes/Ying/assets/js/modules/pangu.js | 43 ++++++++++++++++++++++++
themes/Ying/layouts/_default/single.html | 11 +++---
themes/Ying/layouts/partials/footer.html | 7 ++--
8 files changed, 65 insertions(+), 24 deletions(-)
delete mode 100644 static/js/ai_greetings.js
create mode 100644 themes/Ying/assets/js/modules/pangu.js
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index ca6ed309..c131f41e 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -49,12 +49,6 @@ jobs:
continue-on-error: true
run: node scripts/optimize_images.js
- - name: Fetch AI Greetings
- continue-on-error: true
- env:
- RSS_API_TOKEN: ${{ secrets.RSS_API_TOKEN }}
- run: node scripts/fetch_greetings.js
-
- name: Commit Optimized Images
continue-on-error: true
run: |
diff --git a/hugo.toml b/hugo.toml
index 9b2afda1..9f1ee028 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -138,13 +138,13 @@ hasCJKLanguage = true
# 搜索提示文案 (Search Hint Text)
hint = "点击随笔 开始搜索"
- # 时段问候语 (Time-based Greetings)
+ # 时段问候语 (Time-based Greetings) - 数组格式,每次随机显示一条
[params.home_search.greetings]
- morning = "早安!元气满满" # 6:00 - 11:00
- noon = "中午好!记得干饭" # 11:00 - 14:00
- afternoon = "下午好!喝杯茶吧" # 14:00 - 18:00
- evening = "晚上好!放松一下" # 18:00 - 22:00
- night = "早点睡对皮肤好" # 22:00 - 6:00
+ morning = ["早安!元气满满", "新的一天,加油", "早起的鸟儿有虫吃"]
+ noon = ["中午好!记得干饭", "午饭吃好了吗,来读篇博客", "午后适合摸鱼"]
+ afternoon = ["下午好!喝杯茶吧", "下午茶时间到了", "下午适合发呆"]
+ evening = ["晚上好!放松一下", "今晚月色不错", "夜深了,读篇好文"]
+ night = ["早点睡对皮肤好", "夜猫子你好", "明天再看吧"]
# 节日问候语 (Holiday Greetings) - 格式: "MM-DD" = "文案"
# 已包含 2026 年农历节日对应的公历日期
diff --git a/static/js/ai_greetings.js b/static/js/ai_greetings.js
deleted file mode 100644
index 18f24886..00000000
--- a/static/js/ai_greetings.js
+++ /dev/null
@@ -1 +0,0 @@
-window.searchGreetings={"morning":"周末的早晨,适合赖床和码字","noon":"周末不用早起,但可以早起写博客","afternoon":"周末的早晨,适合赖床和码字","evening":"没有 deadline 的周末,写点想写的","night":"周末宅家,博客是最好的伴侣"};window.searchHolidays={};
\ No newline at end of file
diff --git a/themes/Ying/assets/js/modules/linkify.js b/themes/Ying/assets/js/modules/linkify.js
index 99ffc6f0..0f05cc51 100644
--- a/themes/Ying/assets/js/modules/linkify.js
+++ b/themes/Ying/assets/js/modules/linkify.js
@@ -75,6 +75,8 @@
if (content) linkify(content);
}
+ window.initLinkify = run;
+
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', run);
} else {
diff --git a/themes/Ying/assets/js/modules/mypjax.js b/themes/Ying/assets/js/modules/mypjax.js
index 7a0e47b0..d9435861 100644
--- a/themes/Ying/assets/js/modules/mypjax.js
+++ b/themes/Ying/assets/js/modules/mypjax.js
@@ -171,5 +171,12 @@ document.addEventListener("pjax:complete", function () {
} catch(e) { console.error('initImageFrameReveal error:', e); }
}
+ // 重载文章动画
+ if (typeof window.initPostScrollspy === 'function') window.initPostScrollspy();
+ // 重载链接卡片
+ if (typeof window.initLinkify === 'function') window.initLinkify();
+ // 重载中英文间距
+ if (typeof window.initPangu === 'function') window.initPangu();
+
refreshHeatmap();
});
diff --git a/themes/Ying/assets/js/modules/pangu.js b/themes/Ying/assets/js/modules/pangu.js
new file mode 100644
index 00000000..6c62690c
--- /dev/null
+++ b/themes/Ying/assets/js/modules/pangu.js
@@ -0,0 +1,43 @@
+// pangu.js - Auto insert spaces between CJK and half-width characters
+(function() {
+ // CJK Unified Ideographs + common ranges
+ var CJK = '⺀-⼀--ゟ゠-ヿ-ㄯ㈀-㋿㐀-䶿一-鿿豈-︰-﹏-';
+ var CJK_RE = new RegExp('([' + CJK + '])', 'g');
+
+ // Insert space between CJK and half-width (letters, digits, symbols)
+ function panguText(text) {
+ // CJK followed by half-width
+ text = text.replace(new RegExp('([' + CJK + '])([a-zA-Z0-9@#$%&=+<>|\\\\])', 'g'), '$1 $2');
+ // Half-width followed by CJK
+ text = text.replace(new RegExp('([a-zA-Z0-9@#$%&=+<>|\\\\])([' + CJK + '])', 'g'), '$1 $2');
+ return text;
+ }
+
+ function panguNode(root) {
+ var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false);
+ var nodes = [];
+ while (walker.nextNode()) {
+ var node = walker.currentNode;
+ // Skip code, pre, script, style, input
+ if (node.parentElement && node.parentElement.closest('code, pre, script, style, input, textarea')) continue;
+ if (node.textContent.length > 1) nodes.push(node);
+ }
+ nodes.forEach(function(node) {
+ var spaced = panguText(node.textContent);
+ if (spaced !== node.textContent) node.textContent = spaced;
+ });
+ }
+
+ function run() {
+ var content = document.querySelector('.post-content');
+ if (content) panguNode(content);
+ }
+
+ window.initPangu = run;
+
+ if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', run);
+ } else {
+ run();
+ }
+})();
diff --git a/themes/Ying/layouts/_default/single.html b/themes/Ying/layouts/_default/single.html
index f81f1947..7178691d 100644
--- a/themes/Ying/layouts/_default/single.html
+++ b/themes/Ying/layouts/_default/single.html
@@ -25,18 +25,17 @@
diff --git a/themes/Ying/layouts/partials/footer.html b/themes/Ying/layouts/partials/footer.html
index b5772114..1be2f8f5 100644
--- a/themes/Ying/layouts/partials/footer.html
+++ b/themes/Ying/layouts/partials/footer.html
@@ -68,13 +68,10 @@
{{ $artalkModule := resources.Get "js/modules/artalk.js" }}
{{ $pjaxLib := resources.Get "js/libs/pjax.js" }}
{{ $linkify := resources.Get "js/modules/linkify.js" }}
+{{ $pangu := resources.Get "js/modules/pangu.js" }}
-{{ $scripts := slice $iconfont $uikit $easylazyload $viewimage $utils $loader $cache $search $floatingTools $paragraphComments $infiniteScroll $artalkModule $nprogress $pjaxLib $linkify $main $mypjax $toast $tiaozhuan $reward | resources.Concat "js/bundle.js" | resources.Minify | resources.Fingerprint }}
+{{ $scripts := slice $iconfont $uikit $easylazyload $viewimage $utils $loader $cache $search $floatingTools $paragraphComments $infiniteScroll $artalkModule $nprogress $pjaxLib $pangu $linkify $main $mypjax $toast $tiaozhuan $reward | resources.Concat "js/bundle.js" | resources.Minify | resources.Fingerprint }}
- {{ $aiGreetings := "static/js/ai_greetings.js" }}
- {{ if os.FileExists $aiGreetings }}
-
- {{ end }}