suggestion improvements

This commit is contained in:
cade
2026-04-02 22:18:37 +00:00
parent 3acd52e605
commit 699caf4b5a
+41 -14
View File
@@ -338,6 +338,7 @@
#form; #form;
#input; #input;
#suggestions; #suggestions;
#lastSuggestions = [];
constructor() { constructor() {
super(); super();
@@ -482,36 +483,53 @@
if (exactMatch) { if (exactMatch) {
suggestions = suggestions.filter((s) => s.startsWith(oq.query)); suggestions = suggestions.filter((s) => s.startsWith(oq.query));
} else { }
for (const key of COMMANDS.keys()) {
if (key !== oq.query && !suggestions.includes(key)) { for (const [key, cmd] of COMMANDS.entries()) {
if (key.startsWith(oq.query) || key.includes(oq.query)) { if (key !== oq.query && !suggestions.includes(key)) {
suggestions.push(key); if (key.includes(oq.query)) {
} suggestions.push(key);
} }
} }
suggestions = suggestions.filter( for (const s of cmd.suggestions ?? []) {
(s) => s.startsWith(oq.query) || s.includes(oq.query) if (s !== oq.query && !suggestions.includes(s)) {
); if (s.includes(oq.query)) {
suggestions.push(s);
}
}
}
} }
if (oq.search?.length > 1 && !exactMatch) { suggestions = suggestions.filter((s) => s.includes(oq.query));
const withStale = [...suggestions, ...this.#lastSuggestions].slice(
0,
CONFIG.suggestionLimit
);
this.#renderSuggestions(withStale, oq.query);
if (oq.search?.length > 1) {
const res = await Search.#fetchDuckDuckGoSuggestions(oq.search); const res = await Search.#fetchDuckDuckGoSuggestions(oq.search);
const nq = Search.#parseQuery(this.#input.value);
if (nq.query !== oq.query) return;
const ddgSuggestions = oq.splitBy const ddgSuggestions = oq.splitBy
? res.map((search) => `${oq.key}${oq.splitBy}${search}`) ? res.map((search) => `${oq.key}${oq.splitBy}${search}`)
: res; : res;
this.#lastSuggestions = ddgSuggestions;
suggestions = [...suggestions, ...ddgSuggestions].slice( suggestions = [...suggestions, ...ddgSuggestions].slice(
0, 0,
CONFIG.suggestionLimit CONFIG.suggestionLimit
); );
}
const nq = Search.#parseQuery(this.#input.value); this.#renderSuggestions(suggestions, oq.query);
if (nq.query !== oq.query) return; } else {
this.#renderSuggestions(suggestions, oq.query); this.#lastSuggestions = [];
}
}; };
#onPaste = (e) => { #onPaste = (e) => {
@@ -573,6 +591,7 @@
}; };
#renderSuggestions(suggestions, query) { #renderSuggestions(suggestions, query) {
const focused = this.shadowRoot.activeElement?.dataset?.suggestion;
this.#suggestions.innerHTML = ''; this.#suggestions.innerHTML = '';
const template = document.getElementById('suggestion-template'); const template = document.getElementById('suggestion-template');
@@ -600,6 +619,14 @@
this.#suggestions.append(clone); this.#suggestions.append(clone);
} }
if (focused) {
const toRefocus = this.#suggestions.querySelector(
`[data-suggestion="${CSS.escape(focused)}"]`
);
toRefocus?.focus();
}
} }
} }