Fix flexsearch arrow navigation error

This commit is contained in:
Michael Schnerring 2021-10-13 20:13:19 +02:00
parent b1227d78cc
commit 126b3a25ab
1 changed files with 13 additions and 16 deletions

View File

@ -33,24 +33,23 @@ Source:
document.addEventListener('keydown',suggestionFocus); document.addEventListener('keydown',suggestionFocus);
function suggestionFocus(e){ function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= suggestions.querySelectorAll('a'); const focusableSuggestions= [...suggestions.querySelectorAll('a')];
const focusable= [...focusableSuggestions]; if (focusableSuggestions.length === 0) return;
const index = focusable.indexOf(document.activeElement);
const keyDefault = suggestions.classList.contains('d-none'); const index = focusableSuggestions.indexOf(document.activeElement);
let nextIndex = 0; if (e.key === "ArrowUp") {
if ((e.keyCode === 38) && (!keyDefault)) {
e.preventDefault(); e.preventDefault();
nextIndex= index > 0 ? index-1 : 0; const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus(); focusableSuggestions[nextIndex].focus();
} }
else if ((e.keyCode === 40) && (!keyDefault)) { else if (e.key === "ArrowDown") {
e.preventDefault(); e.preventDefault();
nextIndex= index+1 < focusable.length ? index+1 : index; const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus(); focusableSuggestions[nextIndex].focus();
} }
@ -127,11 +126,9 @@ Source:
//flatSearch now returns results for each index field. create a single list //flatSearch now returns results for each index field. create a single list
const flatResults = {}; //keyed by href to dedupe results const flatResults = {}; //keyed by href to dedupe results
results.forEach(result=>{ for (const result of results.flatMap(r => r.result)) {
result.result.forEach(r=>{ flatResults[result.doc.href] = result.doc;
flatResults[r.doc.href] = r.doc; }
});
});
//construct a list of suggestions list //construct a list of suggestions list
for(const href in flatResults) { for(const href in flatResults) {