summaryrefslogtreecommitdiffstats
path: root/assets/js/fuji.js
diff options
context:
space:
mode:
authorDSRKafuU2020-06-19 00:40:29 +0800
committerGitHub2020-06-19 00:40:29 +0800
commitec4b32aa7ab6b71d0b9f756bc8d1c1b1e3cf8353 (patch)
tree65938a770dbb2c02f7028204d3cf77ca52990b97 /assets/js/fuji.js
parent1a9b75fa6216334d0a9a1c379dba212888ce6f76 (diff)
parentedbbfabae66d75217a95e3e0a054548502ebf2d9 (diff)
downloadhugo-theme-fuji-ec4b32aa7ab6b71d0b9f756bc8d1c1b1e3cf8353.tar.gz
hugo-theme-fuji-ec4b32aa7ab6b71d0b9f756bc8d1c1b1e3cf8353.tar.bz2
hugo-theme-fuji-ec4b32aa7ab6b71d0b9f756bc8d1c1b1e3cf8353.zip
Merge pull request #34 from amzrk2/dev
Pre-release v2.1.0
Diffstat (limited to 'assets/js/fuji.js')
-rw-r--r--assets/js/fuji.js99
1 files changed, 68 insertions, 31 deletions
diff --git a/assets/js/fuji.js b/assets/js/fuji.js
index 4bc9d56..14d63bc 100644
--- a/assets/js/fuji.js
+++ b/assets/js/fuji.js
@@ -10,23 +10,6 @@ function getNowTheme() {
}
}
-// update medium-zoom theme
-function updateMeidumTheme(mediumInst) {
- let targetTheme = getNowTheme();
- if (mediumInst) {
- mediumInst.detach();
- if (targetTheme === 'dark') {
- mediumInst = mediumZoom('.img-zoomable', {
- background: '#2f3136',
- });
- } else {
- mediumInst = mediumZoom('.img-zoomable', {
- background: '#fffffd',
- });
- }
- }
-}
-
// update utterances theme
function updateUtterancesTheme(utterancesFrame) {
let targetTheme = getNowTheme();
@@ -61,18 +44,6 @@ document.querySelector('.btn .btn-scroll-top').addEventListener('click', () => {
document.documentElement.scrollTop = 0;
});
-// init medium-zoom
-var mediumInst; // medium-zoom instance
-if (getNowTheme() === 'dark') {
- mediumInst = mediumZoom('.img-zoomable', {
- background: '#2f3136',
- });
-} else {
- mediumInst = mediumZoom('.img-zoomable', {
- background: '#fffffd',
- });
-}
-
// theme switch button
document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () => {
let nowTheme = getNowTheme();
@@ -95,8 +66,6 @@ document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () =>
localStorage.setItem('fuji_data-theme', systemTheme === 'light' ? 'auto' : 'light');
}
- // update medium background
- updateMeidumTheme(mediumInst);
// switch comment area theme
// if this page has comment area
let commentArea = document.querySelector('.post-comment');
@@ -114,3 +83,71 @@ document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () =>
}
}
});
+
+// search by fuse.js
+function searchAll(key, index, counter) {
+ let fuse = new Fuse(index, {
+ shouldSort: true,
+ distance: 10000,
+ keys: [
+ {
+ name: 'title',
+ weight: 2.0,
+ },
+ {
+ name: 'tags',
+ weight: 1.5,
+ },
+ {
+ name: 'content',
+ weight: 1.0,
+ },
+ ],
+ });
+ let result = fuse.search(key);
+ // console.log(result);
+ if (result.length > 0) {
+ document.getElementById('search-result').innerHTML = template('search-result-template', result);
+ return [new Date().getTime() - counter, result.length];
+ } else {
+ return 'notFound';
+ }
+}
+
+let urlParams = new URLSearchParams(window.location.search); // get params from URL
+if (urlParams.has('s')) {
+ let counter = new Date().getTime();
+ let infoElements = document.querySelectorAll('.search-result-info');
+ let key = urlParams.get('s'); // get search keyword, divided by space
+ 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 = () => {
+ infoElements[2].removeAttribute('style');
+ };
+ xhr.ontimeout = () => {
+ infoElements[2].removeAttribute('style');
+ };
+ xhr.onreadystatechange = () => {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ // use index json to search
+ // console.log(xhr.response);
+ counter = searchAll(key, xhr.response, counter);
+ // console.log(counter);
+ if (counter === 'notFound') {
+ infoElements[1].removeAttribute('style');
+ } else {
+ infoElements[0].innerHTML = infoElements[0].innerHTML.replace('[TIME]', counter[0]);
+ infoElements[0].innerHTML = infoElements[0].innerHTML.replace('[NUM]', counter[1]);
+ infoElements[0].removeAttribute('style');
+ }
+ } else {
+ infoElements[2].removeAttribute('style');
+ }
+ }
+ };
+ xhr.send(null);
+}