Files
HugoBlox-kit/assets/js/algolia-search.js
T
George Cushen 3ea332ca67 refactor(js): shorten MathJax filename and minify + fingerprint assets
Remove fingerprinting from MathJax config JS to shorten its generated
filename. Reduces chance of JS filenames becoming too long for user's OS
to handle due to long Sha512 asset fingerprinting.

Minifies and fingerprints Academic's own JS for faster loading and to
prevent old versions getting cached by web browser.

Refactors Algolia search JS into its own file.

Close #768
See #794
2018-11-11 16:06:24 +00:00

73 lines
1.9 KiB
JavaScript

/*************************************************
* Academic
* https://github.com/gcushen/hugo-academic
*
* Algolia based search algorithm.
**************************************************/
if ((typeof instantsearch === 'function') && $('#search-box').length) {
function getTemplate(templateName) {
return document.querySelector(`#${templateName}-template`).innerHTML;
}
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 (index) {
let content_key = $(this).text();
if (content_key in content_type) {
$(this).text(content_type[content_key]);
}
});
});
// Start search.
search.start();
}