diff options
author | DSRKafuU | 2020-06-04 07:21:13 -0500 |
---|---|---|
committer | GitHub | 2020-06-04 07:21:13 -0500 |
commit | 73244a2e55dffa158027126346eefd5bafa5fea8 (patch) | |
tree | c98ee9fbdb6f474579aa769a2a4b0b4c98fd21f1 /assets/js/fuji.js | |
parent | aa5290aeef9df1c583fdf30290351968df9215dc (diff) | |
parent | 914bf54c493b299268c293be33a8babf99b1cce2 (diff) | |
download | hugo-theme-fuji-73244a2e55dffa158027126346eefd5bafa5fea8.tar.gz hugo-theme-fuji-73244a2e55dffa158027126346eefd5bafa5fea8.tar.bz2 hugo-theme-fuji-73244a2e55dffa158027126346eefd5bafa5fea8.zip |
Merge pull request #24 from amzrk2/dev
v2 pre-release
Diffstat (limited to 'assets/js/fuji.js')
-rw-r--r-- | assets/js/fuji.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/assets/js/fuji.js b/assets/js/fuji.js new file mode 100644 index 0000000..4bc9d56 --- /dev/null +++ b/assets/js/fuji.js @@ -0,0 +1,116 @@ +'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 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(); + 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; +}); + +// 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(); + 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'); + } + + // update medium background + updateMeidumTheme(mediumInst); + // 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, + }); + } + } + } +}); |