aboutsummaryrefslogtreecommitdiff
path: root/frontend/start.ts
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/start.ts')
-rw-r--r--frontend/start.ts26
1 files changed, 13 insertions, 13 deletions
diff --git a/frontend/start.ts b/frontend/start.ts
index 71c1923..4b8019d 100644
--- a/frontend/start.ts
+++ b/frontend/start.ts
@@ -1,7 +1,7 @@
import { e } from "./helper.ts"
import { bangs } from "./query.ts"
import { status } from "./ui.ts"
-import Fuse from "./fuse.js"
+import fuzzysort from "./fuzzysort.js"
export function section_info_start() {
return e("section", { class: "info" },
@@ -59,39 +59,39 @@ export function section_engine_select() {
)
}
-// TODO fuse is a bit slow; this search function may hinder fast typing
-interface FuseItem { bang: string, name: string, url: string }
-let bangsSearch: Promise<{ search: (name: string) => { item: FuseItem }[] }> | undefined = undefined;
+interface FuzzItem<E> { score: number, obj: E }
+let bangsSearch: Promise<(query: string) => FuzzItem<{bang: string, name: string, url: string}>[]>
+ | undefined = undefined;
function setSearchResults(ul: HTMLElement, input: HTMLInputElement, submit: () => void) {
if (bangsSearch === undefined) {
bangsSearch = bangs.then(bangs => {
- const searchSpace = []
+ const searchSpace: {bang: string, name: string, url: string}[] = []
for (const k in bangs) {
searchSpace.push({
bang: k,
- name: bangs[k]!.name,
- url: bangs[k]!.url
+ name: bangs[k]!.name!,
+ url: bangs[k]!.url!
})
}
- return new Fuse(searchSpace, {
+ return q => fuzzysort.go(q, searchSpace, {
+ threshhold: -5000,
+ limit: 5,
keys: ["bang", "name"],
- minMatchCharLength: 3
})
})
}
- bangsSearch.then(fuse => {
+ bangsSearch.then(fs => {
ul.innerHTML = ""
- const results = fuse.search(input.value).slice(0, 5)
+ const results = fs(input.value)
if (results.length === 0)
ul.style.display = "none"
else {
ul.style.display = "flex"
for (const r of results) {
- const it = r.item
-
+ const it = r.obj
const li = e("li", {},
e("p", { class: "name" }, it.name),
e("p", { class: "bang" }, it.bang))