window.addEventListener('load', () => { let loadFlag = false const openSearch = function () { document.body.style.cssText = 'width: 100%;overflow: hidden' document.querySelector('#local-search .search-dialog').style.display = 'block' document.querySelector('#local-search-input input').focus() btf.fadeIn(document.getElementById('search-mask'), 0.5) if (!loadFlag) { search(GLOBAL_CONFIG.localSearch.path) loadFlag = true } // shortcut: ESC document.addEventListener('keydown', function f (event) { if (event.code === 'Escape') { closeSearch() document.removeEventListener('keydown', f) } }) } const closeSearch = function () { document.body.style.cssText = "width: '';overflow: ''" const $searchDialog = document.querySelector('#local-search .search-dialog') $searchDialog.style.animation = 'search_close .5s' setTimeout(() => { $searchDialog.style.cssText = "display: none; animation: ''" }, 500) btf.fadeOut(document.getElementById('search-mask'), 0.5) } // click function const searchClickFn = () => { document.querySelector('#search-button > .search').addEventListener('click', openSearch) document.getElementById('search-mask').addEventListener('click', closeSearch) document.querySelector('#local-search .search-close-button').addEventListener('click', closeSearch) } searchClickFn() // pjax window.addEventListener('pjax:complete', function () { getComputedStyle(document.querySelector('#local-search .search-dialog')).display === 'block' && closeSearch() searchClickFn() }) function search (path) { fetch(GLOBAL_CONFIG.root + path) .then(response => response.text()) .then(str => new window.DOMParser().parseFromString(str, 'text/xml')) .then(data => { const datas = [...data.querySelectorAll('entry')].map(function (item) { const content = item.querySelector('content') return { title: item.querySelector('title').textContent, content: content ? content.textContent : '', url: item.querySelector('url').textContent } }) const $input = document.querySelector('#local-search-input input') const $resultContent = document.getElementById('local-search-results') $input.addEventListener('input', function () { let str = '
' + matchContent + '...
' } } str += '