Browse Source

[fix] keyboard.js - highlightResult: don't steal focus on click event

For keyboard navigation the highlightResult() function in keyboard.js steals the
focus.  On a mouse click event (non keyboard action) the focus should resist
where it is, otherwise a marked region gets lost.  This is the reason why text
can't be selected when using simple theme with JS enabled.

Closes: https://github.com/searxng/searxng/issues/794
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Markus Heiser 2 years ago
parent
commit
882282d0e9
1 changed files with 7 additions and 5 deletions
  1. 7 5
      searx/static/themes/simple/src/js/main/keyboard.js

+ 7 - 5
searx/static/themes/simple/src/js/main/keyboard.js

@@ -34,7 +34,7 @@ searxng.ready(function () {
 
   searxng.on('.result', 'click', function (e) {
     if (!isElementInDetail(e.target)) {
-      highlightResult(this)(true);
+      highlightResult(this)(true, true);
       let resultElement = getResultElement(e.target);
       if (isImageResult(resultElement)) {
         e.preventDefault();
@@ -172,7 +172,7 @@ searxng.ready(function () {
   }
 
   function highlightResult (which) {
-    return function (noScroll) {
+    return function (noScroll, keepFocus) {
       var current = document.querySelector('.result[data-vim-selected]'),
         effectiveWhich = which;
       if (current === null) {
@@ -233,9 +233,11 @@ searxng.ready(function () {
       if (next) {
         current.removeAttribute('data-vim-selected');
         next.setAttribute('data-vim-selected', 'true');
-        var link = next.querySelector('h3 a') || next.querySelector('a');
-        if (link !== null) {
-          link.focus();
+        if (!keepFocus) {
+          var link = next.querySelector('h3 a') || next.querySelector('a');
+          if (link !== null) {
+            link.focus();
+          }
         }
         if (!noScroll) {
           scrollPageToSelected();