2022-08-01 00:54:23 +07:00
|
|
|
; (async function() {
|
2022-05-02 23:56:44 +07:00
|
|
|
const encoder = (str) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])+/)
|
2022-04-03 02:59:38 +07:00
|
|
|
const contentIndex = new FlexSearch.Document({
|
|
|
|
cache: true,
|
2022-05-30 10:40:44 +07:00
|
|
|
charset: "latin:extra",
|
2022-04-03 02:59:38 +07:00
|
|
|
optimize: true,
|
2022-05-02 12:06:33 +07:00
|
|
|
index: [
|
|
|
|
{
|
2022-05-30 10:40:44 +07:00
|
|
|
field: "content",
|
|
|
|
tokenize: "reverse",
|
2022-05-02 12:06:33 +07:00
|
|
|
encode: encoder,
|
|
|
|
},
|
|
|
|
{
|
2022-05-30 10:40:44 +07:00
|
|
|
field: "title",
|
|
|
|
tokenize: "forward",
|
2022-05-02 12:06:33 +07:00
|
|
|
encode: encoder,
|
|
|
|
},
|
|
|
|
],
|
2022-04-03 02:59:38 +07:00
|
|
|
})
|
|
|
|
|
|
|
|
const { content } = await fetchData
|
|
|
|
for (const [key, value] of Object.entries(content)) {
|
|
|
|
contentIndex.add({
|
|
|
|
id: key,
|
|
|
|
title: value.title,
|
|
|
|
content: removeMarkdown(value.content),
|
2022-03-04 09:07:51 +07:00
|
|
|
})
|
2022-04-03 02:59:38 +07:00
|
|
|
}
|
|
|
|
|
2022-05-02 12:06:33 +07:00
|
|
|
const formatForDisplay = (id) => ({
|
2022-04-03 02:59:38 +07:00
|
|
|
id,
|
|
|
|
url: id,
|
|
|
|
title: content[id].title,
|
2022-05-02 12:06:33 +07:00
|
|
|
content: content[id].content,
|
2022-04-03 02:59:38 +07:00
|
|
|
})
|
|
|
|
|
2022-08-01 00:54:23 +07:00
|
|
|
registerHandlers((e) => {
|
2022-04-03 02:59:38 +07:00
|
|
|
term = e.target.value
|
|
|
|
const searchResults = contentIndex.search(term, [
|
|
|
|
{
|
2022-05-30 10:40:44 +07:00
|
|
|
field: "content",
|
2022-04-03 02:59:38 +07:00
|
|
|
limit: 10,
|
|
|
|
},
|
|
|
|
{
|
2022-05-30 10:40:44 +07:00
|
|
|
field: "title",
|
2022-04-03 02:59:38 +07:00
|
|
|
limit: 5,
|
2022-05-02 12:06:33 +07:00
|
|
|
},
|
2022-04-03 02:59:38 +07:00
|
|
|
])
|
2022-05-02 12:06:33 +07:00
|
|
|
const getByField = (field) => {
|
2022-05-02 23:56:44 +07:00
|
|
|
const results = searchResults.filter((x) => x.field === field)
|
2022-04-03 02:59:38 +07:00
|
|
|
if (results.length === 0) {
|
|
|
|
return []
|
|
|
|
} else {
|
|
|
|
return [...results[0].result]
|
|
|
|
}
|
2022-03-04 09:07:51 +07:00
|
|
|
}
|
2022-05-30 10:40:44 +07:00
|
|
|
const allIds = new Set([...getByField("title"), ...getByField("content")])
|
2022-04-03 02:59:38 +07:00
|
|
|
const finalResults = [...allIds].map(formatForDisplay)
|
2022-08-01 00:54:23 +07:00
|
|
|
displayResults(finalResults)
|
2022-04-03 02:59:38 +07:00
|
|
|
})
|
2022-03-04 09:07:51 +07:00
|
|
|
})()
|