From cf1bbf8967f167cec34b3e6a79c8ebf4d9adaa35 Mon Sep 17 00:00:00 2001 From: Roman Frolov Date: Fri, 29 Aug 2025 20:27:44 +0200 Subject: [PATCH 1/4] feat: allow use Enter in search if have no focus --- static/search.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/static/search.js b/static/search.js index 3f1bbd4..1630c0b 100644 --- a/static/search.js +++ b/static/search.js @@ -20,14 +20,27 @@ document.addEventListener("keyup", function (keyboardEvent) { }); document.addEventListener("keydown", function (keyboardEvent) { - const len = searchResultsItems.getElementsByTagName("li").length - 1; + const items = searchResultsItems.getElementsByTagName("li"); + const len = items.length - 1; - if (keyboardEvent.key === DOWN_ARROW) { + switch (keyboardEvent.key) { + case DOWN_ARROW: + keyboardEvent.preventDefault(); downArrow(len); - } else if (keyboardEvent.key === UP_ARROW) { - upArrow(len); - } else if (keyboardEvent.key === ENTER_KEY) { - searchItemSelected.getElementsByTagName("a")[0].click(); + break; + + case UP_ARROW: + keyboardEvent.preventDefault(); + upArrow(len); + break; + + case ENTER_KEY: { + const parent = searchItemSelected || searchResultsItems; + const target = parent.querySelector("a"); + + if (target) target.click(); + break; + } } }); From 2aa9e4a87d3393f785d116b103e461f70c732ae4 Mon Sep 17 00:00:00 2001 From: Roman Frolov Date: Mon, 1 Sep 2025 11:15:50 +0200 Subject: [PATCH 2/4] feat: follow up focused item in search list --- static/search.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/search.js b/static/search.js index 1630c0b..49eb125 100644 --- a/static/search.js +++ b/static/search.js @@ -63,6 +63,7 @@ function downArrow(len) { } searchItemSelected.focus() + searchItemSelected.scrollIntoView({ block: "nearest" }); addClass(searchItemSelected, "selected"); } @@ -82,7 +83,8 @@ function upArrow(len) { searchItemSelected = searchResultsItems.getElementsByTagName("li")[len]; } } - searchItemSelected.focus() + searchItemSelected.focus(); + searchItemSelected.scrollIntoView({ block: "nearest" }); addClass(searchItemSelected, "selected"); } From 0c774cf312d28bd2183f4e8358916c3164f42810 Mon Sep 17 00:00:00 2001 From: Roman Frolov Date: Mon, 1 Sep 2025 11:18:52 +0200 Subject: [PATCH 3/4] feat: handle Escape keyboard actions --- static/search.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/static/search.js b/static/search.js index 49eb125..6de8d30 100644 --- a/static/search.js +++ b/static/search.js @@ -2,6 +2,7 @@ const MAX_ITEMS = 10; const UP_ARROW = "ArrowUp"; const DOWN_ARROW = "ArrowDown"; const ENTER_KEY = "Enter"; +const ESCAPE_KEY = "Escape"; const searchInput = document.getElementById("search"); const searchResults = document.getElementById("search-results"); @@ -41,6 +42,14 @@ document.addEventListener("keydown", function (keyboardEvent) { if (target) target.click(); break; } + + case ESCAPE_KEY: { + searchInput.value = ""; + searchResults.style.display = "none"; + searchInput.blur(); + break; + } + } }); From 55d9d02968c03091e01b95e9764bd43d58ccf138 Mon Sep 17 00:00:00 2001 From: Roman Frolov Date: Mon, 1 Sep 2025 11:29:32 +0200 Subject: [PATCH 4/4] ref: lint --- static/search.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/static/search.js b/static/search.js index b8f132f..b760f55 100644 --- a/static/search.js +++ b/static/search.js @@ -26,21 +26,21 @@ document.addEventListener("keydown", function (keyboardEvent) { switch (keyboardEvent.key) { case DOWN_ARROW: - keyboardEvent.preventDefault(); - downArrow(len); - break; + keyboardEvent.preventDefault(); + downArrow(len); + break; case UP_ARROW: - keyboardEvent.preventDefault(); - upArrow(len); - break; + keyboardEvent.preventDefault(); + upArrow(len); + break; case ENTER_KEY: { - const parent = searchItemSelected || searchResultsItems; - const target = parent.querySelector("a"); + const parent = searchItemSelected || searchResultsItems; + const target = parent.querySelector("a"); - if (target) target.click(); - break; + if (target) target.click(); + break; } case ESCAPE_KEY: { @@ -49,7 +49,6 @@ document.addEventListener("keydown", function (keyboardEvent) { searchInput.blur(); break; } - } });