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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
'use strict';
// get current theme
function getNowTheme() {
let nowTheme = document.body.getAttribute('data-theme');
if (nowTheme === 'auto') {
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
} else {
return nowTheme === 'dark' ? 'dark' : 'light';
}
}
// update utterances theme
function updateUtterancesTheme(utterancesFrame) {
let targetTheme = getNowTheme();
if (utterancesFrame) {
if (targetTheme === 'dark') {
utterancesFrame.contentWindow.postMessage(
{
type: 'set-theme',
theme: 'photon-dark',
},
'https://utteranc.es'
);
} else {
utterancesFrame.contentWindow.postMessage(
{
type: 'set-theme',
theme: 'github-light',
},
'https://utteranc.es'
);
}
}
}
// load comment button only when comment area exist
if (document.querySelector('span.post-comment-notloaded')) {
document.querySelector('span.post-comment-notloaded').addEventListener('click', loadComment);
}
// to-top button
document.querySelector('.btn .btn-scroll-top').addEventListener('click', () => {
document.documentElement.scrollTop = 0;
});
// theme switch button
document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () => {
let nowTheme = getNowTheme();
let domTheme = document.body.getAttribute('data-theme');
let systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
if (domTheme === 'auto') {
// if now in auto mode, switch to user mode
document.body.setAttribute('data-theme', nowTheme === 'light' ? 'dark' : 'light');
localStorage.setItem('fuji_data-theme', nowTheme === 'light' ? 'dark' : 'light');
} else if (domTheme === 'light') {
// if now in user mode and light mode
document.body.setAttribute('data-theme', 'dark');
// if the theme want to switch is system theme
localStorage.setItem('fuji_data-theme', systemTheme === 'dark' ? 'auto' : 'dark');
} else {
// if now in user mode and dark mode
document.body.setAttribute('data-theme', 'light');
// if the theme want to switch is system theme
localStorage.setItem('fuji_data-theme', systemTheme === 'light' ? 'auto' : 'light');
}
// switch comment area theme
// if this page has comment area
let commentArea = document.querySelector('.post-comment');
if (commentArea) {
// if comment area loaded
if (document.querySelector('span.post-comment-notloaded').getAttribute('style')) {
if (commentArea.getAttribute('data-comment') === 'utterances') {
updateUtterancesTheme(document.querySelector('.post-comment iframe'));
}
if (commentArea.getAttribute('data-comment') === 'disqus') {
DISQUS.reset({
reload: true,
});
}
}
}
});
// search by fuse.js
function searchAll(key, index) {
let fuse = new Fuse(index, {
keys: ['title', 'tags'],
});
let result = fuse.search(key);
console.log(result);
if (result.length > 0) {
document.getElementById('search-result').innerHTML = template('search-result-template', result);
}
}
let urlParams = new URLSearchParams(window.location.search); // get params from URL
if (urlParams.has('search')) {
let key = urlParams.get('search'); // get search keyword
document.querySelector('.search-input input').setAttribute('value', key);
// get search index from json
let xhr = new XMLHttpRequest();
xhr.open('GET', '/index.json', true);
xhr.responseType = 'json';
xhr.onerror = function (e) {
console.error(`${xhr.status} ${xhr.statusText}`);
};
xhr.onload = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// use index json to search
console.log(xhr.response);
searchAll(key, xhr.response);
} else {
console.error(`${xhr.status} ${xhr.statusText}`);
}
}
};
xhr.send(null);
}
|