Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
76 lines (67 loc) · 2.7 KB
/
Copy pathscript.js
File metadata and controls
76 lines (67 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(function () {
var root = document.documentElement;
/* ---------- Theme toggle ---------- */
var themeBtn = document.getElementById('theme-toggle');
var storedTheme = localStorage.getItem('site-theme');
if (storedTheme) root.setAttribute('data-theme', storedTheme);
function currentTheme() {
var attr = root.getAttribute('data-theme');
if (attr) return attr;
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
function updateThemeBtn() {
if (!themeBtn) return;
themeBtn.textContent = currentTheme() === 'dark' ? '☀' : '☾';
}
if (themeBtn) {
themeBtn.addEventListener('click', function () {
var next = currentTheme() === 'dark' ? 'light' : 'dark';
root.setAttribute('data-theme', next);
localStorage.setItem('site-theme', next);
updateThemeBtn();
});
}
updateThemeBtn();
/* ---------- Language toggle ---------- */
var langBtn = document.getElementById('lang-toggle');
var storedLang = localStorage.getItem('site-lang');
if (storedLang) root.setAttribute('lang', storedLang);
function updateLangBtn() {
if (!langBtn) return;
langBtn.textContent = root.getAttribute('lang') === 'zh' ? 'EN' : '中文';
}
if (langBtn) {
langBtn.addEventListener('click', function () {
var next = root.getAttribute('lang') === 'zh' ? 'en' : 'zh';
root.setAttribute('lang', next);
localStorage.setItem('site-lang', next);
updateLangBtn();
document.title = next === 'zh' ? document.body.dataset.titleZh : document.body.dataset.titleEn;
});
}
updateLangBtn();
/* ---------- Email de-obfuscation (kept out of static HTML to deter scrapers) ---------- */
var emailLink = document.getElementById('email-link');
if (emailLink) {
var user = emailLink.dataset.u.split('').reverse().join('');
var domain = emailLink.dataset.d.split('').reverse().join('');
var address = user + '@' + domain;
emailLink.addEventListener('click', function (e) {
e.preventDefault();
window.location.href = 'mailto:' + address;
});
emailLink.title = address;
}
/* ---------- Read more / abstract toggles ---------- */
document.querySelectorAll('.pub-item').forEach(function (item) {
var btn = item.querySelector('.read-more-btn');
if (!btn) return;
btn.addEventListener('click', function () {
var text = item.querySelector('.read-more-text');
text.classList.toggle('read-more-text--show');
var showing = text.classList.contains('read-more-text--show');
btn.querySelector('.lang-en').textContent = showing ? 'Read Less' : 'Read More';
btn.querySelector('.lang-zh').textContent = showing ? '收起' : '展开摘要';
});
});
})();