From 5c07a9a50fa0f60939a2527d339230421448c6c6 Mon Sep 17 00:00:00 2001 From: tdro Date: Wed, 11 Oct 2023 19:37:23 -0400 Subject: static/js/fixedsearch: Track last click and return state For chromium and others that drop state Apply keyboard/click cancelling to form and children --- assets/js/index.js | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'assets/js') diff --git a/assets/js/index.js b/assets/js/index.js index 4ae6d7c..acdcd57 100644 --- a/assets/js/index.js +++ b/assets/js/index.js @@ -385,9 +385,27 @@ "key": keyname })); } - submit.addEventListener("click", function() { + let selected; + submit.addEventListener("click", function(event) { + if (selected) { + event.preventDefault(); + selected.focus(); + return selected.click(); + } first(dropdown).focus(); press("ArrowDown"); + document.activeElement.click(); + }); + [ + "keyup", + "click" + ].forEach(function(event) { + form.addEventListener(event, function(event) { + if (document.activeElement.nodeName === "A") { + return selected = document.activeElement; + } + selected = undefined; + }); }); form.addEventListener("focusin", function() { container.setAttribute("data-focus", ""); @@ -398,15 +416,21 @@ return false; }); form.addEventListener("keydown", function(event) { - const head = first(dropdown); - const tail = last(dropdown); - if (query.contains(event.target)) { + if (form.contains(event.target)) { if (event.keyCode == 27) { document.activeElement.blur(); dropdown.setAttribute("hidden", ""); container.removeAttribute("data-focus"); } } + if (event.keyCode == 8) { + if (document.activeElement != query) { + event.preventDefault(); + query.focus(); + } + } + const head = first(dropdown); + const tail = last(dropdown); if (event.keyCode == 40) { event.preventDefault(); if (document.activeElement == query) head.focus(); @@ -419,12 +443,6 @@ else if (document.activeElement == head) query.focus(); else previous(document); } - if (event.keyCode == 8) { - if (document.activeElement != query) { - event.preventDefault(); - query.focus(); - } - } if (event.keyCode == 13) { if (dropdown && document.activeElement == query) { event.preventDefault(); @@ -443,8 +461,8 @@ } scrolls++; }); - document.addEventListener("click", function(event) { - if (!form.contains(event.target) && !(document.activeElement === query)) { + self.addEventListener("click", function(event) { + if (!form.contains(event.target) && !(document.activeElement === query) && !(document.activeElement === submit)) { dropdown.setAttribute("hidden", ""); container.removeAttribute("data-focus"); } -- cgit v1.2.3