123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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'));
- });
-
- search.addWidgets([
- instantsearch.widgets.configure({
- hitsPerPage: algoliaSettings.hits.per_page || 10
- }),
- instantsearch.widgets.searchBox({
- container : '.search-input-container',
- placeholder : algoliaSettings.labels.input_placeholder,
-
- 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}
- <span class="algolia-powered">
- <img src="${CONFIG.root}images/algolia_logo.svg" alt="Algolia">
- </span>
- <hr>`;
- }
- }
- }),
- instantsearch.widgets.hits({
- container: '#algolia-hits',
- templates: {
- item: data => {
- let link = data.permalink ? data.permalink : CONFIG.root + data.path;
- return `<a href="${link}" class="algolia-hit-item-link">${data._highlightResult.title.value}</a>`;
- },
- empty: data => {
- return `<div id="algolia-hits-empty">
- ${algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query)}
- </div>`;
- }
- },
- cssClasses: {
- item: 'algolia-hit-item'
- }
- }),
- instantsearch.widgets.pagination({
- container: '#algolia-pagination',
- scrollTo : false,
- showFirst: false,
- showLast : false,
- templates: {
- first : '<i class="fa fa-angle-double-left"></i>',
- last : '<i class="fa fa-angle-double-right"></i>',
- previous: '<i class="fa fa-angle-left"></i>',
- next : '<i class="fa fa-angle-right"></i>'
- },
- cssClasses: {
- root : 'pagination',
- item : 'pagination-item',
- link : 'page-number',
- selectedItem: 'current',
- disabledItem: 'disabled-item'
- }
- })
- ]);
- search.start();
-
- document.querySelectorAll('.popup-trigger').forEach(element => {
- element.addEventListener('click', () => {
- document.body.style.overflow = 'hidden';
- document.querySelector('.search-pop-overlay').classList.add('search-active');
- document.querySelector('.search-input').focus();
- });
- });
-
- const onPopupClose = () => {
- document.body.style.overflow = '';
- document.querySelector('.search-pop-overlay').classList.remove('search-active');
- };
- document.querySelector('.search-pop-overlay').addEventListener('click', event => {
- if (event.target === document.querySelector('.search-pop-overlay')) {
- onPopupClose();
- }
- });
- document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose);
- window.addEventListener('pjax:success', onPopupClose);
- window.addEventListener('keyup', event => {
- if (event.key === 'Escape') {
- onPopupClose();
- }
- });
- });
|