/* global instantsearch, algoliasearch, CONFIG */ window.addEventListener('DOMContentLoaded', () => { const algoliaSettings = CONFIG.algolia; const { indexName, appID, apiKey } = algoliaSettings; let search = instantsearch({ indexName, searchClient : algoliasearch(appID, apiKey), searchFunction: helper => { let searchInput = document.querySelector('.search-input'); if (searchInput.value) { helper.search(); } } }); window.pjax && search.on('render', () => { window.pjax.refresh(document.getElementById('algolia-hits')); }); // Registering Widgets search.addWidgets([ instantsearch.widgets.configure({ hitsPerPage: algoliaSettings.hits.per_page || 10 }), instantsearch.widgets.searchBox({ container : '.search-input-container', placeholder : algoliaSettings.labels.input_placeholder, // Hide default icons of algolia search showReset : false, showSubmit : false, showLoadingIndicator: false, cssClasses : { input: 'search-input' } }), instantsearch.widgets.stats({ container: '#algolia-stats', templates: { text: data => { let stats = algoliaSettings.labels.hits_stats .replace(/\$\{hits}/, data.nbHits) .replace(/\$\{time}/, data.processingTimeMS); return `${stats} Algolia
`; } } }), instantsearch.widgets.hits({ container: '#algolia-hits', templates: { item: data => { let link = data.permalink ? data.permalink : CONFIG.root + data.path; return `${data._highlightResult.title.value}`; }, empty: data => { return `
${algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query)}
`; } }, cssClasses: { item: 'algolia-hit-item' } }), instantsearch.widgets.pagination({ container: '#algolia-pagination', scrollTo : false, showFirst: false, showLast : false, templates: { first : '', last : '', previous: '', next : '' }, cssClasses: { root : 'pagination', item : 'pagination-item', link : 'page-number', selectedItem: 'current', disabledItem: 'disabled-item' } }) ]); search.start(); // Handle and trigger popup window document.querySelectorAll('.popup-trigger').forEach(element => { element.addEventListener('click', () => { document.body.style.overflow = 'hidden'; document.querySelector('.search-pop-overlay').style.display = 'block'; document.querySelector('.popup').style.display = 'block'; document.querySelector('.search-input').focus(); }); }); // Monitor main search box const onPopupClose = () => { document.body.style.overflow = ''; document.querySelector('.search-pop-overlay').style.display = 'none'; document.querySelector('.popup').style.display = 'none'; }; document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose); document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); window.addEventListener('pjax:success', onPopupClose); window.addEventListener('keyup', event => { if (event.key === 'Escape') { onPopupClose(); } }); });