From d1c09c84e21ac66d2701e74dd25dbbf33895c0f9 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Fri, 5 Nov 2021 10:26:01 +0100 Subject: [PATCH 1/4] [fix] simple theme: disable hotkeys when they are not enabled in the preferences --- .../themes/simple/src/js/head/00_init.js | 1 + .../themes/simple/src/js/main/keyboard.js | 29 ++++++++++--------- searx/templates/simple/base.html | 1 + 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/searx/static/themes/simple/src/js/head/00_init.js b/searx/static/themes/simple/src/js/head/00_init.js index 4406b764e..d359a9174 100644 --- a/searx/static/themes/simple/src/js/head/00_init.js +++ b/searx/static/themes/simple/src/js/head/00_init.js @@ -21,6 +21,7 @@ autocompleter: script.getAttribute('data-autocompleter') === 'true', search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true', infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', + hotkeys: script.getAttribute('data-hotkeys') === 'true', static_path: script.getAttribute('data-static-path'), translations: JSON.parse(script.getAttribute('data-translations')), }; diff --git a/searx/static/themes/simple/src/js/main/keyboard.js b/searx/static/themes/simple/src/js/main/keyboard.js index 394f97730..26cc6f7d0 100644 --- a/searx/static/themes/simple/src/js/main/keyboard.js +++ b/searx/static/themes/simple/src/js/main/keyboard.js @@ -119,20 +119,22 @@ searxng.ready(function() { } }; - searxng.on(document, "keydown", function(e) { - // check for modifiers so we don't break browser's hotkeys - if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { - var tagName = e.target.tagName.toLowerCase(); - if (e.keyCode === 27) { - vimKeys[e.keyCode].fun(e); - } else { - if (e.target === document.body || tagName === 'a' || tagName === 'button') { - e.preventDefault(); - vimKeys[e.keyCode].fun(); + if (searxng.hotkeys) { + searxng.on(document, "keydown", function(e) { + // check for modifiers so we don't break browser's hotkeys + if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { + var tagName = e.target.tagName.toLowerCase(); + if (e.keyCode === 27) { + vimKeys[e.keyCode].fun(e); + } else { + if (e.target === document.body || tagName === 'a' || tagName === 'button') { + e.preventDefault(); + vimKeys[e.keyCode].fun(); + } } } - } - }); + }); + } function highlightResult(which) { return function(noScroll) { @@ -353,8 +355,7 @@ searxng.ready(function() { } function toggleHelp() { - var helpPanel = document.querySelector('#vim-hotkeys-help'); - console.log(helpPanel); + var helpPanel = document.querySelector('#vim-hotkeys-help'); if (helpPanel === undefined || helpPanel === null) { // first call helpPanel = document.createElement('div'); diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html index 108d2fcf5..f6594041d 100644 --- a/searx/templates/simple/base.html +++ b/searx/templates/simple/base.html @@ -24,6 +24,7 @@ data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}" data-search-on-category-select="{{ 'true' if 'plugins/js/search_on_category_select.js' in scripts else 'false'}}" data-infinite-scroll="{{ 'true' if 'plugins/js/infinite_scroll.js' in scripts else 'false' }}" + data-hotkeys="{{ 'true' if 'plugins/js/vim_hotkeys.js' in scripts else 'false' }}" data-static-path="{{ url_for('static', filename='themes/simple') }}/" data-translations="{{ translations }}"> From 4d051c43f3f91357a6db8147e5cfb2d9f9a79286 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Fri, 5 Nov 2021 11:33:43 +0100 Subject: [PATCH 2/4] [fix] simple theme: various about the hotkeys help * dark mode: #555 border (same as infoboxes and other borders) * remove a call to console.log * center the dialog without using the style attribute. --- searx/static/themes/simple/src/js/main/keyboard.js | 1 - searx/static/themes/simple/src/less/definitions.less | 2 +- searx/static/themes/simple/src/less/toolkit.less | 6 ++---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/searx/static/themes/simple/src/js/main/keyboard.js b/searx/static/themes/simple/src/js/main/keyboard.js index 26cc6f7d0..61fa7ba92 100644 --- a/searx/static/themes/simple/src/js/main/keyboard.js +++ b/searx/static/themes/simple/src/js/main/keyboard.js @@ -361,7 +361,6 @@ searxng.ready(function() { helpPanel = document.createElement('div'); helpPanel.id = 'vim-hotkeys-help'; helpPanel.className='dialog-modal'; - helpPanel.style='width: 40%'; initHelpContent(helpPanel); initHelpContent(helpPanel); initHelpContent(helpPanel); diff --git a/searx/static/themes/simple/src/less/definitions.less b/searx/static/themes/simple/src/less/definitions.less index a09735c5e..33b65a682 100644 --- a/searx/static/themes/simple/src/less/definitions.less +++ b/searx/static/themes/simple/src/less/definitions.less @@ -185,7 +185,7 @@ --color-toolkit-badge-background: #777; --color-toolkit-kbd-font: #000; --color-toolkit-kbd-background: #fff; - --color-toolkit-dialog-border: #333; + --color-toolkit-dialog-border: #555; --color-toolkit-dialog-background: #222; --color-toolkit-tabs-label-border: #222; --color-toolkit-tabs-section-border: #555; diff --git a/searx/static/themes/simple/src/less/toolkit.less b/searx/static/themes/simple/src/less/toolkit.less index 4f1c3f338..faed6ea9f 100644 --- a/searx/static/themes/simple/src/less/toolkit.less +++ b/searx/static/themes/simple/src/less/toolkit.less @@ -196,11 +196,9 @@ div.selectable_url { position: fixed; top: 50%; left: 50%; - - /* bring your own prefixes */ + margin: 0 auto; transform: translate(-50%, -50%); - z-index: 100000; - margin: 0 50% 0 0; + z-index: 10000000; } // btn-collapse From c00e54d61b71bf03e47e3c1c5b58f6b520d18d9b Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Fri, 5 Nov 2021 12:33:38 +0100 Subject: [PATCH 3/4] [fix] simple theme: image detail: click on the URL to the HTML page works Before this commit, the default click event on an image result is prevented, this include clicks inside the detail. This commit makes sure the click happends outside the detail to prevent the default event. --- .../themes/simple/src/js/main/keyboard.js | 55 +++++++++++++++---- .../themes/simple/src/js/main/results.js | 20 ++----- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/searx/static/themes/simple/src/js/main/keyboard.js b/searx/static/themes/simple/src/js/main/keyboard.js index 61fa7ba92..788d289ef 100644 --- a/searx/static/themes/simple/src/js/main/keyboard.js +++ b/searx/static/themes/simple/src/js/main/keyboard.js @@ -3,20 +3,55 @@ searxng.ready(function() { - searxng.on('.result', 'click', function() { - highlightResult(this)(true); + function isElementInDetail(el) { + while (el !== undefined) { + if (el.classList.contains('detail')) { + return true; + } + if (el.classList.contains('result')) { + // we found a result, no need to go to the root of the document: + // el is not inside a
element + return false; + } + el = el.parentNode; + } + return false; + } + + function getResultElement(el) { + while (el !== undefined) { + if (el.classList.contains('result')) { + return el; + } + el = el.parentNode; + } + return undefined; + } + + function isImageResult(resultElement) { + return resultElement && resultElement.classList.contains('result-images'); + } + + searxng.on('.result', 'click', function(e) { + if (!isElementInDetail(e.target)) { + highlightResult(this)(true); + let resultElement = getResultElement(e.target); + if (isImageResult(resultElement)) { + e.preventDefault(); + searxng.selectImage(resultElement); + } + } }); searxng.on('.result a', 'focus', function(e) { - var el = e.target; - while (el !== undefined) { - if (el.classList.contains('result')) { - if (el.getAttribute("data-vim-selected") === null) { - highlightResult(el)(true); - } - break; + if (!isElementInDetail(e.target)) { + let resultElement = getResultElement(e.target); + if (resultElement && resultElement.getAttribute("data-vim-selected") === null) { + highlightResult(resultElement)(true); + } + if (isImageResult(resultElement)) { + searxng.selectImage(resultElement); } - el = el.parentNode; } }, true); diff --git a/searx/static/themes/simple/src/js/main/results.js b/searx/static/themes/simple/src/js/main/results.js index 5ccbb38b5..e4b139fe0 100644 --- a/searx/static/themes/simple/src/js/main/results.js +++ b/searx/static/themes/simple/src/js/main/results.js @@ -31,17 +31,13 @@ } }); - function selectImage(e) { + searxng.selectImage = function(resultElement) { /*eslint no-unused-vars: 0*/ - let t = e.target; - while (t && t.nodeName != 'ARTICLE') { - t = t.parentNode; - } - if (t) { + if (resultElement) { // load full size image in background - const imgElement = t.querySelector('.result-images-source img'); - const thumbnailElement = t.querySelector('.image_thumbnail'); - const detailElement = t.querySelector('.detail'); + const imgElement = resultElement.querySelector('.result-images-source img'); + const thumbnailElement = resultElement.querySelector('.image_thumbnail'); + const detailElement = resultElement.querySelector('.detail'); if (imgElement) { const imgSrc = imgElement.getAttribute('data-src'); if (imgSrc) { @@ -74,12 +70,6 @@ searxng.image_thumbnail_layout.align(); searxng.scrollPageToSelected(); } - - searxng.on('.result-images', 'click', e => { - e.preventDefault(); - selectImage(e); - }); - searxng.on('.result-images a', 'focus', selectImage, true); searxng.on('.result-detail-close', 'click', e => { e.preventDefault(); searxng.closeDetail(); From 558e0c32419d9e3f78e543fea7c51b295f24c245 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Fri, 5 Nov 2021 12:45:15 +0100 Subject: [PATCH 4/4] [build] /static --- .../themes/oscar/css/logicodev.min.css.map | Bin 10142 -> 10142 bytes .../static/themes/simple/css/searxng-rtl.css | 7 +- .../themes/simple/css/searxng-rtl.min.css | Bin 53727 -> 53726 bytes .../themes/simple/css/searxng-rtl.min.css.map | Bin 23611 -> 23601 bytes searx/static/themes/simple/css/searxng.css | 7 +- .../static/themes/simple/css/searxng.min.css | Bin 53688 -> 53687 bytes .../themes/simple/css/searxng.min.css.map | Bin 23555 -> 23545 bytes searx/static/themes/simple/js/searxng.head.js | 1 + .../themes/simple/js/searxng.head.min.js | Bin 900 -> 948 bytes .../themes/simple/js/searxng.head.min.js.map | Bin 817 -> 859 bytes searx/static/themes/simple/js/searxng.js | 105 +++++++++++------- searx/static/themes/simple/js/searxng.min.js | Bin 24794 -> 25028 bytes .../themes/simple/js/searxng.min.js.map | Bin 31076 -> 31440 bytes 13 files changed, 72 insertions(+), 48 deletions(-) diff --git a/searx/static/themes/oscar/css/logicodev.min.css.map b/searx/static/themes/oscar/css/logicodev.min.css.map index 362a6c573296076eaf01ff2944878ead4d075cef..52840b8ad15eb62d21541dd672c80de04cba5e78 100644 GIT binary patch delta 55 zcmbQ|KhJ+c<>Uq?v5j3<87Ec=OuoY?JUNa@V)J~aqY8}9lT(#JWSepxW6I{Q$~DZ4 JsgsM;bpTXH6Wjm* delta 64 zcmV-G0Kfm9Po7VZd6Q!T5s^a^k;Wvk#-0I_hyoXpZy=HZ1e3r41+$+5#UKG%lVu|y W0b!GdBW?jhv-Kl<0|7&mawjYh*A}h- diff --git a/searx/static/themes/simple/css/searxng-rtl.css b/searx/static/themes/simple/css/searxng-rtl.css index 3213ea97e..9be11558d 100644 --- a/searx/static/themes/simple/css/searxng-rtl.css +++ b/searx/static/themes/simple/css/searxng-rtl.css @@ -965,7 +965,7 @@ template { --color-toolkit-badge-background: #777; --color-toolkit-kbd-font: #000; --color-toolkit-kbd-background: #fff; - --color-toolkit-dialog-border: #333; + --color-toolkit-dialog-border: #555; --color-toolkit-dialog-background: #222; --color-toolkit-tabs-label-border: #222; --color-toolkit-tabs-section-border: #555; @@ -1544,10 +1544,9 @@ div.selectable_url pre { position: fixed; top: 50%; left: 50%; - /* bring your own prefixes */ + margin: 0 auto; transform: translate(-50%, -50%); - z-index: 100000; - margin: 0 50% 0 0; + z-index: 10000000; } .dialog-modal::before { position: absolute; diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css b/searx/static/themes/simple/css/searxng-rtl.min.css index e1f6e86e04c55c9be9b04cbe979770f11a5c0af3..f524429857eff7c4062495fa30457b5f827dacf4 100644 GIT binary patch delta 47 zcmcb=nEBpf<_-QjlV9qHOm@)W*qp87BFmebSd^ZbXJw#}SXz=ld7Y;oqrv7ko}b$R DzVQ;g delta 48 zcmcb&nEC!<<_-QjlezRnCOhbGY|hqkk)6EPQ&+$`H?b%^GtbIE!PG!i!9Zd2YtPT^ E0IKH^IsgCw diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css.map b/searx/static/themes/simple/css/searxng-rtl.min.css.map index e18724981bd00c84aa9883b17615031cd5d349a1..f290df5666caec8ceab4df6bc803ee29353629b7 100644 GIT binary patch delta 142 zcmdnJgK^^y#toKglY4YIR9zh%9d*1NogH;T9Ua4U3Y{FCBXj~mg29euuFg8eKmq5; zjLM>ub9A^S_p9Ay%$=O8p2}!G`LenZtBE&I-(*2E;mNWZ-ONRPZj(Q{+A+E0Z+@*| s!@`mmnc+0~qpBQZ{$?*-0cIxi)X5)I(^V9ecIWYEIIsK5EUk(DL@qBAOh diff --git a/searx/static/themes/simple/css/searxng.css b/searx/static/themes/simple/css/searxng.css index 1c9b37423..1e9ab7f1d 100644 --- a/searx/static/themes/simple/css/searxng.css +++ b/searx/static/themes/simple/css/searxng.css @@ -965,7 +965,7 @@ template { --color-toolkit-badge-background: #777; --color-toolkit-kbd-font: #000; --color-toolkit-kbd-background: #fff; - --color-toolkit-dialog-border: #333; + --color-toolkit-dialog-border: #555; --color-toolkit-dialog-background: #222; --color-toolkit-tabs-label-border: #222; --color-toolkit-tabs-section-border: #555; @@ -1544,10 +1544,9 @@ div.selectable_url pre { position: fixed; top: 50%; left: 50%; - /* bring your own prefixes */ + margin: 0 auto; transform: translate(-50%, -50%); - z-index: 100000; - margin: 0 50% 0 0; + z-index: 10000000; } .dialog-modal::before { position: absolute; diff --git a/searx/static/themes/simple/css/searxng.min.css b/searx/static/themes/simple/css/searxng.min.css index 1ca9dafa6c2962a45613513cc9a189687ad700bf..9a8e98477f0343ad99ba325ddab38410114e8925 100644 GIT binary patch delta 47 zcmdn7n0fnR<_-QjlV9qHOm@)W*qp87BFmebSd^ZbXJw#}SXz=ld7Y;oqrv7ko@d$t Du*MQc delta 48 zcmdnKn0d!y<_-QjlezRnCOhbGY|hqkk)6EPQ&+$`H?b%^GtbIE!PG!i!9Zd2YtJ+7 E0Gw_R#Q*>R diff --git a/searx/static/themes/simple/css/searxng.min.css.map b/searx/static/themes/simple/css/searxng.min.css.map index babcff399729ab56d0062e69c38333e03d7dc351..bea87859b40658b8a0fc7e0e9f0153665fa911ec 100644 GIT binary patch delta 121 zcmZqP!T57K;|3YE$@#h*vaXJfjym3s&W<{vj*j6vg-(vn5jue&!C=R-&E9G(jEuRH z1JqL)%_nbDH)1mJo*cj=Hc6wKv1oFSh9hJC=5rc0EG&7E8BUWK!)2LV@;B@13NSO7 Yr%no&V{*yd9B@YuK)l5 delta 109 zcmeylow0cb;|3Wu5qC$OP)A2cokAx^XGfht5YvCMx0V!R)n-RE7DmRx$!_YYjQW$; zs2ed_Ounzah_P()88-(em*UMwG;CNHizYMbDl!&tR@N0@X4X%2oP04@mdPb|bErWJ M6Qlm-TSoGl04r`G6#xJL diff --git a/searx/static/themes/simple/js/searxng.head.js b/searx/static/themes/simple/js/searxng.head.js index 4406b764e..d359a9174 100644 --- a/searx/static/themes/simple/js/searxng.head.js +++ b/searx/static/themes/simple/js/searxng.head.js @@ -21,6 +21,7 @@ autocompleter: script.getAttribute('data-autocompleter') === 'true', search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true', infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true', + hotkeys: script.getAttribute('data-hotkeys') === 'true', static_path: script.getAttribute('data-static-path'), translations: JSON.parse(script.getAttribute('data-translations')), }; diff --git a/searx/static/themes/simple/js/searxng.head.min.js b/searx/static/themes/simple/js/searxng.head.min.js index a914a2be2bd72c0d65e090c618465bebb0cc026c..af2f861e85299759356c5f00d8ec51e814e68146 100644 GIT binary patch delta 32 hcmZo+-@?A3n~6Omza%@gvUsuplNgM>xt@uY5dgNT3Y7o= delta 11 ScmdnO-on12n`!cHrk?;Be+10{ diff --git a/searx/static/themes/simple/js/searxng.head.min.js.map b/searx/static/themes/simple/js/searxng.head.min.js.map index adb1fd0ab52264e9c4b96372381ca378ebe8076c..a7533ce8b63c74fadfd9ca059e4ab787f871e014 100644 GIT binary patch delta 151 zcmdnUcAIU30wa4yeo1y}W$|WN#vVq`Ku5>m6dhMbNB>ZrL`TO&oopvZ$9yLpe@Evm z7jKu6=;QHV3blV0B$`j9RL6T delta 91 zcmcc3wvlav0^?>a#!g19NJq!S6dhMbNB>ZrL?Bxy-^tNA%h?;mNp{xpc69W1*70?8 q^v#<5he?|~RVNgvs9>@_v!rm5lfJ8tvtzN7d$Nwdqhnx%QY`?`9vV{s diff --git a/searx/static/themes/simple/js/searxng.js b/searx/static/themes/simple/js/searxng.js index 02a5b87ab..a65165bae 100644 --- a/searx/static/themes/simple/js/searxng.js +++ b/searx/static/themes/simple/js/searxng.js @@ -155,20 +155,55 @@ window.searxng = (function(w, d) { searxng.ready(function() { - searxng.on('.result', 'click', function() { - highlightResult(this)(true); + function isElementInDetail(el) { + while (el !== undefined) { + if (el.classList.contains('detail')) { + return true; + } + if (el.classList.contains('result')) { + // we found a result, no need to go to the root of the document: + // el is not inside a
element + return false; + } + el = el.parentNode; + } + return false; + } + + function getResultElement(el) { + while (el !== undefined) { + if (el.classList.contains('result')) { + return el; + } + el = el.parentNode; + } + return undefined; + } + + function isImageResult(resultElement) { + return resultElement && resultElement.classList.contains('result-images'); + } + + searxng.on('.result', 'click', function(e) { + if (!isElementInDetail(e.target)) { + highlightResult(this)(true); + let resultElement = getResultElement(e.target); + if (isImageResult(resultElement)) { + e.preventDefault(); + searxng.selectImage(resultElement); + } + } }); searxng.on('.result a', 'focus', function(e) { - var el = e.target; - while (el !== undefined) { - if (el.classList.contains('result')) { - if (el.getAttribute("data-vim-selected") === null) { - highlightResult(el)(true); - } - break; + if (!isElementInDetail(e.target)) { + let resultElement = getResultElement(e.target); + if (resultElement && resultElement.getAttribute("data-vim-selected") === null) { + highlightResult(resultElement)(true); + } + if (isImageResult(resultElement)) { + searxng.selectImage(resultElement); } - el = el.parentNode; } }, true); @@ -271,20 +306,22 @@ searxng.ready(function() { } }; - searxng.on(document, "keydown", function(e) { - // check for modifiers so we don't break browser's hotkeys - if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { - var tagName = e.target.tagName.toLowerCase(); - if (e.keyCode === 27) { - vimKeys[e.keyCode].fun(e); - } else { - if (e.target === document.body || tagName === 'a' || tagName === 'button') { - e.preventDefault(); - vimKeys[e.keyCode].fun(); + if (searxng.hotkeys) { + searxng.on(document, "keydown", function(e) { + // check for modifiers so we don't break browser's hotkeys + if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { + var tagName = e.target.tagName.toLowerCase(); + if (e.keyCode === 27) { + vimKeys[e.keyCode].fun(e); + } else { + if (e.target === document.body || tagName === 'a' || tagName === 'button') { + e.preventDefault(); + vimKeys[e.keyCode].fun(); + } } } - } - }); + }); + } function highlightResult(which) { return function(noScroll) { @@ -505,14 +542,12 @@ searxng.ready(function() { } function toggleHelp() { - var helpPanel = document.querySelector('#vim-hotkeys-help'); - console.log(helpPanel); + var helpPanel = document.querySelector('#vim-hotkeys-help'); if (helpPanel === undefined || helpPanel === null) { // first call helpPanel = document.createElement('div'); helpPanel.id = 'vim-hotkeys-help'; helpPanel.className='dialog-modal'; - helpPanel.style='width: 40%'; initHelpContent(helpPanel); initHelpContent(helpPanel); initHelpContent(helpPanel); @@ -664,17 +699,13 @@ searxng.ready(function() { } }); - function selectImage(e) { + searxng.selectImage = function(resultElement) { /*eslint no-unused-vars: 0*/ - let t = e.target; - while (t && t.nodeName != 'ARTICLE') { - t = t.parentNode; - } - if (t) { + if (resultElement) { // load full size image in background - const imgElement = t.querySelector('.result-images-source img'); - const thumbnailElement = t.querySelector('.image_thumbnail'); - const detailElement = t.querySelector('.detail'); + const imgElement = resultElement.querySelector('.result-images-source img'); + const thumbnailElement = resultElement.querySelector('.image_thumbnail'); + const detailElement = resultElement.querySelector('.detail'); if (imgElement) { const imgSrc = imgElement.getAttribute('data-src'); if (imgSrc) { @@ -707,12 +738,6 @@ searxng.ready(function() { searxng.image_thumbnail_layout.align(); searxng.scrollPageToSelected(); } - - searxng.on('.result-images', 'click', e => { - e.preventDefault(); - selectImage(e); - }); - searxng.on('.result-images a', 'focus', selectImage, true); searxng.on('.result-detail-close', 'click', e => { e.preventDefault(); searxng.closeDetail(); diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index a6d8e9b0af6527323234c02345ec6feb736a3ebb..a739d75e0ab6fb0d78d8bd278167120ba240ee4b 100644 GIT binary patch delta 1327 zcmaJ>-)kII6y|1$?$59_TXtzyJ6W=ud%MX%K|!5Pj9SFjD5A9w6-$Siv%5nkGt0eq znv``Y`2&19l=|e0&!Vv6i=d=x--NvMp?y-phYEf0Kk&?Kvq>QJ<;>yU?|kPwKkhu* zW552wzI&3#&({m@0|znM9{2${i?$ty9`yVWJTdZn985QGl-lr>Hr*)Hjvp%C@_?M6 zCB#UAj%8?Q8AFo7ai?(h!>5NmCs2@p4d&315b6&i50Ybdy*PBWAB9HvzZz1~{?ou` z5l&?%Q&K-AJqYV`PA)})iUYmsZ#jKXEs@}peCM{#YF`AdP3_1&=(JL<2fh+KEmc?n zXanr<5MWXDX+km5=1{^-s`n!F9OCA}QsBs)ux}~|z}1)1Tm(&$l=d&Lfm z@p17ZvKLBMXJU?PB@^dM4SZCp=3Ij9cWcPXS7uzExtrx{Oyd3WWwNI#@3H`|RW2}v zcPp>50q$4U$)1|K#58_7_ZHj2ujY7-Iq4kswb)#@-uVY~BP zlKRd34>^Zx+^e6*yS10ficjb3;9kux2S*OZ#nX=&)dU2uVX=Oiv>Elrtjl2~rAW^z zc)gx~fhH?BO=G$^L)@vq!v^D@>$8mY$GWNh*Z+HW|F#zV{k{#X*Wp?ydp!;X z*j&Z2@Okc<6Tze0r7WjS*vm6`JzsS=+{tgC{WA@QZ}IqZ<@l!Whl-r zz=OGOoz`G`zMDbl4;RlCkaiPC!i(Z9Y5Qv zDSt^2Q5bg>VZISu-%(qh5s_%w8(QqjI5B}5Y`*ZubJeJkupUW_aE;ZnWr?47xVdnT zj%L8&6F8_WBCSs<>uC3DC3vkmhTdD%?{JZ`%LnK`THZu|m45opsL-{DsTT?B+CX@g z>n&kNN~>0_r%(~s`Hol$$mNaAwX5r|5Y{^`n0~53)=N3Ct_tAv$r2RVLRJPAnv7*N ze&1&0yc*@ifr78;+@z0%@#v5T5!`2scX4RZb=P+ImhkxzW%DqkB#L<`H1efA-suPx zUd1;NQjP?Au}Y(X2rl%LXLKuwv0jUvcvs-IhY3RKSPwIfM-H=xRbzoni+u&1soCez zBPfY}1gdsn$f}F>*IH>IL1?iNFAIEbQ7~e2$R*}hV7Z>|V!w8nKR1;iK1vWz`YM|; z9nZjL^`(`R|31To{y*+=(je`)l^D{njp5(GPvCBS_0+NMI33o*FLgGbJR>05=8+LB b4Hp{~1a!7>83oX7yo*-V<_Aw3zn%F9&X0$w diff --git a/searx/static/themes/simple/js/searxng.min.js.map b/searx/static/themes/simple/js/searxng.min.js.map index 41238c58d6f4ba623fa6f5cdcff13c4084ea47f9..3f941fbce5cb4546379dab3bbe8dd39976a8f9d3 100644 GIT binary patch literal 31440 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