diff options
author | Alex Shpak <alex-shpak@users.noreply.github.com> | 2021-05-19 20:26:21 +0200 |
---|---|---|
committer | Alex Shpak <alex-shpak@users.noreply.github.com> | 2021-05-19 20:26:21 +0200 |
commit | d7c644f0e7062bd847911bcfd9d9eaf401f3c36d (patch) | |
tree | 7b9d3c6d1587df722aebf271737ab9c5b1d82b7c /assets/search.js | |
parent | 843144dd85e374ade722e2f2b0b3511a0e34d8f6 (diff) |
Refactor search, prepare for pre-built indexing
Diffstat (limited to 'assets/search.js')
-rw-r--r-- | assets/search.js | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/assets/search.js b/assets/search.js index 3635a1f..4e1c1da 100644 --- a/assets/search.js +++ b/assets/search.js @@ -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); } /** |