diff options
author | DSRKafuU | 2020-06-19 00:40:29 +0800 |
---|---|---|
committer | GitHub | 2020-06-19 00:40:29 +0800 |
commit | ec4b32aa7ab6b71d0b9f756bc8d1c1b1e3cf8353 (patch) | |
tree | 65938a770dbb2c02f7028204d3cf77ca52990b97 /assets/js/fuji.js | |
parent | 1a9b75fa6216334d0a9a1c379dba212888ce6f76 (diff) | |
parent | edbbfabae66d75217a95e3e0a054548502ebf2d9 (diff) | |
download | hugo-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.js | 99 |
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); +} |