Skip to content

Commit f358512

Browse files
authored
Merge pull request #132 from Lacsw/improve-search-ux
Improve search ux
2 parents 68452e0 + 55d9d02 commit f358512

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

static/search.js

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const MAX_ITEMS = 10;
22
const UP_ARROW = "ArrowUp";
33
const DOWN_ARROW = "ArrowDown";
44
const ENTER_KEY = "Enter";
5+
const ESCAPE_KEY = "Escape";
56

67
const searchInput = document.getElementById("search");
78
const searchResults = document.getElementById("search-results");
@@ -20,14 +21,34 @@ document.addEventListener("keyup", function (keyboardEvent) {
2021
});
2122

2223
document.addEventListener("keydown", function (keyboardEvent) {
23-
const len = searchResultsItems.getElementsByTagName("li").length - 1;
24-
25-
if (keyboardEvent.key === DOWN_ARROW) {
26-
downArrow(len);
27-
} else if (keyboardEvent.key === UP_ARROW) {
28-
upArrow(len);
29-
} else if (keyboardEvent.key === ENTER_KEY) {
30-
searchItemSelected.getElementsByTagName("a")[0].click();
24+
const items = searchResultsItems.getElementsByTagName("li");
25+
const len = items.length - 1;
26+
27+
switch (keyboardEvent.key) {
28+
case DOWN_ARROW:
29+
keyboardEvent.preventDefault();
30+
downArrow(len);
31+
break;
32+
33+
case UP_ARROW:
34+
keyboardEvent.preventDefault();
35+
upArrow(len);
36+
break;
37+
38+
case ENTER_KEY: {
39+
const parent = searchItemSelected || searchResultsItems;
40+
const target = parent.querySelector("a");
41+
42+
if (target) target.click();
43+
break;
44+
}
45+
46+
case ESCAPE_KEY: {
47+
searchInput.value = "";
48+
searchResults.style.display = "none";
49+
searchInput.blur();
50+
break;
51+
}
3152
}
3253
});
3354

@@ -50,6 +71,7 @@ function downArrow(len) {
5071
}
5172

5273
searchItemSelected.focus()
74+
searchItemSelected.scrollIntoView({ block: "nearest" });
5375
addClass(searchItemSelected, "selected");
5476
}
5577

@@ -69,7 +91,8 @@ function upArrow(len) {
6991
searchItemSelected = searchResultsItems.getElementsByTagName("li")[len];
7092
}
7193
}
72-
searchItemSelected.focus()
94+
searchItemSelected.focus();
95+
searchItemSelected.scrollIntoView({ block: "nearest" });
7396
addClass(searchItemSelected, "selected");
7497
}
7598

0 commit comments

Comments
 (0)