aboutsummaryrefslogtreecommitdiff
path: root/assets/js
diff options
context:
space:
mode:
authortdro <tdro@noreply.example.com>2023-10-11 19:37:23 -0400
committertdro <tdro@noreply.example.com>2023-10-11 19:37:23 -0400
commit5c07a9a50fa0f60939a2527d339230421448c6c6 (patch)
treee0d12ba92f0124ba33c1b39b843375ae5c5a0ebb /assets/js
parentdaddf9e6ed828cd90d1f6db38aa72d6aef66b0b5 (diff)
downloadcanory-5c07a9a50fa0f60939a2527d339230421448c6c6.tar.gz
canory-5c07a9a50fa0f60939a2527d339230421448c6c6.tar.bz2
canory-5c07a9a50fa0f60939a2527d339230421448c6c6.zip
static/js/fixedsearch: Track last click and return state
For chromium and others that drop state Apply keyboard/click cancelling to form and children
Diffstat (limited to 'assets/js')
-rw-r--r--assets/js/index.js42
1 files changed, 30 insertions, 12 deletions
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");
}