diff options
author | Gio <sethg@ipi.org> | 2024-03-25 20:47:21 -0500 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-05-31 12:11:43 -0300 |
commit | 3b2f391d291e37e0c39a3fc4c7a406c4b6da12b1 (patch) | |
tree | a2cdfcca709d5d2fbf52980faed0ff1938d820c3 /src/static | |
parent | e47626f08436816cd855148aa8f663888923a919 (diff) |
upd8: Search implementation
Diffstat (limited to 'src/static')
-rw-r--r-- | src/static/clientSearch.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/static/clientSearch.js b/src/static/clientSearch.js new file mode 100644 index 00000000..4d01cfd9 --- /dev/null +++ b/src/static/clientSearch.js @@ -0,0 +1,42 @@ +/* eslint-env browser */ + +async function initSearch() { + const FlexSearch = window.FlexSearch; + + // Copied directly from server search.js + window.indexes = { + albums: new FlexSearch.Document({ + id: "reference", + index: ["name", "groups"], + }), + tracks: new FlexSearch.Document({ + id: "reference", + index: ["track", "album", "artists", "directory", "additionalNames"], + }), + artists: new FlexSearch.Document({ + id: "reference", + index: ["names"], + }) + } + + let searchData = await fetch('/media/search_index.json').then(resp => resp.json()) + + Object.entries(searchData).forEach(key_index_pair => { + const [index_key, index_data] = key_index_pair + Object.entries(index_data).forEach(key_value_pair => { + const [key, value] = key_value_pair + window.indexes[index_key].import(key, value); + }) + }) +} + +function searchAll(query, options) { + options = options || {} + return Object.entries(window.indexes).reduce((a, pair) => { + const [k, v] = pair + a[k] = v.search(query, options) + return a + }, {}) +} + +document.addEventListener('DOMContentLoaded', initSearch); |