1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /*************************************************
- * Wowchemy
- * https://github.com/wowchemy/wowchemy-hugo-modules
- *
- * Algolia based search algorithm.
- **************************************************/
- import {algoliaConfig, i18n, content_type} from '@params';
- function getTemplate(templateName) {
- return document.querySelector(`#${templateName}-template`).innerHTML;
- }
- if (typeof instantsearch === 'function' && $('#search-box').length) {
- const options = {
- appId: algoliaConfig.appId,
- apiKey: algoliaConfig.apiKey,
- indexName: algoliaConfig.indexName,
- routing: true,
- searchParameters: {
- hitsPerPage: 10,
- },
- searchFunction: function (helper) {
- let searchResults = document.querySelector('#search-hits');
- if (helper.state.query === '') {
- searchResults.style.display = 'none';
- return;
- }
- helper.search();
- searchResults.style.display = 'block';
- },
- };
- const search = instantsearch(options);
- // Initialize search box.
- search.addWidget(
- instantsearch.widgets.searchBox({
- container: '#search-box',
- autofocus: false,
- reset: true,
- poweredBy: algoliaConfig.poweredBy,
- placeholder: i18n.placeholder,
- }),
- );
- // Initialize search results.
- search.addWidget(
- instantsearch.widgets.infiniteHits({
- container: '#search-hits',
- escapeHits: true,
- templates: {
- empty: '<div class="search-no-results">' + i18n.no_results + '</div>',
- item: getTemplate('search-hit-algolia'),
- },
- cssClasses: {
- showmoreButton: 'btn btn-outline-primary',
- },
- }),
- );
- // On render search results, localize the content type metadata.
- search.on('render', function () {
- $('.search-hit-type').each(function () {
- let content_key = $(this).text();
- if (content_key in content_type) {
- $(this).text(content_type[content_key]);
- }
- });
- });
- // Start search.
- search.start();
- }
|