Refactor search, prepare for pre-built indexing

This commit is contained in:
Alex Shpak
2021-05-19 20:26:21 +02:00
parent 843144dd85
commit d7c644f0e7
6 changed files with 47 additions and 63 deletions
+20 -20
View File
@@ -1,9 +1,19 @@
'use strict';
{{ $searchDataFile := printf "%s.search-data.js" .Language.Lang }}
{{ $searchData := resources.Get "search-data.js" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify | resources.Fingerprint }}
{{ $searchDataFile := printf "%s.search-data.json" .Language.Lang }}
{{ $searchData := resources.Get "search-data.json" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify | resources.Fingerprint }}
{{ $searchConfig := i18n "bookSearchConfig" | default "{}" }}
(function () {
const searchDataURL = '{{ $searchData.RelPermalink }}';
const indexConfig = Object.assign({{ $searchConfig }}, {
doc: {
id: 'id',
field: ['title', 'content'],
store: ['title', 'href', 'section']
}
});
const input = document.querySelector('#book-search-input');
const results = document.querySelector('#book-search-results');
@@ -46,11 +56,14 @@
input.removeEventListener('focus', init); // init once
input.required = true;
loadScript('{{ "flexsearch.min.js" | relURL }}');
loadScript('{{ $searchData.RelPermalink }}', function () {
input.required = false;
search();
});
fetch(searchDataURL)
.then(pages => pages.json())
.then(pages => {
window.bookSearchIndex = FlexSearch.create('balance', indexConfig);
window.bookSearchIndex.add(pages);
})
.then(() => input.required = false)
.then(search);
}
function search() {
@@ -74,19 +87,6 @@
results.appendChild(li);
});
}
/**
* @param {String} src
* @param {Function} callback
*/
function loadScript(src, callback) {
const script = document.createElement('script');
script.defer = true;
script.async = false;
script.src = src;
script.onload = callback;
document.head.appendChild(script);
}
/**