diff --git a/assets/js/theme.min.js.map b/assets/js/theme.min.js.map
index 79206be8d..cd6169c3a 100644
--- a/assets/js/theme.min.js.map
+++ b/assets/js/theme.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/js/theme.js"],"names":[],"mappings":"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","file":"theme.min.js","sourcesContent":["class Util {\n forEach(elements, handler) {\n elements = elements || [];\n for (let i = 0; i < elements.length; i++) handler(elements[i]);\n }\n\n getScrollTop() {\n return (\n (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop\n );\n }\n\n isMobile() {\n return window.matchMedia('only screen and (max-width: 680px)').matches;\n }\n\n isTocStatic() {\n return window.matchMedia('only screen and (max-width: 960px)').matches;\n }\n\n animateCSS(element, animation, reserved, callback) {\n if (!Array.isArray(animation)) animation = [animation];\n element.classList.add('animated', ...animation);\n const handler = () => {\n element.classList.remove('animated', ...animation);\n element.removeEventListener('animationend', handler);\n if (typeof callback === 'function') callback();\n };\n if (!reserved) element.addEventListener('animationend', handler, false);\n }\n}\n\nclass Theme {\n constructor() {\n this.config = window.config;\n this.data = this.config.data;\n this.isDark = document.body.getAttribute('theme') === 'dark';\n this.util = new Util();\n this.newScrollTop = this.util.getScrollTop();\n this.oldScrollTop = this.newScrollTop;\n this.scrollEventSet = new Set();\n this.resizeEventSet = new Set();\n this.switchThemeEventSet = new Set();\n this.clickMaskEventSet = new Set();\n if (window.objectFitImages) objectFitImages();\n }\n\n initSVGIcon() {\n this.util.forEach(document.querySelectorAll('[data-svg-src]'), ($icon) => {\n fetch($icon.getAttribute('data-svg-src'))\n .then((response) => response.text())\n .then((svg) => {\n const $temp = document.createElement('div');\n $temp.insertAdjacentHTML('afterbegin', svg);\n const $svg = $temp.firstChild;\n $svg.setAttribute('data-svg-src', $icon.getAttribute('data-svg-src'));\n $svg.classList.add('icon');\n const $titleElements = $svg.getElementsByTagName('title');\n if ($titleElements.length) $svg.removeChild($titleElements[0]);\n $icon.parentElement.replaceChild($svg, $icon);\n })\n .catch((err) => {\n console.error(err);\n });\n });\n }\n\n initTwemoji() {\n if (this.config.twemoji) twemoji.parse(document.body);\n }\n\n initMenuMobile() {\n const $menuToggleMobile = document.getElementById('menu-toggle-mobile');\n const $menuMobile = document.getElementById('menu-mobile');\n $menuToggleMobile.addEventListener(\n 'click',\n () => {\n document.body.classList.toggle('blur');\n $menuToggleMobile.classList.toggle('active');\n $menuMobile.classList.toggle('active');\n },\n false\n );\n this._menuMobileOnClickMask =\n this._menuMobileOnClickMask ||\n (() => {\n $menuToggleMobile.classList.remove('active');\n $menuMobile.classList.remove('active');\n });\n this.clickMaskEventSet.add(this._menuMobileOnClickMask);\n }\n\n initSwitchTheme() {\n this.util.forEach(document.getElementsByClassName('theme-switch'), ($themeSwitch) => {\n $themeSwitch.addEventListener(\n 'click',\n () => {\n if (document.body.getAttribute('theme') === 'dark')\n document.body.setAttribute('theme', 'light');\n else document.body.setAttribute('theme', 'dark');\n this.isDark = !this.isDark;\n window.localStorage && localStorage.setItem('theme', this.isDark ? 'dark' : 'light');\n for (let event of this.switchThemeEventSet) event();\n },\n false\n );\n });\n }\n\n initSearch() {\n const searchConfig = this.config.search;\n const isMobile = this.util.isMobile();\n if (\n !searchConfig ||\n (isMobile && this._searchMobileOnce) ||\n (!isMobile && this._searchDesktopOnce)\n )\n return;\n\n const maxResultLength = searchConfig.maxResultLength ? searchConfig.maxResultLength : 10;\n const snippetLength = searchConfig.snippetLength ? searchConfig.snippetLength : 50;\n const highlightTag = searchConfig.highlightTag ? searchConfig.highlightTag : 'em';\n\n const suffix = isMobile ? 'mobile' : 'desktop';\n const $header = document.getElementById(`header-${suffix}`);\n const $searchInput = document.getElementById(`search-input-${suffix}`);\n const $searchToggle = document.getElementById(`search-toggle-${suffix}`);\n const $searchLoading = document.getElementById(`search-loading-${suffix}`);\n const $searchClear = document.getElementById(`search-clear-${suffix}`);\n if (isMobile) {\n this._searchMobileOnce = true;\n $searchInput.addEventListener(\n 'focus',\n () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n },\n false\n );\n document.getElementById('search-cancel-mobile').addEventListener(\n 'click',\n () => {\n $header.classList.remove('open');\n document.body.classList.remove('blur');\n document.getElementById('menu-toggle-mobile').classList.remove('active');\n document.getElementById('menu-mobile').classList.remove('active');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n },\n false\n );\n $searchClear.addEventListener(\n 'click',\n () => {\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n },\n false\n );\n this._searchMobileOnClickMask =\n this._searchMobileOnClickMask ||\n (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchMobileOnClickMask);\n } else {\n this._searchDesktopOnce = true;\n $searchToggle.addEventListener(\n 'click',\n () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n $searchInput.focus();\n },\n false\n );\n $searchClear.addEventListener(\n 'click',\n () => {\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n },\n false\n );\n this._searchDesktopOnClickMask =\n this._searchDesktopOnClickMask ||\n (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchDesktopOnClickMask);\n }\n $searchInput.addEventListener(\n 'input',\n () => {\n if ($searchInput.value === '') $searchClear.style.display = 'none';\n else $searchClear.style.display = 'inline';\n },\n false\n );\n\n const initAutosearch = () => {\n const autosearch = autocomplete(\n `#search-input-${suffix}`,\n {\n hint: false,\n autoselect: true,\n dropdownMenuContainer: `#search-dropdown-${suffix}`,\n clearOnSelected: true,\n cssClasses: { noPrefix: true },\n debug: true\n },\n {\n name: 'search',\n source: (query, callback) => {\n $searchLoading.style.display = 'inline';\n $searchClear.style.display = 'none';\n const finish = (results) => {\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'inline';\n callback(results);\n };\n if (searchConfig.type === 'lunr') {\n const search = () => {\n if (lunr.queryHandler) query = lunr.queryHandler(query);\n const results = {};\n this._index.search(query).forEach(({ ref, matchData: { metadata } }) => {\n const matchData = this._indexData[ref];\n let { uri, title, content: context } = matchData;\n if (results[uri]) return;\n let position = 0;\n Object.values(metadata).forEach(({ content }) => {\n if (content) {\n const matchPosition = content.position[0][0];\n if (matchPosition < position || position === 0) position = matchPosition;\n }\n });\n position -= snippetLength / 5;\n if (position > 0) {\n position += context.substr(position, 20).lastIndexOf(' ') + 1;\n context = '...' + context.substr(position, snippetLength);\n } else {\n context = context.substr(0, snippetLength);\n }\n Object.keys(metadata).forEach((key) => {\n title = title.replace(\n new RegExp(`(${key})`, 'gi'),\n `<${highlightTag}>$1${highlightTag}>`\n );\n context = context.replace(\n new RegExp(`(${key})`, 'gi'),\n `<${highlightTag}>$1${highlightTag}>`\n );\n });\n results[uri] = {\n uri: uri,\n title: title,\n date: matchData.date,\n context: context\n };\n });\n return Object.values(results).slice(0, maxResultLength);\n };\n if (!this._index) {\n fetch(searchConfig.lunrIndexURL)\n .then((response) => response.json())\n .then((data) => {\n const indexData = {};\n this._index = lunr(function () {\n if (searchConfig.lunrLanguageCode)\n this.use(lunr[searchConfig.lunrLanguageCode]);\n this.ref('objectID');\n this.field('title', { boost: 50 });\n this.field('tags', { boost: 20 });\n this.field('categories', { boost: 20 });\n this.field('content', { boost: 10 });\n this.metadataWhitelist = ['position'];\n data.forEach((record) => {\n indexData[record.objectID] = record;\n this.add(record);\n });\n });\n this._indexData = indexData;\n finish(search());\n })\n .catch((err) => {\n console.error(err);\n finish([]);\n });\n } else finish(search());\n } else if (searchConfig.type === 'algolia') {\n this._algoliaIndex =\n this._algoliaIndex ||\n algoliasearch(searchConfig.algoliaAppID, searchConfig.algoliaSearchKey).initIndex(\n searchConfig.algoliaIndex\n );\n this._algoliaIndex\n .search(query, {\n offset: 0,\n length: maxResultLength * 8,\n attributesToHighlight: ['title'],\n attributesToSnippet: [`content:${snippetLength}`],\n highlightPreTag: `<${highlightTag}>`,\n highlightPostTag: `${highlightTag}>`\n })\n .then(({ hits }) => {\n const results = {};\n hits.forEach(\n ({ uri, date, _highlightResult: { title }, _snippetResult: { content } }) => {\n if (results[uri] && results[uri].context.length > content.value) return;\n results[uri] = {\n uri: uri,\n title: title.value,\n date: date,\n context: content.value\n };\n }\n );\n finish(Object.values(results).slice(0, maxResultLength));\n })\n .catch((err) => {\n console.error(err);\n finish([]);\n });\n }\n },\n templates: {\n suggestion: ({ title, date, context }) =>\n `
${title}${date}
${context}
`,\n empty: ({ query }) =>\n `${searchConfig.noResultsFound}: \"${query}\"
`,\n footer: ({}) => {\n const { searchType, icon, href } =\n searchConfig.type === 'algolia'\n ? {\n searchType: 'algolia',\n icon: '',\n href: 'https://www.algolia.com/'\n }\n : {\n searchType: 'Lunr.js',\n icon: '',\n href: 'https://lunrjs.com/'\n };\n return ``;\n }\n }\n }\n );\n autosearch.on('autocomplete:selected', (_event, suggestion, _dataset, _context) => {\n window.location.assign(suggestion.uri);\n });\n if (isMobile) this._searchMobile = autosearch;\n else this._searchDesktop = autosearch;\n };\n if (searchConfig.lunrSegmentitURL && !document.getElementById('lunr-segmentit')) {\n const script = document.createElement('script');\n script.id = 'lunr-segmentit';\n script.type = 'text/javascript';\n script.src = searchConfig.lunrSegmentitURL;\n script.async = true;\n if (script.readyState) {\n script.onreadystatechange = () => {\n if (script.readyState == 'loaded' || script.readyState == 'complete') {\n script.onreadystatechange = null;\n initAutosearch();\n }\n };\n } else {\n script.onload = () => {\n initAutosearch();\n };\n }\n document.body.appendChild(script);\n } else initAutosearch();\n }\n\n initDetails() {\n this.util.forEach(document.getElementsByClassName('details'), ($details) => {\n const $summary = $details.getElementsByClassName('details-summary')[0];\n $summary.addEventListener(\n 'click',\n () => {\n $details.classList.toggle('open');\n },\n false\n );\n });\n }\n\n initLightGallery() {\n if (this.config.lightGallery)\n lightGallery(document.getElementById('content'), this.config.lightGallery);\n }\n\n initHighlight() {\n this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), ($preChroma) => {\n const $chroma = document.createElement('div');\n $chroma.className = $preChroma.className;\n const $table = document.createElement('table');\n $chroma.appendChild($table);\n const $tbody = document.createElement('tbody');\n $table.appendChild($tbody);\n const $tr = document.createElement('tr');\n $tbody.appendChild($tr);\n const $td = document.createElement('td');\n $tr.appendChild($td);\n $preChroma.parentElement.replaceChild($chroma, $preChroma);\n $td.appendChild($preChroma);\n });\n this.util.forEach(document.querySelectorAll('.highlight > .chroma'), ($chroma) => {\n const $codeElements = $chroma.querySelectorAll('pre.chroma > code');\n if ($codeElements.length) {\n const $code = $codeElements[$codeElements.length - 1];\n const $header = document.createElement('div');\n $header.className = 'code-header ' + $code.className.toLowerCase();\n const $title = document.createElement('span');\n $title.classList.add('code-title');\n $title.insertAdjacentHTML('afterbegin', '');\n $title.addEventListener(\n 'click',\n () => {\n $chroma.classList.toggle('open');\n },\n false\n );\n $header.appendChild($title);\n const $ellipses = document.createElement('span');\n $ellipses.insertAdjacentHTML('afterbegin', '');\n $ellipses.classList.add('ellipses');\n $ellipses.addEventListener(\n 'click',\n () => {\n $chroma.classList.add('open');\n },\n false\n );\n $header.appendChild($ellipses);\n const $copy = document.createElement('span');\n $copy.insertAdjacentHTML('afterbegin', '');\n $copy.classList.add('copy');\n const code = $code.innerText;\n if (\n this.config.code.maxShownLines < 0 ||\n code.split('\\n').length < this.config.code.maxShownLines + 2\n )\n $chroma.classList.add('open');\n if (this.config.code.copyTitle) {\n $copy.setAttribute('data-clipboard-text', code);\n $copy.title = this.config.code.copyTitle;\n const clipboard = new ClipboardJS($copy);\n clipboard.on('success', (_e) => {\n this.util.animateCSS($code, 'flash');\n });\n $header.appendChild($copy);\n }\n $chroma.insertBefore($header, $chroma.firstChild);\n }\n });\n }\n\n initTable() {\n this.util.forEach(document.querySelectorAll('.content table'), ($table) => {\n const $wrapper = document.createElement('div');\n $wrapper.className = 'table-wrapper';\n $table.parentElement.replaceChild($wrapper, $table);\n $wrapper.appendChild($table);\n });\n }\n\n initHeaderLink() {\n for (let num = 1; num <= 6; num++) {\n this.util.forEach(document.querySelectorAll('.single .content > h' + num), ($header) => {\n $header.classList.add('header-link');\n $header.insertAdjacentHTML(\n 'afterbegin',\n ``\n );\n });\n }\n }\n\n initToc() {\n const $toc = document.getElementById('toc-auto');\n if ($toc === null) {\n return;\n }\n const $tocCore = document.getElementById('TableOfContents');\n if (\n document.getElementById('toc-static').getAttribute('kept') === 'true' ||\n this.util.isTocStatic()\n ) {\n const $tocContentStatic = document.getElementById('toc-content-static');\n if ($tocCore.parentElement !== $tocContentStatic) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentStatic.appendChild($tocCore);\n }\n if (this._tocOnScroll) this.scrollEventSet.delete(this._tocOnScroll);\n } else {\n const $tocContentAuto = document.getElementById('toc-content-auto');\n if ($tocCore.parentElement !== $tocContentAuto) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentAuto.appendChild($tocCore);\n }\n $toc.style.visibility = 'visible';\n $toc.style.marginTop =\n document.querySelector('.single-title').clientHeight +\n document.querySelector('.post-meta').clientHeight +\n 'px';\n $toc.style.marginBottom = document.getElementById('post-footer').clientHeight + 'px';\n const $tocLinkElements = $tocCore.querySelectorAll('a:first-child');\n const $tocLiElements = $tocCore.getElementsByTagName('li');\n const $headerLinkElements = document.getElementsByClassName('header-link');\n const headerIsFixed = document.body.getAttribute('header-desktop') !== 'normal';\n const headerHeight = document.getElementById('header-desktop').offsetHeight;\n this._tocOnScroll =\n this._tocOnScroll ||\n (() => {\n const $comments = document.getElementById('comments');\n if ($comments) {\n $toc.style.marginBottom =\n document.getElementById('post-footer').clientHeight + $comments.clientHeight + 'px';\n }\n this.util.forEach($tocLinkElements, ($tocLink) => {\n $tocLink.classList.remove('active');\n });\n this.util.forEach($tocLiElements, ($tocLi) => {\n $tocLi.classList.remove('has-active');\n });\n const INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\n let activeTocIndex = $headerLinkElements.length - 1;\n for (let i = 0; i < $headerLinkElements.length - 1; i++) {\n const thisTop = $headerLinkElements[i].getBoundingClientRect().top;\n const nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;\n if (\n (i == 0 && thisTop > INDEX_SPACING) ||\n (thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING)\n ) {\n activeTocIndex = i;\n break;\n }\n }\n if (activeTocIndex !== -1) {\n $tocLinkElements[activeTocIndex].classList.add('active');\n let $parent = $tocLinkElements[activeTocIndex].parentElement;\n while ($parent !== $tocCore) {\n $parent.classList.add('has-active');\n $parent = $parent.parentElement.parentElement;\n }\n }\n });\n this._tocOnScroll();\n this.scrollEventSet.add(this._tocOnScroll);\n }\n }\n\n initMath() {\n if (this.config.math) renderMathInElement(document.body, this.config.math);\n }\n\n initMermaid() {\n const $mermaidElements = document.getElementsByClassName('mermaid');\n if ($mermaidElements.length) {\n mermaid.initialize({ startOnLoad: false, theme: 'default' });\n this.util.forEach($mermaidElements, ($mermaid) => {\n mermaid.mermaidAPI.render(\n 'svg-' + $mermaid.id,\n this.data[$mermaid.id],\n (svgCode) => {\n $mermaid.insertAdjacentHTML('afterbegin', svgCode);\n },\n $mermaid\n );\n });\n }\n }\n\n initEcharts() {\n this._echartsOnSwitchTheme =\n this._echartsOnSwitchTheme ||\n (() => {\n this._echartsArr = this._echartsArr || [];\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].dispose();\n }\n this._echartsArr = [];\n this.util.forEach(document.getElementsByClassName('echarts'), ($echarts) => {\n const chart = echarts.init($echarts, this.isDark ? 'dark' : 'macarons', {\n renderer: 'svg'\n });\n chart.setOption(JSON.parse(this.data[$echarts.id]));\n this._echartsArr.push(chart);\n });\n });\n this.switchThemeEventSet.add(this._echartsOnSwitchTheme);\n this._echartsOnSwitchTheme();\n this._echartsOnResize =\n this._echartsOnResize ||\n (() => {\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].resize();\n }\n });\n this.resizeEventSet.add(this._echartsOnResize);\n }\n\n initMapbox() {\n if (this.config.mapbox) {\n mapboxgl.accessToken = this.config.mapbox.accessToken;\n mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);\n this._mapboxArr = this._mapboxArr || [];\n this.util.forEach(document.getElementsByClassName('mapbox'), ($mapbox) => {\n const {\n lng,\n lat,\n zoom,\n lightStyle,\n darkStyle,\n marked,\n navigation,\n geolocate,\n scale,\n fullscreen\n } = this.data[$mapbox.id];\n const mapbox = new mapboxgl.Map({\n container: $mapbox,\n center: [lng, lat],\n zoom: zoom,\n minZoom: 0.2,\n style: this.isDark ? darkStyle : lightStyle,\n attributionControl: false\n });\n if (marked) {\n new mapboxgl.Marker().setLngLat([lng, lat]).addTo(mapbox);\n }\n if (navigation) {\n mapbox.addControl(new mapboxgl.NavigationControl(), 'bottom-right');\n }\n if (geolocate) {\n mapbox.addControl(\n new mapboxgl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true\n },\n showUserLocation: true,\n trackUserLocation: true\n }),\n 'bottom-right'\n );\n }\n if (scale) {\n mapbox.addControl(new mapboxgl.ScaleControl());\n }\n if (fullscreen) {\n mapbox.addControl(new mapboxgl.FullscreenControl());\n }\n mapbox.addControl(new MapboxLanguage());\n this._mapboxArr.push(mapbox);\n });\n this._mapboxOnSwitchTheme =\n this._mapboxOnSwitchTheme ||\n (() => {\n this.util.forEach(this._mapboxArr, (mapbox) => {\n const $mapbox = mapbox.getContainer();\n const { lightStyle, darkStyle } = this.data[$mapbox.id];\n mapbox.setStyle(this.isDark ? darkStyle : lightStyle);\n mapbox.addControl(new MapboxLanguage());\n });\n });\n this.switchThemeEventSet.add(this._mapboxOnSwitchTheme);\n }\n }\n\n initTypeit() {\n if (this.config.typeit) {\n const typeitConfig = this.config.typeit;\n const speed = typeitConfig.speed ? typeitConfig.speed : 100;\n const cursorSpeed = typeitConfig.cursorSpeed ? typeitConfig.cursorSpeed : 1000;\n const cursorChar = typeitConfig.cursorChar ? typeitConfig.cursorChar : '|';\n Object.values(typeitConfig.data).forEach((group) => {\n const typeone = (i) => {\n const id = group[i];\n const instance = new TypeIt(`#${id}`, {\n strings: this.data[id],\n speed: speed,\n lifeLike: true,\n cursorSpeed: cursorSpeed,\n cursorChar: cursorChar,\n waitUntilVisible: true,\n afterComplete: () => {\n if (i === group.length - 1) {\n if (typeitConfig.duration >= 0)\n window.setTimeout(() => {\n instance.destroy();\n }, typeitConfig.duration);\n return;\n }\n instance.destroy();\n typeone(i + 1);\n }\n }).go();\n };\n typeone(0);\n });\n }\n }\n\n initComment() {\n if (this.config.comment) {\n if (this.config.comment.artalk) {\n const artalk = new Artalk(this.config.comment.artalk);\n artalk.setDarkMode(this.isDark);\n this.switchThemeEventSet.add(() => {\n artalk.setDarkMode(this.isDark);\n });\n this.config.lightGallery &&\n this.config.comment.artalk.lightgallery &&\n artalk.on('comments-loaded', () => {\n document.querySelectorAll('.atk-comment .atk-content').forEach(($content) => {\n const $imgs = $content.querySelectorAll(\n 'img:not([atk-emoticon]):not([atk-lightbox-loaded])'\n );\n $imgs.forEach(($img) => {\n $img.setAttribute('atk-lightbox-loaded', '');\n const $link = document.createElement('a');\n $link.setAttribute('class', 'atk-img-link');\n $link.setAttribute('href', $img.src);\n $link.setAttribute('data-src', $img.src);\n $link.append($img.cloneNode());\n $img.replaceWith($link);\n });\n if ($imgs.length) lightGallery($content, { selector: '.atk-img-link' });\n });\n });\n return artalk;\n }\n if (this.config.comment.gitalk) {\n this.config.comment.gitalk.body = decodeURI(window.location.href);\n const gitalk = new Gitalk(this.config.comment.gitalk);\n gitalk.render('gitalk');\n return gitalk;\n }\n if (this.config.comment.valine) {\n return new Valine(this.config.comment.valine);\n }\n if (this.config.comment.waline) {\n return new Waline(this.config.comment.waline);\n }\n if (this.config.comment.utterances) {\n const utterancesConfig = this.config.comment.utterances;\n const script = document.createElement('script');\n script.src = 'https://utteranc.es/client.js';\n script.type = 'text/javascript';\n script.setAttribute('repo', utterancesConfig.repo);\n script.setAttribute('issue-term', utterancesConfig.issueTerm);\n if (utterancesConfig.label) script.setAttribute('label', utterancesConfig.label);\n script.setAttribute(\n 'theme',\n this.isDark ? utterancesConfig.darkTheme : utterancesConfig.lightTheme\n );\n script.crossOrigin = 'anonymous';\n script.async = true;\n document.getElementById('utterances').appendChild(script);\n this._utterancesOnSwitchTheme =\n this._utterancesOnSwitchTheme ||\n (() => {\n const message = {\n type: 'set-theme',\n theme: this.isDark ? utterancesConfig.darkTheme : utterancesConfig.lightTheme\n };\n const iframe = document.querySelector('.utterances-frame');\n iframe.contentWindow.postMessage(message, 'https://utteranc.es');\n });\n this.switchThemeEventSet.add(this._utterancesOnSwitchTheme);\n return;\n }\n if (this.config.comment.twikoo) {\n const twikooConfig = this.config.comment.twikoo;\n twikoo.init(twikooConfig);\n if (twikooConfig.commentCount) {\n // https://twikoo.js.org/api.html#get-comments-count\n twikoo\n .getCommentsCount({\n envId: twikooConfig.envId,\n region: twikooConfig.region,\n urls: [window.location.pathname],\n includeReply: false\n })\n .then(function (response) {\n // example: [\n // { url: '/2020/10/post-1.html', count: 10 },\n // { url: '/2020/11/post-2.html', count: 0 },\n // { url: '/2020/12/post-3.html', count: 20 }\n // ]\n // If there is an element with id=\"twikoo-comment-count\", set its innerHTML to the count of comments\n const twikooCommentCount = document.getElementById('twikoo-comment-count');\n if (twikooCommentCount) twikooCommentCount.innerHTML = response[0].count;\n });\n }\n return;\n }\n }\n }\n\n initCookieconsent() {\n if (this.config.cookieconsent) cookieconsent.initialise(this.config.cookieconsent);\n }\n\n getSiteTime() {\n let now = new Date();\n let run = new Date(this.config.ibruce.siteTime);\n let runTime = (now - run) / 1000,\n days = Math.floor(runTime / 60 / 60 / 24),\n hours = Math.floor(runTime / 60 / 60 - 24 * days),\n minutes = Math.floor(runTime / 60 - 24 * 60 * days - 60 * hours),\n seconds = Math.floor(\n (now - run) / 1000 - 24 * 60 * 60 * days - 60 * 60 * hours - 60 * minutes\n );\n document.querySelector('.run-times').innerHTML = `${days},${String(hours).padStart(\n 2,\n 0\n )}:${String(minutes).padStart(2, 0)}:${String(seconds).padStart(2, 0)}`;\n }\n\n initSiteTime() {\n if (this.config.ibruce.enable && this.config.ibruce.siteTime) {\n this.siteTime = setInterval(this.getSiteTime, 500);\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n return clearInterval(this.siteTime);\n }\n this.siteTime = setInterval(this.getSiteTime, 500);\n });\n }\n }\n\n initServiceWorker() {\n if (this.config.enablePWA && 'serviceWorker' in navigator) {\n navigator.serviceWorker\n .register('/service-worker.min.js', { scope: '/' })\n .then(function (registration) {\n // console.log('Service Worker Registered');\n })\n .catch(function (error) {\n console.error('error: ', error);\n });\n navigator.serviceWorker.ready.then(function (registration) {\n // console.log('Service Worker Ready');\n });\n }\n }\n\n initWatermark() {\n this.config.watermark.enable &&\n new Watermark({\n content:\n this.config.watermark.content ||\n '
FixIt Theme',\n appendTo: this.config.watermark.appendto || '.wrapper>main',\n opacity: this.config.watermark.opacity,\n width: this.config.watermark.width,\n height: this.config.watermark.height,\n rowSpacing: this.config.watermark.rowspacing,\n colSpacing: this.config.watermark.colspacing,\n rotate: this.config.watermark.rotate,\n fontSize: this.config.watermark.fontsize,\n fontFamily: this.config.watermark.fontfamily\n });\n }\n\n initPangu() {\n this.config.enablePangu && pangu.autoSpacingPage();\n }\n\n onScroll() {\n const $headers = [];\n if (document.body.getAttribute('header-desktop') === 'auto')\n $headers.push(document.getElementById('header-desktop'));\n if (document.body.getAttribute('header-mobile') === 'auto')\n $headers.push(document.getElementById('header-mobile'));\n if (document.getElementById('comments')) {\n const $viewComments = document.getElementById('view-comments');\n $viewComments.href = `#comments`;\n $viewComments.style.display = 'block';\n }\n const $fixedButtons = document.getElementById('fixed-buttons');\n const ACCURACY = 20,\n MINIMUM = 100;\n window.addEventListener(\n 'scroll',\n () => {\n this.newScrollTop = this.util.getScrollTop();\n const scroll = this.newScrollTop - this.oldScrollTop;\n const isMobile = this.util.isMobile();\n this.util.forEach($headers, ($header) => {\n if (scroll > ACCURACY) {\n $header.classList.remove('fadeInDown');\n this.util.animateCSS($header, ['fadeOutUp', 'faster'], true);\n } else if (scroll < -ACCURACY) {\n $header.classList.remove('fadeOutUp');\n this.util.animateCSS($header, ['fadeInDown', 'faster'], true);\n }\n });\n if (this.newScrollTop > MINIMUM) {\n if (isMobile && scroll > ACCURACY) {\n $fixedButtons.classList.remove('fadeIn');\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\n } else if (!isMobile || scroll < -ACCURACY) {\n $fixedButtons.style.display = 'block';\n $fixedButtons.classList.remove('fadeOut');\n this.util.animateCSS($fixedButtons, ['fadeIn', 'faster'], true);\n }\n } else {\n if (!isMobile) {\n $fixedButtons.classList.remove('fadeIn');\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\n }\n $fixedButtons.style.display = 'none';\n }\n for (let event of this.scrollEventSet) event();\n this.oldScrollTop = this.newScrollTop;\n },\n false\n );\n }\n\n onResize() {\n window.addEventListener(\n 'resize',\n () => {\n if (!this._resizeTimeout) {\n this._resizeTimeout = window.setTimeout(() => {\n this._resizeTimeout = null;\n for (let event of this.resizeEventSet) event();\n this.initMermaid();\n this.initSearch();\n }, 100);\n }\n },\n false\n );\n }\n\n onClickMask() {\n document.getElementById('mask').addEventListener(\n 'click',\n () => {\n for (let event of this.clickMaskEventSet) event();\n document.body.classList.remove('blur');\n },\n false\n );\n }\n\n init() {\n try {\n this.initSVGIcon();\n this.initTwemoji();\n this.initMenuMobile();\n this.initSwitchTheme();\n this.initSearch();\n this.initDetails();\n this.initLightGallery();\n this.initHighlight();\n this.initTable();\n this.initHeaderLink();\n this.initMath();\n this.initMermaid();\n this.initEcharts();\n this.initTypeit();\n this.initMapbox();\n this.initCookieconsent();\n this.initSiteTime();\n this.initServiceWorker();\n this.initWatermark();\n this.initPangu();\n } catch (err) {\n console.error(err);\n }\n\n window.setTimeout(() => {\n this.initComment();\n this.initToc();\n\n this.onScroll();\n this.onResize();\n this.onClickMask();\n }, 100);\n }\n}\n\nconst themeInit = () => {\n const theme = new Theme();\n theme.init();\n};\n\nif (document.readyState !== 'loading') {\n themeInit();\n} else {\n document.addEventListener('DOMContentLoaded', themeInit, false);\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../src/js/theme.js"],"names":[],"mappings":"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","file":"theme.min.js","sourcesContent":["class Util {\r\n forEach(elements, handler) {\r\n elements = elements || [];\r\n for (let i = 0; i < elements.length; i++) handler(elements[i]);\r\n }\r\n\r\n getScrollTop() {\r\n return (\r\n (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop\r\n );\r\n }\r\n\r\n isMobile() {\r\n return window.matchMedia('only screen and (max-width: 680px)').matches;\r\n }\r\n\r\n isTocStatic() {\r\n return window.matchMedia('only screen and (max-width: 960px)').matches;\r\n }\r\n\r\n animateCSS(element, animation, reserved, callback) {\r\n if (!Array.isArray(animation)) animation = [animation];\r\n element.classList.add('animated', ...animation);\r\n const handler = () => {\r\n element.classList.remove('animated', ...animation);\r\n element.removeEventListener('animationend', handler);\r\n if (typeof callback === 'function') callback();\r\n };\r\n if (!reserved) element.addEventListener('animationend', handler, false);\r\n }\r\n}\r\n\r\nclass Theme {\r\n constructor() {\r\n this.config = window.config;\r\n this.data = this.config.data;\r\n this.isDark = document.body.getAttribute('theme') === 'dark';\r\n this.util = new Util();\r\n this.newScrollTop = this.util.getScrollTop();\r\n this.oldScrollTop = this.newScrollTop;\r\n this.scrollEventSet = new Set();\r\n this.resizeEventSet = new Set();\r\n this.switchThemeEventSet = new Set();\r\n this.clickMaskEventSet = new Set();\r\n if (window.objectFitImages) objectFitImages();\r\n }\r\n\r\n initSVGIcon() {\r\n this.util.forEach(document.querySelectorAll('[data-svg-src]'), ($icon) => {\r\n fetch($icon.getAttribute('data-svg-src'))\r\n .then((response) => response.text())\r\n .then((svg) => {\r\n const $temp = document.createElement('div');\r\n $temp.insertAdjacentHTML('afterbegin', svg);\r\n const $svg = $temp.firstChild;\r\n $svg.setAttribute('data-svg-src', $icon.getAttribute('data-svg-src'));\r\n $svg.classList.add('icon');\r\n const $titleElements = $svg.getElementsByTagName('title');\r\n if ($titleElements.length) $svg.removeChild($titleElements[0]);\r\n $icon.parentElement.replaceChild($svg, $icon);\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n });\r\n }\r\n\r\n initTwemoji() {\r\n if (this.config.twemoji) twemoji.parse(document.body);\r\n }\r\n\r\n initMenuMobile() {\r\n const $menuToggleMobile = document.getElementById('menu-toggle-mobile');\r\n const $menuMobile = document.getElementById('menu-mobile');\r\n $menuToggleMobile.addEventListener(\r\n 'click',\r\n () => {\r\n document.body.classList.toggle('blur');\r\n $menuToggleMobile.classList.toggle('active');\r\n $menuMobile.classList.toggle('active');\r\n },\r\n false\r\n );\r\n this._menuMobileOnClickMask =\r\n this._menuMobileOnClickMask ||\r\n (() => {\r\n $menuToggleMobile.classList.remove('active');\r\n $menuMobile.classList.remove('active');\r\n });\r\n this.clickMaskEventSet.add(this._menuMobileOnClickMask);\r\n }\r\n\r\n initSwitchTheme() {\r\n this.util.forEach(document.getElementsByClassName('theme-switch'), ($themeSwitch) => {\r\n $themeSwitch.addEventListener(\r\n 'click',\r\n () => {\r\n if (document.body.getAttribute('theme') === 'dark')\r\n document.body.setAttribute('theme', 'light');\r\n else document.body.setAttribute('theme', 'dark');\r\n this.isDark = !this.isDark;\r\n window.localStorage && localStorage.setItem('theme', this.isDark ? 'dark' : 'light');\r\n for (let event of this.switchThemeEventSet) event();\r\n },\r\n false\r\n );\r\n });\r\n }\r\n\r\n initSearch() {\r\n const searchConfig = this.config.search;\r\n const isMobile = this.util.isMobile();\r\n if (\r\n !searchConfig ||\r\n (isMobile && this._searchMobileOnce) ||\r\n (!isMobile && this._searchDesktopOnce)\r\n )\r\n return;\r\n\r\n const maxResultLength = searchConfig.maxResultLength ? searchConfig.maxResultLength : 10;\r\n const snippetLength = searchConfig.snippetLength ? searchConfig.snippetLength : 50;\r\n const highlightTag = searchConfig.highlightTag ? searchConfig.highlightTag : 'em';\r\n\r\n const suffix = isMobile ? 'mobile' : 'desktop';\r\n const $header = document.getElementById(`header-${suffix}`);\r\n const $searchInput = document.getElementById(`search-input-${suffix}`);\r\n const $searchToggle = document.getElementById(`search-toggle-${suffix}`);\r\n const $searchLoading = document.getElementById(`search-loading-${suffix}`);\r\n const $searchClear = document.getElementById(`search-clear-${suffix}`);\r\n if (isMobile) {\r\n this._searchMobileOnce = true;\r\n $searchInput.addEventListener(\r\n 'focus',\r\n () => {\r\n document.body.classList.add('blur');\r\n $header.classList.add('open');\r\n },\r\n false\r\n );\r\n document.getElementById('search-cancel-mobile').addEventListener(\r\n 'click',\r\n () => {\r\n $header.classList.remove('open');\r\n document.body.classList.remove('blur');\r\n document.getElementById('menu-toggle-mobile').classList.remove('active');\r\n document.getElementById('menu-mobile').classList.remove('active');\r\n $searchLoading.style.display = 'none';\r\n $searchClear.style.display = 'none';\r\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\r\n },\r\n false\r\n );\r\n $searchClear.addEventListener(\r\n 'click',\r\n () => {\r\n $searchClear.style.display = 'none';\r\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\r\n },\r\n false\r\n );\r\n this._searchMobileOnClickMask =\r\n this._searchMobileOnClickMask ||\r\n (() => {\r\n $header.classList.remove('open');\r\n $searchLoading.style.display = 'none';\r\n $searchClear.style.display = 'none';\r\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\r\n });\r\n this.clickMaskEventSet.add(this._searchMobileOnClickMask);\r\n } else {\r\n this._searchDesktopOnce = true;\r\n $searchToggle.addEventListener(\r\n 'click',\r\n () => {\r\n document.body.classList.add('blur');\r\n $header.classList.add('open');\r\n $searchInput.focus();\r\n },\r\n false\r\n );\r\n $searchClear.addEventListener(\r\n 'click',\r\n () => {\r\n $searchClear.style.display = 'none';\r\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\r\n },\r\n false\r\n );\r\n this._searchDesktopOnClickMask =\r\n this._searchDesktopOnClickMask ||\r\n (() => {\r\n $header.classList.remove('open');\r\n $searchLoading.style.display = 'none';\r\n $searchClear.style.display = 'none';\r\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\r\n });\r\n this.clickMaskEventSet.add(this._searchDesktopOnClickMask);\r\n }\r\n $searchInput.addEventListener(\r\n 'input',\r\n () => {\r\n if ($searchInput.value === '') $searchClear.style.display = 'none';\r\n else $searchClear.style.display = 'inline';\r\n },\r\n false\r\n );\r\n\r\n const initAutosearch = () => {\r\n const autosearch = autocomplete(\r\n `#search-input-${suffix}`,\r\n {\r\n hint: false,\r\n autoselect: true,\r\n dropdownMenuContainer: `#search-dropdown-${suffix}`,\r\n clearOnSelected: true,\r\n cssClasses: { noPrefix: true },\r\n debug: true\r\n },\r\n {\r\n name: 'search',\r\n source: (query, callback) => {\r\n $searchLoading.style.display = 'inline';\r\n $searchClear.style.display = 'none';\r\n const finish = (results) => {\r\n $searchLoading.style.display = 'none';\r\n $searchClear.style.display = 'inline';\r\n callback(results);\r\n };\r\n if (searchConfig.type === 'lunr') {\r\n const search = () => {\r\n if (lunr.queryHandler) query = lunr.queryHandler(query);\r\n const results = {};\r\n this._index.search(query).forEach(({ ref, matchData: { metadata } }) => {\r\n const matchData = this._indexData[ref];\r\n let { uri, title, content: context } = matchData;\r\n if (results[uri]) return;\r\n let position = 0;\r\n Object.values(metadata).forEach(({ content }) => {\r\n if (content) {\r\n const matchPosition = content.position[0][0];\r\n if (matchPosition < position || position === 0) position = matchPosition;\r\n }\r\n });\r\n position -= snippetLength / 5;\r\n if (position > 0) {\r\n position += context.substr(position, 20).lastIndexOf(' ') + 1;\r\n context = '...' + context.substr(position, snippetLength);\r\n } else {\r\n context = context.substr(0, snippetLength);\r\n }\r\n Object.keys(metadata).forEach((key) => {\r\n title = title.replace(\r\n new RegExp(`(${key})`, 'gi'),\r\n `<${highlightTag}>$1${highlightTag}>`\r\n );\r\n context = context.replace(\r\n new RegExp(`(${key})`, 'gi'),\r\n `<${highlightTag}>$1${highlightTag}>`\r\n );\r\n });\r\n results[uri] = {\r\n uri: uri,\r\n title: title,\r\n date: matchData.date,\r\n context: context\r\n };\r\n });\r\n return Object.values(results).slice(0, maxResultLength);\r\n };\r\n if (!this._index) {\r\n fetch(searchConfig.lunrIndexURL)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n const indexData = {};\r\n this._index = lunr(function () {\r\n if (searchConfig.lunrLanguageCode)\r\n this.use(lunr[searchConfig.lunrLanguageCode]);\r\n this.ref('objectID');\r\n this.field('title', { boost: 50 });\r\n this.field('tags', { boost: 20 });\r\n this.field('categories', { boost: 20 });\r\n this.field('content', { boost: 10 });\r\n this.metadataWhitelist = ['position'];\r\n data.forEach((record) => {\r\n indexData[record.objectID] = record;\r\n this.add(record);\r\n });\r\n });\r\n this._indexData = indexData;\r\n finish(search());\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n finish([]);\r\n });\r\n } else finish(search());\r\n } else if (searchConfig.type === 'algolia') {\r\n this._algoliaIndex =\r\n this._algoliaIndex ||\r\n algoliasearch(searchConfig.algoliaAppID, searchConfig.algoliaSearchKey).initIndex(\r\n searchConfig.algoliaIndex\r\n );\r\n this._algoliaIndex\r\n .search(query, {\r\n offset: 0,\r\n length: maxResultLength * 8,\r\n attributesToHighlight: ['title'],\r\n attributesToSnippet: [`content:${snippetLength}`],\r\n highlightPreTag: `<${highlightTag}>`,\r\n highlightPostTag: `${highlightTag}>`\r\n })\r\n .then(({ hits }) => {\r\n const results = {};\r\n hits.forEach(\r\n ({ uri, date, _highlightResult: { title }, _snippetResult: { content } }) => {\r\n if (results[uri] && results[uri].context.length > content.value) return;\r\n results[uri] = {\r\n uri: uri,\r\n title: title.value,\r\n date: date,\r\n context: content.value\r\n };\r\n }\r\n );\r\n finish(Object.values(results).slice(0, maxResultLength));\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n finish([]);\r\n });\r\n }\r\n },\r\n templates: {\r\n suggestion: ({ title, date, context }) =>\r\n `${title}${date}
${context}
`,\r\n empty: ({ query }) =>\r\n `${searchConfig.noResultsFound}: \"${query}\"
`,\r\n footer: ({}) => {\r\n const { searchType, icon, href } =\r\n searchConfig.type === 'algolia'\r\n ? {\r\n searchType: 'algolia',\r\n icon: '',\r\n href: 'https://www.algolia.com/'\r\n }\r\n : {\r\n searchType: 'Lunr.js',\r\n icon: '',\r\n href: 'https://lunrjs.com/'\r\n };\r\n return ``;\r\n }\r\n }\r\n }\r\n );\r\n autosearch.on('autocomplete:selected', (_event, suggestion, _dataset, _context) => {\r\n window.location.assign(suggestion.uri);\r\n });\r\n if (isMobile) this._searchMobile = autosearch;\r\n else this._searchDesktop = autosearch;\r\n };\r\n if (searchConfig.lunrSegmentitURL && !document.getElementById('lunr-segmentit')) {\r\n const script = document.createElement('script');\r\n script.id = 'lunr-segmentit';\r\n script.type = 'text/javascript';\r\n script.src = searchConfig.lunrSegmentitURL;\r\n script.async = true;\r\n if (script.readyState) {\r\n script.onreadystatechange = () => {\r\n if (script.readyState == 'loaded' || script.readyState == 'complete') {\r\n script.onreadystatechange = null;\r\n initAutosearch();\r\n }\r\n };\r\n } else {\r\n script.onload = () => {\r\n initAutosearch();\r\n };\r\n }\r\n document.body.appendChild(script);\r\n } else initAutosearch();\r\n }\r\n\r\n initDetails() {\r\n this.util.forEach(document.getElementsByClassName('details'), ($details) => {\r\n const $summary = $details.getElementsByClassName('details-summary')[0];\r\n $summary.addEventListener(\r\n 'click',\r\n () => {\r\n $details.classList.toggle('open');\r\n },\r\n false\r\n );\r\n });\r\n }\r\n\r\n initLightGallery() {\r\n if (this.config.lightGallery)\r\n lightGallery(document.getElementById('content'), this.config.lightGallery);\r\n }\r\n\r\n initHighlight() {\r\n this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), ($preChroma) => {\r\n const $chroma = document.createElement('div');\r\n $chroma.className = $preChroma.className;\r\n const $table = document.createElement('table');\r\n $chroma.appendChild($table);\r\n const $tbody = document.createElement('tbody');\r\n $table.appendChild($tbody);\r\n const $tr = document.createElement('tr');\r\n $tbody.appendChild($tr);\r\n const $td = document.createElement('td');\r\n $tr.appendChild($td);\r\n $preChroma.parentElement.replaceChild($chroma, $preChroma);\r\n $td.appendChild($preChroma);\r\n });\r\n this.util.forEach(document.querySelectorAll('.highlight > .chroma'), ($chroma) => {\r\n const $codeElements = $chroma.querySelectorAll('pre.chroma > code');\r\n if ($codeElements.length) {\r\n const $code = $codeElements[$codeElements.length - 1];\r\n const $header = document.createElement('div');\r\n $header.className = 'code-header ' + $code.className.toLowerCase();\r\n const $title = document.createElement('span');\r\n $title.classList.add('code-title');\r\n $title.insertAdjacentHTML('afterbegin', '');\r\n $title.addEventListener(\r\n 'click',\r\n () => {\r\n $chroma.classList.toggle('open');\r\n },\r\n false\r\n );\r\n $header.appendChild($title);\r\n const $ellipses = document.createElement('span');\r\n $ellipses.insertAdjacentHTML('afterbegin', '');\r\n $ellipses.classList.add('ellipses');\r\n $ellipses.addEventListener(\r\n 'click',\r\n () => {\r\n $chroma.classList.add('open');\r\n },\r\n false\r\n );\r\n $header.appendChild($ellipses);\r\n const $copy = document.createElement('span');\r\n $copy.insertAdjacentHTML('afterbegin', '');\r\n $copy.classList.add('copy');\r\n const code = $code.innerText;\r\n if (\r\n this.config.code.maxShownLines < 0 ||\r\n code.split('\\n').length < this.config.code.maxShownLines + 2\r\n )\r\n $chroma.classList.add('open');\r\n if (this.config.code.copyTitle) {\r\n $copy.setAttribute('data-clipboard-text', code);\r\n $copy.title = this.config.code.copyTitle;\r\n const clipboard = new ClipboardJS($copy);\r\n clipboard.on('success', (_e) => {\r\n this.util.animateCSS($code, 'flash');\r\n });\r\n $header.appendChild($copy);\r\n }\r\n $chroma.insertBefore($header, $chroma.firstChild);\r\n }\r\n });\r\n }\r\n\r\n initTable() {\r\n this.util.forEach(document.querySelectorAll('.content table'), ($table) => {\r\n const $wrapper = document.createElement('div');\r\n $wrapper.className = 'table-wrapper';\r\n $table.parentElement.replaceChild($wrapper, $table);\r\n $wrapper.appendChild($table);\r\n });\r\n }\r\n\r\n initHeaderLink() {\r\n for (let num = 1; num <= 6; num++) {\r\n this.util.forEach(document.querySelectorAll('.single .content > h' + num), ($header) => {\r\n $header.classList.add('header-link');\r\n $header.insertAdjacentHTML(\r\n 'afterbegin',\r\n ``\r\n );\r\n });\r\n }\r\n }\r\n\r\n initToc() {\r\n const $toc = document.getElementById('toc-auto');\r\n if ($toc === null) {\r\n return;\r\n }\r\n const $tocCore = document.getElementById('TableOfContents');\r\n if (\r\n document.getElementById('toc-static').getAttribute('kept') === 'true' ||\r\n this.util.isTocStatic()\r\n ) {\r\n const $tocContentStatic = document.getElementById('toc-content-static');\r\n if ($tocCore.parentElement !== $tocContentStatic) {\r\n $tocCore.parentElement.removeChild($tocCore);\r\n $tocContentStatic.appendChild($tocCore);\r\n }\r\n if (this._tocOnScroll) this.scrollEventSet.delete(this._tocOnScroll);\r\n } else {\r\n const $tocContentAuto = document.getElementById('toc-content-auto');\r\n if ($tocCore.parentElement !== $tocContentAuto) {\r\n $tocCore.parentElement.removeChild($tocCore);\r\n $tocContentAuto.appendChild($tocCore);\r\n }\r\n $toc.style.visibility = 'visible';\r\n $toc.style.marginTop =\r\n document.querySelector('.single-title').clientHeight +\r\n document.querySelector('.post-meta').clientHeight +\r\n 'px';\r\n $toc.style.marginBottom = document.getElementById('post-footer').clientHeight + 'px';\r\n const $tocLinkElements = $tocCore.querySelectorAll('a:first-child');\r\n const $tocLiElements = $tocCore.getElementsByTagName('li');\r\n const $headerLinkElements = document.getElementsByClassName('header-link');\r\n const headerIsFixed = document.body.getAttribute('header-desktop') !== 'normal';\r\n const headerHeight = document.getElementById('header-desktop').offsetHeight;\r\n this._tocOnScroll =\r\n this._tocOnScroll ||\r\n (() => {\r\n const $comments = document.getElementById('comments');\r\n if ($comments) {\r\n $toc.style.marginBottom =\r\n document.getElementById('post-footer').clientHeight + $comments.clientHeight + 'px';\r\n }\r\n this.util.forEach($tocLinkElements, ($tocLink) => {\r\n $tocLink.classList.remove('active');\r\n });\r\n this.util.forEach($tocLiElements, ($tocLi) => {\r\n $tocLi.classList.remove('has-active');\r\n });\r\n const INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\r\n let activeTocIndex = $headerLinkElements.length - 1;\r\n for (let i = 0; i < $headerLinkElements.length - 1; i++) {\r\n const thisTop = $headerLinkElements[i].getBoundingClientRect().top;\r\n const nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;\r\n if (\r\n (i == 0 && thisTop > INDEX_SPACING) ||\r\n (thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING)\r\n ) {\r\n activeTocIndex = i;\r\n break;\r\n }\r\n }\r\n if (activeTocIndex !== -1) {\r\n $tocLinkElements[activeTocIndex].classList.add('active');\r\n let $parent = $tocLinkElements[activeTocIndex].parentElement;\r\n while ($parent !== $tocCore) {\r\n $parent.classList.add('has-active');\r\n $parent = $parent.parentElement.parentElement;\r\n }\r\n }\r\n });\r\n this._tocOnScroll();\r\n this.scrollEventSet.add(this._tocOnScroll);\r\n }\r\n }\r\n\r\n initMath() {\r\n if (this.config.math) renderMathInElement(document.body, this.config.math);\r\n }\r\n\r\n initMermaid() {\r\n const $mermaidElements = document.getElementsByClassName('mermaid');\r\n if ($mermaidElements.length) {\r\n mermaid.initialize({ startOnLoad: false, theme: 'default' });\r\n this.util.forEach($mermaidElements, ($mermaid) => {\r\n mermaid.mermaidAPI.render(\r\n 'svg-' + $mermaid.id,\r\n this.data[$mermaid.id],\r\n (svgCode) => {\r\n $mermaid.insertAdjacentHTML('afterbegin', svgCode);\r\n },\r\n $mermaid\r\n );\r\n });\r\n }\r\n }\r\n\r\n initEcharts() {\r\n this._echartsOnSwitchTheme =\r\n this._echartsOnSwitchTheme ||\r\n (() => {\r\n this._echartsArr = this._echartsArr || [];\r\n for (let i = 0; i < this._echartsArr.length; i++) {\r\n this._echartsArr[i].dispose();\r\n }\r\n this._echartsArr = [];\r\n this.util.forEach(document.getElementsByClassName('echarts'), ($echarts) => {\r\n const chart = echarts.init($echarts, this.isDark ? 'dark' : 'macarons', {\r\n renderer: 'svg'\r\n });\r\n chart.setOption(JSON.parse(this.data[$echarts.id]));\r\n this._echartsArr.push(chart);\r\n });\r\n });\r\n this.switchThemeEventSet.add(this._echartsOnSwitchTheme);\r\n this._echartsOnSwitchTheme();\r\n this._echartsOnResize =\r\n this._echartsOnResize ||\r\n (() => {\r\n for (let i = 0; i < this._echartsArr.length; i++) {\r\n this._echartsArr[i].resize();\r\n }\r\n });\r\n this.resizeEventSet.add(this._echartsOnResize);\r\n }\r\n\r\n initMapbox() {\r\n if (this.config.mapbox) {\r\n mapboxgl.accessToken = this.config.mapbox.accessToken;\r\n mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);\r\n this._mapboxArr = this._mapboxArr || [];\r\n this.util.forEach(document.getElementsByClassName('mapbox'), ($mapbox) => {\r\n const {\r\n lng,\r\n lat,\r\n zoom,\r\n lightStyle,\r\n darkStyle,\r\n marked,\r\n navigation,\r\n geolocate,\r\n scale,\r\n fullscreen\r\n } = this.data[$mapbox.id];\r\n const mapbox = new mapboxgl.Map({\r\n container: $mapbox,\r\n center: [lng, lat],\r\n zoom: zoom,\r\n minZoom: 0.2,\r\n style: this.isDark ? darkStyle : lightStyle,\r\n attributionControl: false\r\n });\r\n if (marked) {\r\n new mapboxgl.Marker().setLngLat([lng, lat]).addTo(mapbox);\r\n }\r\n if (navigation) {\r\n mapbox.addControl(new mapboxgl.NavigationControl(), 'bottom-right');\r\n }\r\n if (geolocate) {\r\n mapbox.addControl(\r\n new mapboxgl.GeolocateControl({\r\n positionOptions: {\r\n enableHighAccuracy: true\r\n },\r\n showUserLocation: true,\r\n trackUserLocation: true\r\n }),\r\n 'bottom-right'\r\n );\r\n }\r\n if (scale) {\r\n mapbox.addControl(new mapboxgl.ScaleControl());\r\n }\r\n if (fullscreen) {\r\n mapbox.addControl(new mapboxgl.FullscreenControl());\r\n }\r\n mapbox.addControl(new MapboxLanguage());\r\n this._mapboxArr.push(mapbox);\r\n });\r\n this._mapboxOnSwitchTheme =\r\n this._mapboxOnSwitchTheme ||\r\n (() => {\r\n this.util.forEach(this._mapboxArr, (mapbox) => {\r\n const $mapbox = mapbox.getContainer();\r\n const { lightStyle, darkStyle } = this.data[$mapbox.id];\r\n mapbox.setStyle(this.isDark ? darkStyle : lightStyle);\r\n mapbox.addControl(new MapboxLanguage());\r\n });\r\n });\r\n this.switchThemeEventSet.add(this._mapboxOnSwitchTheme);\r\n }\r\n }\r\n\r\n initTypeit() {\r\n if (this.config.typeit) {\r\n const typeitConfig = this.config.typeit;\r\n const speed = typeitConfig.speed ? typeitConfig.speed : 100;\r\n const cursorSpeed = typeitConfig.cursorSpeed ? typeitConfig.cursorSpeed : 1000;\r\n const cursorChar = typeitConfig.cursorChar ? typeitConfig.cursorChar : '|';\r\n Object.values(typeitConfig.data).forEach((group) => {\r\n const typeone = (i) => {\r\n const id = group[i];\r\n const instance = new TypeIt(`#${id}`, {\r\n strings: this.data[id],\r\n speed: speed,\r\n lifeLike: true,\r\n cursorSpeed: cursorSpeed,\r\n cursorChar: cursorChar,\r\n waitUntilVisible: true,\r\n afterComplete: () => {\r\n if (i === group.length - 1) {\r\n if (typeitConfig.duration >= 0)\r\n window.setTimeout(() => {\r\n instance.destroy();\r\n }, typeitConfig.duration);\r\n return;\r\n }\r\n instance.destroy();\r\n typeone(i + 1);\r\n }\r\n }).go();\r\n };\r\n typeone(0);\r\n });\r\n }\r\n }\r\n\r\n initComment() {\r\n if (this.config.comment) {\r\n if (this.config.comment.artalk) {\r\n const artalk = new Artalk(this.config.comment.artalk);\r\n artalk.setDarkMode(this.isDark);\r\n this.switchThemeEventSet.add(() => {\r\n artalk.setDarkMode(this.isDark);\r\n });\r\n this.config.lightGallery &&\r\n this.config.comment.artalk.lightgallery &&\r\n artalk.on('comments-loaded', () => {\r\n document.querySelectorAll('.atk-comment .atk-content').forEach(($content) => {\r\n const $imgs = $content.querySelectorAll(\r\n 'img:not([atk-emoticon]):not([atk-lightbox-loaded])'\r\n );\r\n $imgs.forEach(($img) => {\r\n $img.setAttribute('atk-lightbox-loaded', '');\r\n const $link = document.createElement('a');\r\n $link.setAttribute('class', 'atk-img-link');\r\n $link.setAttribute('href', $img.src);\r\n $link.setAttribute('data-src', $img.src);\r\n $link.append($img.cloneNode());\r\n $img.replaceWith($link);\r\n });\r\n if ($imgs.length) lightGallery($content, { selector: '.atk-img-link' });\r\n });\r\n });\r\n return artalk;\r\n }\r\n if (this.config.comment.gitalk) {\r\n this.config.comment.gitalk.body = decodeURI(window.location.href);\r\n const gitalk = new Gitalk(this.config.comment.gitalk);\r\n gitalk.render('gitalk');\r\n return gitalk;\r\n }\r\n if (this.config.comment.valine) {\r\n return new Valine(this.config.comment.valine);\r\n }\r\n if (this.config.comment.waline) {\r\n return new Waline(this.config.comment.waline);\r\n }\r\n if (this.config.comment.utterances) {\r\n const utterancesConfig = this.config.comment.utterances;\r\n const script = document.createElement('script');\r\n script.src = 'https://utteranc.es/client.js';\r\n script.type = 'text/javascript';\r\n script.setAttribute('repo', utterancesConfig.repo);\r\n script.setAttribute('issue-term', utterancesConfig.issueTerm);\r\n if (utterancesConfig.label) script.setAttribute('label', utterancesConfig.label);\r\n script.setAttribute(\r\n 'theme',\r\n this.isDark ? utterancesConfig.darkTheme : utterancesConfig.lightTheme\r\n );\r\n script.crossOrigin = 'anonymous';\r\n script.async = true;\r\n document.getElementById('utterances').appendChild(script);\r\n this._utterancesOnSwitchTheme =\r\n this._utterancesOnSwitchTheme ||\r\n (() => {\r\n const message = {\r\n type: 'set-theme',\r\n theme: this.isDark ? utterancesConfig.darkTheme : utterancesConfig.lightTheme\r\n };\r\n const iframe = document.querySelector('.utterances-frame');\r\n iframe.contentWindow.postMessage(message, 'https://utteranc.es');\r\n });\r\n this.switchThemeEventSet.add(this._utterancesOnSwitchTheme);\r\n return;\r\n }\r\n if (this.config.comment.twikoo) {\r\n const twikooConfig = this.config.comment.twikoo;\r\n twikoo.init(twikooConfig);\r\n if (twikooConfig.commentCount) {\r\n // https://twikoo.js.org/api.html#get-comments-count\r\n twikoo\r\n .getCommentsCount({\r\n envId: twikooConfig.envId,\r\n region: twikooConfig.region,\r\n urls: [window.location.pathname],\r\n includeReply: false\r\n })\r\n .then(function (response) {\r\n // example: [\r\n // { url: '/2020/10/post-1.html', count: 10 },\r\n // { url: '/2020/11/post-2.html', count: 0 },\r\n // { url: '/2020/12/post-3.html', count: 20 }\r\n // ]\r\n // If there is an element with id=\"twikoo-comment-count\", set its innerHTML to the count of comments\r\n const twikooCommentCount = document.getElementById('twikoo-comment-count');\r\n if (twikooCommentCount) twikooCommentCount.innerHTML = response[0].count;\r\n });\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n initCookieconsent() {\r\n if (this.config.cookieconsent) cookieconsent.initialise(this.config.cookieconsent);\r\n }\r\n\r\n getSiteTime() {\r\n let now = new Date();\r\n let run = new Date(this.config.ibruce.siteTime);\r\n let runTime = (now - run) / 1000,\r\n days = Math.floor(runTime / 60 / 60 / 24),\r\n hours = Math.floor(runTime / 60 / 60 - 24 * days),\r\n minutes = Math.floor(runTime / 60 - 24 * 60 * days - 60 * hours),\r\n seconds = Math.floor(\r\n (now - run) / 1000 - 24 * 60 * 60 * days - 60 * 60 * hours - 60 * minutes\r\n );\r\n document.querySelector('.run-times').innerHTML = `${days},${String(hours).padStart(\r\n 2,\r\n 0\r\n )}:${String(minutes).padStart(2, 0)}:${String(seconds).padStart(2, 0)}`;\r\n }\r\n\r\n initSiteTime() {\r\n if (this.config.ibruce.enable && this.config.ibruce.siteTime) {\r\n this.siteTime = setInterval(this.getSiteTime, 500);\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.hidden) {\r\n return clearInterval(this.siteTime);\r\n }\r\n this.siteTime = setInterval(this.getSiteTime, 500);\r\n });\r\n }\r\n }\r\n\r\n initServiceWorker() {\r\n if (this.config.enablePWA && 'serviceWorker' in navigator) {\r\n navigator.serviceWorker\r\n .register('/service-worker.min.js', { scope: '/' })\r\n .then(function (registration) {\r\n // console.log('Service Worker Registered');\r\n })\r\n .catch(function (error) {\r\n console.error('error: ', error);\r\n });\r\n navigator.serviceWorker.ready.then(function (registration) {\r\n // console.log('Service Worker Ready');\r\n });\r\n }\r\n }\r\n\r\n initWatermark() {\r\n this.config.watermark.enable &&\r\n new Watermark({\r\n content:\r\n this.config.watermark.content ||\r\n '
FixIt Theme',\r\n appendTo: this.config.watermark.appendto || '.wrapper>main',\r\n opacity: this.config.watermark.opacity,\r\n width: this.config.watermark.width,\r\n height: this.config.watermark.height,\r\n rowSpacing: this.config.watermark.rowspacing,\r\n colSpacing: this.config.watermark.colspacing,\r\n rotate: this.config.watermark.rotate,\r\n fontSize: this.config.watermark.fontsize,\r\n fontFamily: this.config.watermark.fontfamily\r\n });\r\n }\r\n\r\n initPangu() {\r\n this.config.enablePangu && pangu.autoSpacingPage();\r\n }\r\n\r\n onScroll() {\r\n const $headers = [];\r\n if (document.body.getAttribute('header-desktop') === 'auto')\r\n $headers.push(document.getElementById('header-desktop'));\r\n if (document.body.getAttribute('header-mobile') === 'auto')\r\n $headers.push(document.getElementById('header-mobile'));\r\n if (document.getElementById('comments')) {\r\n const $viewComments = document.getElementById('view-comments');\r\n $viewComments.href = `#comments`;\r\n $viewComments.style.display = 'block';\r\n }\r\n const $fixedButtons = document.getElementById('fixed-buttons');\r\n const ACCURACY = 20,\r\n MINIMUM = 100;\r\n window.addEventListener(\r\n 'scroll',\r\n () => {\r\n this.newScrollTop = this.util.getScrollTop();\r\n const scroll = this.newScrollTop - this.oldScrollTop;\r\n const isMobile = this.util.isMobile();\r\n this.util.forEach($headers, ($header) => {\r\n if (scroll > ACCURACY) {\r\n $header.classList.remove('fadeInDown');\r\n this.util.animateCSS($header, ['fadeOutUp', 'faster'], true);\r\n } else if (scroll < -ACCURACY) {\r\n $header.classList.remove('fadeOutUp');\r\n this.util.animateCSS($header, ['fadeInDown', 'faster'], true);\r\n }\r\n });\r\n if (this.newScrollTop > MINIMUM) {\r\n if (isMobile && scroll > ACCURACY) {\r\n $fixedButtons.classList.remove('fadeIn');\r\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\r\n } else if (!isMobile || scroll < -ACCURACY) {\r\n $fixedButtons.style.display = 'block';\r\n $fixedButtons.classList.remove('fadeOut');\r\n this.util.animateCSS($fixedButtons, ['fadeIn', 'faster'], true);\r\n }\r\n } else {\r\n if (!isMobile) {\r\n $fixedButtons.classList.remove('fadeIn');\r\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\r\n }\r\n $fixedButtons.style.display = 'none';\r\n }\r\n for (let event of this.scrollEventSet) event();\r\n this.oldScrollTop = this.newScrollTop;\r\n },\r\n false\r\n );\r\n }\r\n\r\n onResize() {\r\n window.addEventListener(\r\n 'resize',\r\n () => {\r\n if (!this._resizeTimeout) {\r\n this._resizeTimeout = window.setTimeout(() => {\r\n this._resizeTimeout = null;\r\n for (let event of this.resizeEventSet) event();\r\n this.initMermaid();\r\n this.initSearch();\r\n }, 100);\r\n }\r\n },\r\n false\r\n );\r\n }\r\n\r\n onClickMask() {\r\n document.getElementById('mask').addEventListener(\r\n 'click',\r\n () => {\r\n for (let event of this.clickMaskEventSet) event();\r\n document.body.classList.remove('blur');\r\n },\r\n false\r\n );\r\n }\r\n\r\n init() {\r\n try {\r\n this.initSVGIcon();\r\n this.initTwemoji();\r\n this.initMenuMobile();\r\n this.initSwitchTheme();\r\n this.initSearch();\r\n this.initDetails();\r\n this.initLightGallery();\r\n this.initHighlight();\r\n this.initTable();\r\n this.initHeaderLink();\r\n this.initMath();\r\n this.initMermaid();\r\n this.initEcharts();\r\n this.initTypeit();\r\n this.initMapbox();\r\n this.initCookieconsent();\r\n this.initSiteTime();\r\n this.initServiceWorker();\r\n this.initWatermark();\r\n this.initPangu();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n\r\n window.setTimeout(() => {\r\n this.initComment();\r\n this.initToc();\r\n\r\n this.onScroll();\r\n this.onResize();\r\n this.onClickMask();\r\n }, 100);\r\n }\r\n}\r\n\r\nconst themeInit = () => {\r\n const theme = new Theme();\r\n theme.init();\r\n};\r\n\r\nif (document.readyState !== 'loading') {\r\n themeInit();\r\n} else {\r\n document.addEventListener('DOMContentLoaded', themeInit, false);\r\n}\r\n"]}
\ No newline at end of file
diff --git a/exampleSite/config.toml b/exampleSite/config.toml
index ef6b25f0e..3a84ff2f1 100644
--- a/exampleSite/config.toml
+++ b/exampleSite/config.toml
@@ -156,6 +156,8 @@ enableEmoji = true
# Home page profile
[languages.en.params.home.profile]
enable = true
+ # Gravarar mirror site domain, when empty www.gravatar.com will be used
+ gravatarSite = ""
# Gravatar Email for preferred avatar in home page
gravatarEmail = ""
# URL of avatar shown in home page
@@ -375,6 +377,8 @@ enableEmoji = true
# 主页个人信息
[languages.zh-cn.params.home.profile]
enable = true
+ # 选择使用 Gravatar 源站或其他镜像站,若留空则为默认的 www.gravatar.com
+ gravatarSite = ""
# Gravatar 邮箱,用于优先在主页显示的头像
gravatarEmail = ""
# 主页显示头像的 URL
diff --git a/exampleSite/content/posts/theme-documentation-basics/index.en.md b/exampleSite/content/posts/theme-documentation-basics/index.en.md
index b2e7c3037..d4e8cfe68 100644
--- a/exampleSite/content/posts/theme-documentation-basics/index.en.md
+++ b/exampleSite/content/posts/theme-documentation-basics/index.en.md
@@ -315,6 +315,8 @@ Please open the code block below to view the complete sample configuration :(far
# Home page profile
[params.home.profile]
enable = true
+ # Gravarar mirror site domain, when empty, www.gravatar.com will be used
+ gravatarSite = ""
# Gravatar Email for preferred avatar in home page
gravatarEmail = ""
# URL of avatar shown in home page
diff --git a/exampleSite/content/posts/theme-documentation-basics/index.zh-cn.md b/exampleSite/content/posts/theme-documentation-basics/index.zh-cn.md
index 6a6bb3305..81c722b92 100644
--- a/exampleSite/content/posts/theme-documentation-basics/index.zh-cn.md
+++ b/exampleSite/content/posts/theme-documentation-basics/index.zh-cn.md
@@ -326,6 +326,8 @@ hugo
# 主页个人信息
[params.home.profile]
enable = true
+ # 选择使用 Gravatar 源站或其他镜像站,若留空则为默认的 www.gravatar.com
+ gravatarSite = ""
# Gravatar 邮箱,用于优先在主页显示的头像
gravatarEmail = ""
# 主页显示头像的 URL
diff --git a/layouts/partials/home/profile.html b/layouts/partials/home/profile.html
index 41678ff6d..1dfe33b00 100644
--- a/layouts/partials/home/profile.html
+++ b/layouts/partials/home/profile.html
@@ -1,8 +1,11 @@
{{- $profile := .Site.Params.home.profile -}}
{{- $avatar := $profile.avatarURL -}}
- {{- with $profile.gravatarEmail -}}
- {{- $avatar = md5 . | printf "https://www.gravatar.com/avatar/%v?s=240&d=mp" -}}
+ {{- if $profile.gravatarEmail -}}
+ {{- with $profile -}}
+ {{- $site := .gravatarSite | default "www.gravatar.com" -}}
+ {{- $avatar = md5 .gravatarEmail | printf "https://%v/avatar/%v?s=240&d=mp" $site -}}
+ {{- end -}}
{{- end -}}
{{- if $avatar -}}
diff --git a/static/service-worker.min.js.map b/static/service-worker.min.js.map
index 6be5349d5..493c21790 100644
--- a/static/service-worker.min.js.map
+++ b/static/service-worker.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/js/service-worker.js"],"names":[],"mappings":"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","file":"service-worker.min.js","sourcesContent":["const CACHE_VERSION = 1;\n\nconst BASE_CACHE_FILES = [\n '/css/style.min.css',\n '/js/theme.min.js',\n '/site.webmanifest'\n];\n\nconst OFFLINE_CACHE_FILES = [\n '/css/style.min.css',\n '/js/theme.min.js',\n '/site.webmanifest',\n '/offline/'\n];\n\nconst NOT_FOUND_CACHE_FILES = [\n '/css/style.min.css',\n '/js/theme.min.js',\n '/site.webmanifest',\n '/404.html'\n];\n\nconst OFFLINE_PAGE = '/offline/';\nconst NOT_FOUND_PAGE = '/404.html';\n\nconst CACHE_VERSIONS = {\n assets: 'assets-v' + CACHE_VERSION,\n content: 'content-v' + CACHE_VERSION,\n offline: 'offline-v' + CACHE_VERSION,\n notFound: '404-v' + CACHE_VERSION\n};\n\n// Define MAX_TTL's in SECONDS for specific file extensions\nconst MAX_TTL = {\n '/': 3600,\n html: 3600,\n json: 86400,\n js: 86400,\n css: 86400\n};\n\nconst CACHE_BLACKLIST = [\n (str) => {\n return !str.startsWith('http://localhost');\n }\n];\n\nconst SUPPORTED_METHODS = ['GET'];\n\n/**\n * isBlackListed\n * @param {string} url\n * @returns {boolean}\n */\nfunction isBlacklisted(url) {\n return CACHE_BLACKLIST.length > 0\n ? !CACHE_BLACKLIST.filter((rule) => {\n if (typeof rule === 'function') {\n return !rule(url);\n } else {\n return false;\n }\n }).length\n : false;\n}\n\n/**\n * getFileExtension\n * @param {string} url\n * @returns {string}\n */\nfunction getFileExtension(url) {\n const extension = url.split('.').reverse()[0].split('?')[0];\n return extension.endsWith('/') ? '/' : extension;\n}\n\n/**\n * getTTL\n * @param {string} url\n */\nfunction getTTL(url) {\n if (typeof url === 'string') {\n const extension = getFileExtension(url);\n if (typeof MAX_TTL[extension] === 'number') {\n return MAX_TTL[extension];\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\n/**\n * installServiceWorker\n * @returns {Promise}\n */\nfunction installServiceWorker() {\n return Promise.all([\n caches.open(CACHE_VERSIONS.assets).then((cache) => {\n return cache.addAll(BASE_CACHE_FILES);\n }),\n caches.open(CACHE_VERSIONS.offline).then((cache) => {\n return cache.addAll(OFFLINE_CACHE_FILES);\n }),\n caches.open(CACHE_VERSIONS.notFound).then((cache) => {\n return cache.addAll(NOT_FOUND_CACHE_FILES);\n })\n ]).then(() => {\n return self.skipWaiting();\n });\n}\n\n/**\n * cleanupLegacyCache\n * @returns {Promise}\n */\nfunction cleanupLegacyCache() {\n const currentCaches = Object.keys(CACHE_VERSIONS).map((key) => {\n return CACHE_VERSIONS[key];\n });\n\n return new Promise((resolve, reject) => {\n caches\n .keys()\n .then((keys) => {\n return keys.filter((key) => {\n return !~currentCaches.indexOf(key);\n });\n })\n .then((legacy) => {\n if (legacy.length) {\n Promise.all(\n legacy.map((legacyKey) => {\n return caches.delete(legacyKey);\n })\n )\n .then(() => {\n resolve();\n })\n .catch((err) => {\n reject(err);\n });\n } else {\n resolve();\n }\n })\n .catch((err) => {\n reject(err);\n });\n });\n}\n\nself.addEventListener('install', (event) => {\n event.waitUntil(Promise.all([installServiceWorker(), self.skipWaiting()]));\n});\n\n// The activate handler takes care of cleaning up old caches.\nself.addEventListener('activate', (event) => {\n event.waitUntil(\n Promise.all([\n cleanupLegacyCache(),\n self.clients.claim(),\n self.skipWaiting()\n ]).catch((err) => {\n console.log(err);\n self.skipWaiting();\n })\n );\n});\n\nself.addEventListener('fetch', (event) => {\n event.respondWith(\n caches.open(CACHE_VERSIONS.content).then((cache) => {\n return cache\n .match(event.request)\n .then((response) => {\n if (response) {\n const headers = response.headers.entries();\n let date = null;\n\n for (const pair of headers) {\n if (pair[0] === 'date') {\n date = new Date(pair[1]);\n }\n }\n if (date) {\n const age = parseInt(\n (new Date().getTime() - date.getTime()) / 1000\n );\n const ttl = getTTL(event.request.url);\n\n if (ttl && age > ttl) {\n return new Promise((resolve) => {\n return fetch(event.request.clone())\n .then((updatedResponse) => {\n if (updatedResponse) {\n cache.put(event.request, updatedResponse.clone());\n resolve(updatedResponse);\n } else {\n resolve(response);\n }\n })\n .catch(() => {\n resolve(response);\n });\n }).catch((err) => {\n console.log(err);\n return response;\n });\n } else {\n return response;\n }\n } else {\n return response;\n }\n } else {\n return null;\n }\n })\n .then((response) => {\n if (response) {\n return response;\n } else {\n return fetch(event.request.clone())\n .then((response) => {\n if (response.status < 400) {\n if (\n ~SUPPORTED_METHODS.indexOf(event.request.method) &&\n !isBlacklisted(event.request.url) &&\n event.request.url.slice(0, 4) === 'http'\n ) {\n cache.put(event.request, response.clone());\n }\n return response;\n } else {\n return caches.open(CACHE_VERSIONS.notFound).then((cache) => {\n return cache.match(NOT_FOUND_PAGE);\n });\n }\n })\n .then((response) => {\n if (response) {\n return response;\n }\n })\n .catch(() => {\n return caches\n .open(CACHE_VERSIONS.offline)\n .then((offlineCache) => {\n return offlineCache.match(OFFLINE_PAGE);\n });\n });\n }\n })\n .catch((error) => {\n console.error(' Error in fetch handler:', error);\n throw error;\n });\n })\n );\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/js/service-worker.js"],"names":[],"mappings":"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","file":"service-worker.min.js","sourcesContent":["const CACHE_VERSION = 1;\r\n\r\nconst BASE_CACHE_FILES = [\r\n '/css/style.min.css',\r\n '/js/theme.min.js',\r\n '/site.webmanifest'\r\n];\r\n\r\nconst OFFLINE_CACHE_FILES = [\r\n '/css/style.min.css',\r\n '/js/theme.min.js',\r\n '/site.webmanifest',\r\n '/offline/'\r\n];\r\n\r\nconst NOT_FOUND_CACHE_FILES = [\r\n '/css/style.min.css',\r\n '/js/theme.min.js',\r\n '/site.webmanifest',\r\n '/404.html'\r\n];\r\n\r\nconst OFFLINE_PAGE = '/offline/';\r\nconst NOT_FOUND_PAGE = '/404.html';\r\n\r\nconst CACHE_VERSIONS = {\r\n assets: 'assets-v' + CACHE_VERSION,\r\n content: 'content-v' + CACHE_VERSION,\r\n offline: 'offline-v' + CACHE_VERSION,\r\n notFound: '404-v' + CACHE_VERSION\r\n};\r\n\r\n// Define MAX_TTL's in SECONDS for specific file extensions\r\nconst MAX_TTL = {\r\n '/': 3600,\r\n html: 3600,\r\n json: 86400,\r\n js: 86400,\r\n css: 86400\r\n};\r\n\r\nconst CACHE_BLACKLIST = [\r\n (str) => {\r\n return !str.startsWith('http://localhost');\r\n }\r\n];\r\n\r\nconst SUPPORTED_METHODS = ['GET'];\r\n\r\n/**\r\n * isBlackListed\r\n * @param {string} url\r\n * @returns {boolean}\r\n */\r\nfunction isBlacklisted(url) {\r\n return CACHE_BLACKLIST.length > 0\r\n ? !CACHE_BLACKLIST.filter((rule) => {\r\n if (typeof rule === 'function') {\r\n return !rule(url);\r\n } else {\r\n return false;\r\n }\r\n }).length\r\n : false;\r\n}\r\n\r\n/**\r\n * getFileExtension\r\n * @param {string} url\r\n * @returns {string}\r\n */\r\nfunction getFileExtension(url) {\r\n const extension = url.split('.').reverse()[0].split('?')[0];\r\n return extension.endsWith('/') ? '/' : extension;\r\n}\r\n\r\n/**\r\n * getTTL\r\n * @param {string} url\r\n */\r\nfunction getTTL(url) {\r\n if (typeof url === 'string') {\r\n const extension = getFileExtension(url);\r\n if (typeof MAX_TTL[extension] === 'number') {\r\n return MAX_TTL[extension];\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * installServiceWorker\r\n * @returns {Promise}\r\n */\r\nfunction installServiceWorker() {\r\n return Promise.all([\r\n caches.open(CACHE_VERSIONS.assets).then((cache) => {\r\n return cache.addAll(BASE_CACHE_FILES);\r\n }),\r\n caches.open(CACHE_VERSIONS.offline).then((cache) => {\r\n return cache.addAll(OFFLINE_CACHE_FILES);\r\n }),\r\n caches.open(CACHE_VERSIONS.notFound).then((cache) => {\r\n return cache.addAll(NOT_FOUND_CACHE_FILES);\r\n })\r\n ]).then(() => {\r\n return self.skipWaiting();\r\n });\r\n}\r\n\r\n/**\r\n * cleanupLegacyCache\r\n * @returns {Promise}\r\n */\r\nfunction cleanupLegacyCache() {\r\n const currentCaches = Object.keys(CACHE_VERSIONS).map((key) => {\r\n return CACHE_VERSIONS[key];\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n caches\r\n .keys()\r\n .then((keys) => {\r\n return keys.filter((key) => {\r\n return !~currentCaches.indexOf(key);\r\n });\r\n })\r\n .then((legacy) => {\r\n if (legacy.length) {\r\n Promise.all(\r\n legacy.map((legacyKey) => {\r\n return caches.delete(legacyKey);\r\n })\r\n )\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((err) => {\r\n reject(err);\r\n });\r\n } else {\r\n resolve();\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n}\r\n\r\nself.addEventListener('install', (event) => {\r\n event.waitUntil(Promise.all([installServiceWorker(), self.skipWaiting()]));\r\n});\r\n\r\n// The activate handler takes care of cleaning up old caches.\r\nself.addEventListener('activate', (event) => {\r\n event.waitUntil(\r\n Promise.all([\r\n cleanupLegacyCache(),\r\n self.clients.claim(),\r\n self.skipWaiting()\r\n ]).catch((err) => {\r\n console.log(err);\r\n self.skipWaiting();\r\n })\r\n );\r\n});\r\n\r\nself.addEventListener('fetch', (event) => {\r\n event.respondWith(\r\n caches.open(CACHE_VERSIONS.content).then((cache) => {\r\n return cache\r\n .match(event.request)\r\n .then((response) => {\r\n if (response) {\r\n const headers = response.headers.entries();\r\n let date = null;\r\n\r\n for (const pair of headers) {\r\n if (pair[0] === 'date') {\r\n date = new Date(pair[1]);\r\n }\r\n }\r\n if (date) {\r\n const age = parseInt(\r\n (new Date().getTime() - date.getTime()) / 1000\r\n );\r\n const ttl = getTTL(event.request.url);\r\n\r\n if (ttl && age > ttl) {\r\n return new Promise((resolve) => {\r\n return fetch(event.request.clone())\r\n .then((updatedResponse) => {\r\n if (updatedResponse) {\r\n cache.put(event.request, updatedResponse.clone());\r\n resolve(updatedResponse);\r\n } else {\r\n resolve(response);\r\n }\r\n })\r\n .catch(() => {\r\n resolve(response);\r\n });\r\n }).catch((err) => {\r\n console.log(err);\r\n return response;\r\n });\r\n } else {\r\n return response;\r\n }\r\n } else {\r\n return response;\r\n }\r\n } else {\r\n return null;\r\n }\r\n })\r\n .then((response) => {\r\n if (response) {\r\n return response;\r\n } else {\r\n return fetch(event.request.clone())\r\n .then((response) => {\r\n if (response.status < 400) {\r\n if (\r\n ~SUPPORTED_METHODS.indexOf(event.request.method) &&\r\n !isBlacklisted(event.request.url) &&\r\n event.request.url.slice(0, 4) === 'http'\r\n ) {\r\n cache.put(event.request, response.clone());\r\n }\r\n return response;\r\n } else {\r\n return caches.open(CACHE_VERSIONS.notFound).then((cache) => {\r\n return cache.match(NOT_FOUND_PAGE);\r\n });\r\n }\r\n })\r\n .then((response) => {\r\n if (response) {\r\n return response;\r\n }\r\n })\r\n .catch(() => {\r\n return caches\r\n .open(CACHE_VERSIONS.offline)\r\n .then((offlineCache) => {\r\n return offlineCache.match(OFFLINE_PAGE);\r\n });\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(' Error in fetch handler:', error);\r\n throw error;\r\n });\r\n })\r\n );\r\n});\r\n"]}
\ No newline at end of file