window.addEventListener('load', () => { const openSearch = () => { const bodyStyle = document.body.style bodyStyle.width = '100%' bodyStyle.overflow = 'hidden' btf.animateIn(document.getElementById('search-mask'), 'to_show 0.5s') btf.animateIn(document.querySelector('#algolia-search .search-dialog'), 'titleScale 0.5s') setTimeout(() => { document.querySelector('#algolia-search .ais-SearchBox-input').focus() }, 100) // shortcut: ESC document.addEventListener('keydown', function f (event) { if (event.code === 'Escape') { closeSearch() document.removeEventListener('keydown', f) } }) } const closeSearch = () => { const bodyStyle = document.body.style bodyStyle.width = '' bodyStyle.overflow = '' btf.animateOut(document.querySelector('#algolia-search .search-dialog'), 'search_close .5s') btf.animateOut(document.getElementById('search-mask'), 'to_hide 0.5s') } const searchClickFn = () => { document.querySelector('#search-button > .search').addEventListener('click', openSearch) document.getElementById('search-mask').addEventListener('click', closeSearch) document.querySelector('#algolia-search .search-close-button').addEventListener('click', closeSearch) } searchClickFn() window.addEventListener('pjax:complete', function () { getComputedStyle(document.querySelector('#algolia-search .search-dialog')).display === 'block' && closeSearch() searchClickFn() }) const algolia = GLOBAL_CONFIG.algolia const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName if (!isAlgoliaValid) { return console.error('Algolia setting is invalid!') } const searchClient = window.algoliasearch(algolia.appId, algolia.apiKey) const search = instantsearch({ indexName: algolia.indexName, searchClient }) search.addWidgets([ instantsearch.widgets.configure({ hitsPerPage: 5 }) ]) search.addWidgets([ instantsearch.widgets.searchBox({ container: '#algolia-search-input', showReset: false, showSubmit: false, placeholder: GLOBAL_CONFIG.algolia.languages.input_placeholder, showLoadingIndicator: true }) ]) search.addWidgets([ instantsearch.widgets.hits({ container: '#algolia-hits', templates: { item: function (data) { const link = data.permalink ? data.permalink : (GLOBAL_CONFIG.root + data.path) return ` ${data._highlightResult.title.value || 'no-title'} ` }, empty: function (data) { return ( '