From 8e985aea88bfdae601518db2abe2fdded127b463 Mon Sep 17 00:00:00 2001 From: Fmstrat Date: Wed, 14 Aug 2024 10:47:34 -0400 Subject: [PATCH 01/23] update to gecko driver v35 --- manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manage b/manage index f83620cf5..155a1f2dd 100755 --- a/manage +++ b/manage @@ -41,7 +41,7 @@ PATH="${REPO_ROOT}/node_modules/.bin:${PATH}" PYOBJECTS="searx" PY_SETUP_EXTRAS='[test]' -GECKODRIVER_VERSION="v0.34.0" +GECKODRIVER_VERSION="v0.35.0" # SPHINXOPTS= BLACK_OPTIONS=("--target-version" "py311" "--line-length" "120" "--skip-string-normalization") BLACK_TARGETS=("--exclude" "(searx/static|searx/languages.py)" "--include" 'searxng.msg|\.pyi?$' "searx" "searxng_extra" "tests") From 45f03f1902367767ebbf98221f9ca229ada5c666 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sun, 11 Aug 2024 11:23:07 +0200 Subject: [PATCH 02/23] [fix] search box: clear button don't appear on mouse-copy You have to copy and paste the query without using the keyboard to replicate the issue. As soon as you press the keyboard the cross appears. [1] - [1] https://github.com/searxng/searxng/issues/3725#issuecomment-2282655272 Reported-by: @Immortality-IMT in [1] Signed-off-by: Markus Heiser --- searx/static/themes/simple/src/js/main/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/searx/static/themes/simple/src/js/main/search.js b/searx/static/themes/simple/src/js/main/search.js index ac1ece535..46756507e 100644 --- a/searx/static/themes/simple/src/js/main/search.js +++ b/searx/static/themes/simple/src/js/main/search.js @@ -32,7 +32,7 @@ updateClearButton(); ev.preventDefault(); }); - qinput.addEventListener('keyup', updateClearButton, false); + qinput.addEventListener('input', updateClearButton, false); } searxng.ready(function () { From 8d14d46c00a2ce897eba80de1327dd31ab5cc41a Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sun, 11 Aug 2024 13:38:58 +0200 Subject: [PATCH 03/23] [build] /static --- searx/static/themes/simple/js/searxng.min.js | 2 +- searx/static/themes/simple/js/searxng.min.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index cbede991f..00d0dde88 100644 --- a/searx/static/themes/simple/js/searxng.min.js +++ b/searx/static/themes/simple/js/searxng.min.js @@ -4,7 +4,7 @@ * (C) Copyright Contributors to the searx project (2014 - 2021). * SPDX-License-Identifier: AGPL-3.0-or-later */ -window.searxng=function(t,i){"use strict";if(t.Element){(function(e){e.matches=e.matches||e.matchesSelector||e.webkitMatchesSelector||e.msMatchesSelector||function(e){var t=this,n=(t.parentNode||t.document).querySelectorAll(e),r=-1;while(n[++r]&&n[r]!=t);return!!n[r]}})(Element.prototype)}function s(e,t,n){try{e.call(t,n)}catch(e){console.log(e)}}var a=window.searxng||{};a.on=function(r,e,o,t){t=t||false;if(typeof r!=="string"){r.addEventListener(e,o,t)}else{i.addEventListener(e,function(e){var t=e.target||e.srcElement,n=false;while(t&&t.matches&&t!==i&&!(n=t.matches(r)))t=t.parentElement;if(n)s(o,t,e)},t)}};a.ready=function(e){if(document.readyState!="loading"){e.call(t)}else{t.addEventListener("DOMContentLoaded",e.bind(t))}};a.http=function(r,o,i=null){return new Promise(function(e,t){try{var n=new XMLHttpRequest;n.open(r,o,true);n.timeout=2e4;n.onload=function(){if(n.status==200){e(n.response,n.responseType)}else{t(Error(n.statusText))}};n.onerror=function(){t(Error("Network Error"))};n.onabort=function(){t(Error("Transaction is aborted"))};n.ontimeout=function(){t(Error("Timeout"))};if(i){n.send(i)}else{n.send()}}catch(e){t(e)}})};a.loadStyle=function(e){var t=a.settings.theme_static_path+"/"+e,n="style_"+e.replace(".","_"),r=i.getElementById(n);if(r===null){r=i.createElement("link");r.setAttribute("id",n);r.setAttribute("rel","stylesheet");r.setAttribute("type","text/css");r.setAttribute("href",t);i.body.appendChild(r)}};a.loadScript=function(e,t){var n=a.settings.theme_static_path+"/"+e,r="script_"+e.replace(".","_"),o=i.getElementById(r);if(o===null){o=i.createElement("script");o.setAttribute("id",r);o.setAttribute("src",n);o.onload=t;o.onerror=function(){o.setAttribute("error","1")};i.body.appendChild(o)}else if(!o.hasAttribute("error")){try{t.apply(o,[])}catch(e){console.log(e)}}else{console.log("callback not executed : script '"+n+"' not loaded.")}};a.insertBefore=function(e,t){t.parentNode.insertBefore(e,t)};a.insertAfter=function(e,t){t.parentNode.insertAfter(e,t.nextSibling)};a.on(".close","click",function(){this.parentNode.classList.add("invisible")});function e(){for(var e of i.getElementsByTagName("body")[0].classList.values()){if(e.endsWith("_endpoint")){return e.split("_")[0]}}return""}a.endpoint=e();return a}(window,document);searxng.ready(function(){"use strict";searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype;if(searxng.endpoint!=="results"){return}if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let i=document;var s=i.getElementById("results").classList.contains("only_template_images");function n(){var e=i.createElement("div");e.classList.add("loader");return e}function r(t,e){t.textContent="";e.forEach(e=>t.appendChild(e))}function o(o){var e=i.querySelector("#pagination form.next_page");if(!e){return}r(i.querySelector("#pagination"),[n()]);var t=new FormData(e);searxng.http("POST",i.querySelector("#search").getAttribute("action"),t).then(function(e){var t=(new DOMParser).parseFromString(e,"text/html");var n=t.querySelectorAll("#urls article");var r=t.querySelector("#pagination");i.querySelector("#pagination").remove();if(n.length>0&&!s){i.querySelector("#urls").appendChild(i.createElement("hr"))}n.forEach(e=>{i.querySelector("#urls").appendChild(e)});if(r){i.querySelector("#results").appendChild(r);o()}}).catch(function(e){console.log(e);var t=i.createElement("div");t.textContent=searxng.settings.translations.error_loading_next_page;t.classList.add("dialog-error");t.setAttribute("role","alert");r(i.querySelector("#pagination"),[t])})}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const a={rootMargin:"20rem"};const l="article.result:last-child";const u=new IntersectionObserver(e=>{const t=e[0];if(t.isIntersecting){u.unobserve(t.target);o(()=>u.observe(i.querySelector(l),a))}});u.observe(i.querySelector(l),a)}});searxng.ready(function(){function e(e){while(e!==undefined){if(e.classList.contains("detail")){return true}if(e.classList.contains("result")){return false}e=e.parentNode}return false}function n(e){while(e!==undefined){if(e.classList.contains("result")){return e}e=e.parentNode}return undefined}function r(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(t){if(!e(t.target)){i(this)(true,true);let e=n(t.target);if(r(e)){t.preventDefault();searxng.selectImage(e)}}});searxng.on(".result a","focus",function(t){if(!e(t.target)){let e=n(t.target);if(e&&e.getAttribute("data-vim-selected")===null){i(e)(true)}if(r(e)){searxng.selectImage(e)}}},true);var t={Escape:{key:"ESC",fun:a,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:b,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:v,des:"toggle help window",cat:"Other"},i:{key:"i",fun:m,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:u(),des:"go to next page",cat:"Results"},o:{key:"o",fun:g(false),des:"open search result",cat:"Results"},p:{key:"p",fun:c(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:s,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:g(true),des:"open the result in a new tab",cat:"Results"}};var o={default:Object.assign({ArrowLeft:{key:"←",fun:i("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:i("down"),des:"select next search result",cat:"Results"}},t),vim:Object.assign({b:{key:"b",fun:f(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:f(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:f(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:f(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:h(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:h(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:i("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:i("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:b,des:"copy url of the selected result to the clipboard",cat:"Results"}},t)};var d=o[searxng.settings.hotkeys]||o.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(d,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var t=e.target.tagName.toLowerCase();if(e.key==="Escape"){d[e.key].fun(e)}else{if(e.target===document.body||t==="a"||t==="button"){e.preventDefault();d[e.key].fun()}}}});function i(f){return function(e,t){var n=document.querySelector(".result[data-vim-selected]"),r=f;if(n===null){n=document.querySelector(".result");if(n===null){return}if(f==="down"||f==="up"){r=n}}var o,i=document.querySelectorAll(".result");i=Array.from(i);if(typeof r!=="string"){o=r}else{switch(r){case"visible":var s=document.documentElement.scrollTop||document.body.scrollTop;var a=s+document.documentElement.clientHeight;for(var l=0;ls){break}}break;case"down":o=i[i.indexOf(n)+1]||n;break;case"up":o=i[i.indexOf(n)-1]||n;break;case"bottom":o=i[i.length-1];break;case"top":default:o=i[0]}}if(o){n.removeAttribute("data-vim-selected");o.setAttribute("data-vim-selected","true");if(!t){var d=o.querySelector("h3 a")||o.querySelector("a");if(d!==null){d.focus()}}if(!e){p()}}}}function s(){document.location.reload(true)}function a(e){const t=e.target.tagName.toLowerCase();if(document.activeElement&&(t==="input"||t==="select"||t==="textarea")){document.activeElement.blur()}else{searxng.closeDetail()}}function l(t){return function(){var e=document.querySelector(t);if(e){e.click()}}}function u(){return l('nav#pagination .next_page button[type="submit"]')}function c(){return l('nav#pagination .previous_page button[type="submit"]')}function p(){var e=document.querySelector(".result[data-vim-selected]");if(e===null){return}var t=document.documentElement.scrollTop||document.body.scrollTop,n=document.documentElement.clientHeight,r=e.offsetTop,o=r+e.clientHeight,i=120;if(e.previousElementSibling===null&&or-i){window.scroll(window.scrollX,r-i)}else{var s=t+n;if(s a")}if(e!==null){var t=e.getAttribute("href");if(n){window.open(t)}else{window.location.href=t}}}}function y(e){var n={};for(var t in d){var r=d[t];n[r.cat]=n[r.cat]||[];n[r.cat].push(r)}var o=Object.keys(n).sort(function(e,t){return n[t].length-n[e].length});if(o.length===0){return}var i='×';i+="

How to navigate SearXNG with hotkeys

";i+="";for(var s=0;s"}i+="";if(!u||l){i+=""}}i+="
";i+="

"+a[0].cat+"

";i+='
    ';for(var c in a){i+="
  • "+a[c].key+" "+a[c].des+"
  • "}i+="
";i+="
";e.innerHTML=i}function v(){var e=document.querySelector("#vim-hotkeys-help");if(e===undefined||e===null){e=document.createElement("div");e.id="vim-hotkeys-help";e.className="dialog-modal";y(e);var t=document.getElementsByTagName("body")[0];t.appendChild(e)}else{e.classList.toggle("invisible");return}}function b(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const t=e.getAttribute("href");navigator.clipboard.writeText(t)}searxng.scrollPageToSelected=p;searxng.selectNext=i("down");searxng.selectPrevious=i("up")});(function(e,t,n){"use strict";n.ready(function(){n.on(".searxng_init_map","click",function(e){this.classList.remove("searxng_init_map");var d=this.dataset.leafletTarget;var f=parseFloat(this.dataset.mapLon);var p=parseFloat(this.dataset.mapLat);var h=parseFloat(this.dataset.mapZoom);var m=JSON.parse(this.dataset.mapBoundingbox);var g=JSON.parse(this.dataset.mapGeojson);n.loadStyle("css/leaflet.css");n.loadScript("js/leaflet.js",function(){var e=null;if(m){var t=L.latLng(m[0],m[2]);var n=L.latLng(m[1],m[3]);e=L.latLngBounds(t,n)}var r=L.map(d);var o="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";var i='Map data © OpenStreetMap contributors';var s=new L.TileLayer(o,{minZoom:1,maxZoom:19,attribution:i});var a="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png";var l='Wikimedia maps | Maps data © OpenStreetMap contributors';var u=new L.TileLayer(a,{minZoom:1,maxZoom:19,attribution:l});if(e){setTimeout(function(){r.fitBounds(e,{maxZoom:17})},0)}else if(f&&p){if(h){r.setView(new L.latLng(p,f),h)}else{r.setView(new L.latLng(p,f),8)}}r.addLayer(s);var c={"OSM Mapnik":s,"OSM Wikimedia":u};L.control.layers(c).addTo(r);if(g){L.geoJson(g).addTo(r)}});e.preventDefault()})})})(window,document,window.searxng);(function(e,l,u){"use strict";if(u.endpoint!=="preferences"){return}u.ready(function(){let o=null;function e(){if(o==null){u.http("GET","engine_descriptions.json").then(function(e){o=JSON.parse(e);for(const[t,n]of Object.entries(o)){let e=l.querySelectorAll('[data-engine-name="'+t+'"] .engine-description');for(const r of e){let e=" ("+u.settings.translations.Source+": "+n[1]+")";r.innerHTML=n[0]+e}}})}}for(const a of l.querySelectorAll("[data-engine-name]")){u.on(a,"mouseenter",e)}const t=l.querySelectorAll(".enable-all-engines");const n=l.querySelectorAll(".disable-all-engines");const r=l.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]");const i=t=>{for(const e of r){if(e.offsetParent!==null)e.checked=!t}};for(const a of t){u.on(a,"click",()=>i(true))}for(const a of n){u.on(a,"click",()=>i(false))}const s=l.querySelector("#copy-hash");u.on(s,"click",e=>{e.preventDefault();navigator.clipboard.writeText(s.dataset.hash);s.innerText=s.dataset.copiedText})})})(window,document,window.searxng);(function(e,a,l){"use strict";if(l.endpoint!=="results"){return}l.ready(function(){a.querySelectorAll("#urls img.image").forEach(e=>e.addEventListener("error",()=>{e.style.display="none";e.error=null}));if(a.querySelector("#search_url button#copy_url")){a.querySelector("#search_url button#copy_url").style.display="block"}l.on(".btn-collapse","click",function(){var e=this.getAttribute("data-btn-text-collapsed");var t=this.getAttribute("data-btn-text-not-collapsed");var n=this.getAttribute("data-target");var r=a.querySelector(n);var o=this.innerHTML;if(this.classList.contains("collapsed")){o=o.replace(e,t)}else{o=o.replace(t,e)}this.innerHTML=o;this.classList.toggle("collapsed");r.classList.toggle("invisible")});l.on(".media-loader","click",function(){var e=this.getAttribute("data-target");var t=a.querySelector(e+" > iframe");var n=t.getAttribute("src");if(n===null||n===undefined||n===false){t.setAttribute("src",t.getAttribute("data-src"))}});l.on("#copy_url","click",function(){var e=this.parentElement.querySelector("pre");navigator.clipboard.writeText(e.innerText);this.innerText=this.dataset.copiedText});l.selectImage=function(e){if(e){const t=e.querySelector(".result-images-source img");const n=e.querySelector(".image_thumbnail");const r=e.querySelector(".detail");if(t){const o=t.getAttribute("data-src");if(o){const i=a.createElement("div");const s=new Image;i.classList.add("loader");r.appendChild(i);s.onload=e=>{t.src=o;i.remove()};s.onerror=e=>{i.remove()};s.src=o;t.src=n.src;t.removeAttribute("data-src")}}}a.getElementById("results").classList.add("image-detail-open");l.scrollPageToSelected()};l.closeDetail=function(e){a.getElementById("results").classList.remove("image-detail-open");l.scrollPageToSelected()};l.on(".result-detail-close","click",e=>{e.preventDefault();l.closeDetail()});l.on(".result-detail-previous","click",e=>{e.preventDefault();l.selectPrevious(false)});l.on(".result-detail-next","click",e=>{e.preventDefault();l.selectNext(false)});e.addEventListener("scroll",function(){var e=a.getElementById("backToTop"),t=document.documentElement.scrollTop||document.body.scrollTop,n=a.getElementById("results");if(e!==null){if(t>=100){n.classList.add("scrolling")}else{n.classList.remove("scrolling")}}},true)})})(window,document,window.searxng);(function(e,t,n){"use strict";var r="q",o;const i=window.matchMedia("only screen and (max-width: 50em)").matches;function s(){if(o.value.length>0){var e=document.getElementById("search");setTimeout(e.submit.bind(e),0)}}function a(t){var e=document.getElementById("clear_search");var n=function(){if(t.value.length===0){e.classList.add("empty")}else{e.classList.remove("empty")}};n();e.addEventListener("click",function(e){t.value="";t.focus();n();e.preventDefault()});t.addEventListener("keyup",n,false)}n.ready(function(){o=t.getElementById(r);if(o!==null){a(o);if(n.settings.autocomplete_provider){n.autocomplete=AutoComplete.call(e,{Url:"./autocompleter",EmptyMessage:n.settings.translations.no_item_found,HttpMethod:n.settings.http_method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:n.settings.autocomplete_min,Delay:300,_Position:function(){},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){if(e.getAttribute("class")!="locked"){e.onmousedown=function(){t._Select(e)}}})},_Select:function(e){AutoComplete.defaults._Select.call(this,e);var t=e.closest("form");if(t){t.submit()}},_MinChars:function(){if(this.Input.value.indexOf("!")>-1){return 0}else{return AutoComplete.defaults._MinChars.call(this)}},KeyboardMappings:Object.assign({},AutoComplete.defaults.KeyboardMappings,{KeyUpAndDown_up:Object.assign({},AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up,{Callback:function(e){AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this,e);var t=this.DOMResults.querySelector("li.active");if(t){AutoComplete.defaults._Select.call(this,t)}}}),Tab:Object.assign({},AutoComplete.defaults.KeyboardMappings.Enter,{Conditions:[{Is:9,Not:false}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");if(t!==null){AutoComplete.defaults._Select.call(this,t);e.preventDefault()}}}})})},"#"+r)}AutoComplete.prototype.ajax=function(e,t,n){if(n===void 0){n=true}if(e.$AjaxTimer){window.clearTimeout(e.$AjaxTimer)}if(n===true){e.$AjaxTimer=window.setTimeout(AutoComplete.prototype.ajax.bind(null,e,t,false),e.Delay)}else{if(e.Request){e.Request.abort()}e.Request=t;e.Request.send(encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(e._Pre()))}};if(!i&&document.querySelector(".index_endpoint")){o.focus()}}if(o!==null&&n.settings.search_on_category_select&&t.querySelector(".search_filters")!=null){n.on(t.getElementById("safesearch"),"change",s);n.on(t.getElementById("time_range"),"change",s);n.on(t.getElementById("language"),"change",s)}try{t.querySelector("html:has(body)")}catch(e){for(let e of t.querySelectorAll("button.category_button")){n.on(e,"click",()=>{const e=t.querySelector("button.category_button.selected");console.log(e);e.classList.remove("selected")})}}})})(window,document,window.searxng);(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.AutoComplete=e()}})(function(){var e,t,n;return function(){function c(i,s,a){function l(n,e){if(!s[n]){if(!i[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(u)return u(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[n]={exports:{}};i[n][0].call(o.exports,function(e){var t=i[n][1][e];return l(t||e)},o,o.exports,c,i,s,a)}return s[n].exports}for(var u="function"==typeof require&&require,e=0;et.appendChild(e))}function o(o){var e=i.querySelector("#pagination form.next_page");if(!e){return}r(i.querySelector("#pagination"),[n()]);var t=new FormData(e);searxng.http("POST",i.querySelector("#search").getAttribute("action"),t).then(function(e){var t=(new DOMParser).parseFromString(e,"text/html");var n=t.querySelectorAll("#urls article");var r=t.querySelector("#pagination");i.querySelector("#pagination").remove();if(n.length>0&&!s){i.querySelector("#urls").appendChild(i.createElement("hr"))}n.forEach(e=>{i.querySelector("#urls").appendChild(e)});if(r){i.querySelector("#results").appendChild(r);o()}}).catch(function(e){console.log(e);var t=i.createElement("div");t.textContent=searxng.settings.translations.error_loading_next_page;t.classList.add("dialog-error");t.setAttribute("role","alert");r(i.querySelector("#pagination"),[t])})}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const a={rootMargin:"20rem"};const l="article.result:last-child";const u=new IntersectionObserver(e=>{const t=e[0];if(t.isIntersecting){u.unobserve(t.target);o(()=>u.observe(i.querySelector(l),a))}});u.observe(i.querySelector(l),a)}});searxng.ready(function(){function e(e){while(e!==undefined){if(e.classList.contains("detail")){return true}if(e.classList.contains("result")){return false}e=e.parentNode}return false}function n(e){while(e!==undefined){if(e.classList.contains("result")){return e}e=e.parentNode}return undefined}function r(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(t){if(!e(t.target)){i(this)(true,true);let e=n(t.target);if(r(e)){t.preventDefault();searxng.selectImage(e)}}});searxng.on(".result a","focus",function(t){if(!e(t.target)){let e=n(t.target);if(e&&e.getAttribute("data-vim-selected")===null){i(e)(true)}if(r(e)){searxng.selectImage(e)}}},true);var t={Escape:{key:"ESC",fun:a,des:"remove focus from the focused input",cat:"Control"},c:{key:"c",fun:b,des:"copy url of the selected result to the clipboard",cat:"Results"},h:{key:"h",fun:v,des:"toggle help window",cat:"Other"},i:{key:"i",fun:m,des:"focus on the search input",cat:"Control"},n:{key:"n",fun:u(),des:"go to next page",cat:"Results"},o:{key:"o",fun:g(false),des:"open search result",cat:"Results"},p:{key:"p",fun:c(),des:"go to previous page",cat:"Results"},r:{key:"r",fun:s,des:"reload page from the server",cat:"Control"},t:{key:"t",fun:g(true),des:"open the result in a new tab",cat:"Results"}};var o={default:Object.assign({ArrowLeft:{key:"←",fun:i("up"),des:"select previous search result",cat:"Results"},ArrowRight:{key:"→",fun:i("down"),des:"select next search result",cat:"Results"}},t),vim:Object.assign({b:{key:"b",fun:f(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},f:{key:"f",fun:f(window.innerHeight),des:"scroll one page down",cat:"Navigation"},u:{key:"u",fun:f(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},d:{key:"d",fun:f(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},g:{key:"g",fun:h(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},v:{key:"v",fun:h(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},k:{key:"k",fun:i("up"),des:"select previous search result",cat:"Results"},j:{key:"j",fun:i("down"),des:"select next search result",cat:"Results"},y:{key:"y",fun:b,des:"copy url of the selected result to the clipboard",cat:"Results"}},t)};var d=o[searxng.settings.hotkeys]||o.default;searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(d,e.key)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var t=e.target.tagName.toLowerCase();if(e.key==="Escape"){d[e.key].fun(e)}else{if(e.target===document.body||t==="a"||t==="button"){e.preventDefault();d[e.key].fun()}}}});function i(f){return function(e,t){var n=document.querySelector(".result[data-vim-selected]"),r=f;if(n===null){n=document.querySelector(".result");if(n===null){return}if(f==="down"||f==="up"){r=n}}var o,i=document.querySelectorAll(".result");i=Array.from(i);if(typeof r!=="string"){o=r}else{switch(r){case"visible":var s=document.documentElement.scrollTop||document.body.scrollTop;var a=s+document.documentElement.clientHeight;for(var l=0;ls){break}}break;case"down":o=i[i.indexOf(n)+1]||n;break;case"up":o=i[i.indexOf(n)-1]||n;break;case"bottom":o=i[i.length-1];break;case"top":default:o=i[0]}}if(o){n.removeAttribute("data-vim-selected");o.setAttribute("data-vim-selected","true");if(!t){var d=o.querySelector("h3 a")||o.querySelector("a");if(d!==null){d.focus()}}if(!e){p()}}}}function s(){document.location.reload(true)}function a(e){const t=e.target.tagName.toLowerCase();if(document.activeElement&&(t==="input"||t==="select"||t==="textarea")){document.activeElement.blur()}else{searxng.closeDetail()}}function l(t){return function(){var e=document.querySelector(t);if(e){e.click()}}}function u(){return l('nav#pagination .next_page button[type="submit"]')}function c(){return l('nav#pagination .previous_page button[type="submit"]')}function p(){var e=document.querySelector(".result[data-vim-selected]");if(e===null){return}var t=document.documentElement.scrollTop||document.body.scrollTop,n=document.documentElement.clientHeight,r=e.offsetTop,o=r+e.clientHeight,i=120;if(e.previousElementSibling===null&&or-i){window.scroll(window.scrollX,r-i)}else{var s=t+n;if(s a")}if(e!==null){var t=e.getAttribute("href");if(n){window.open(t)}else{window.location.href=t}}}}function y(e){var n={};for(var t in d){var r=d[t];n[r.cat]=n[r.cat]||[];n[r.cat].push(r)}var o=Object.keys(n).sort(function(e,t){return n[t].length-n[e].length});if(o.length===0){return}var i='×';i+="

How to navigate SearXNG with hotkeys

";i+="";for(var s=0;s"}i+="";if(!u||l){i+=""}}i+="
";i+="

"+a[0].cat+"

";i+='
    ';for(var c in a){i+="
  • "+a[c].key+" "+a[c].des+"
  • "}i+="
";i+="
";e.innerHTML=i}function v(){var e=document.querySelector("#vim-hotkeys-help");if(e===undefined||e===null){e=document.createElement("div");e.id="vim-hotkeys-help";e.className="dialog-modal";y(e);var t=document.getElementsByTagName("body")[0];t.appendChild(e)}else{e.classList.toggle("invisible");return}}function b(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null)return;const t=e.getAttribute("href");navigator.clipboard.writeText(t)}searxng.scrollPageToSelected=p;searxng.selectNext=i("down");searxng.selectPrevious=i("up")});(function(e,t,n){"use strict";n.ready(function(){n.on(".searxng_init_map","click",function(e){this.classList.remove("searxng_init_map");var d=this.dataset.leafletTarget;var f=parseFloat(this.dataset.mapLon);var p=parseFloat(this.dataset.mapLat);var h=parseFloat(this.dataset.mapZoom);var m=JSON.parse(this.dataset.mapBoundingbox);var g=JSON.parse(this.dataset.mapGeojson);n.loadStyle("css/leaflet.css");n.loadScript("js/leaflet.js",function(){var e=null;if(m){var t=L.latLng(m[0],m[2]);var n=L.latLng(m[1],m[3]);e=L.latLngBounds(t,n)}var r=L.map(d);var o="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";var i='Map data © OpenStreetMap contributors';var s=new L.TileLayer(o,{minZoom:1,maxZoom:19,attribution:i});var a="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png";var l='Wikimedia maps | Maps data © OpenStreetMap contributors';var u=new L.TileLayer(a,{minZoom:1,maxZoom:19,attribution:l});if(e){setTimeout(function(){r.fitBounds(e,{maxZoom:17})},0)}else if(f&&p){if(h){r.setView(new L.latLng(p,f),h)}else{r.setView(new L.latLng(p,f),8)}}r.addLayer(s);var c={"OSM Mapnik":s,"OSM Wikimedia":u};L.control.layers(c).addTo(r);if(g){L.geoJson(g).addTo(r)}});e.preventDefault()})})})(window,document,window.searxng);(function(e,l,u){"use strict";if(u.endpoint!=="preferences"){return}u.ready(function(){let o=null;function e(){if(o==null){u.http("GET","engine_descriptions.json").then(function(e){o=JSON.parse(e);for(const[t,n]of Object.entries(o)){let e=l.querySelectorAll('[data-engine-name="'+t+'"] .engine-description');for(const r of e){let e=" ("+u.settings.translations.Source+": "+n[1]+")";r.innerHTML=n[0]+e}}})}}for(const a of l.querySelectorAll("[data-engine-name]")){u.on(a,"mouseenter",e)}const t=l.querySelectorAll(".enable-all-engines");const n=l.querySelectorAll(".disable-all-engines");const r=l.querySelectorAll("tbody input[type=checkbox][class~=checkbox-onoff]");const i=t=>{for(const e of r){if(e.offsetParent!==null)e.checked=!t}};for(const a of t){u.on(a,"click",()=>i(true))}for(const a of n){u.on(a,"click",()=>i(false))}const s=l.querySelector("#copy-hash");u.on(s,"click",e=>{e.preventDefault();navigator.clipboard.writeText(s.dataset.hash);s.innerText=s.dataset.copiedText})})})(window,document,window.searxng);(function(e,a,l){"use strict";if(l.endpoint!=="results"){return}l.ready(function(){a.querySelectorAll("#urls img.image").forEach(e=>e.addEventListener("error",()=>{e.style.display="none";e.error=null}));if(a.querySelector("#search_url button#copy_url")){a.querySelector("#search_url button#copy_url").style.display="block"}l.on(".btn-collapse","click",function(){var e=this.getAttribute("data-btn-text-collapsed");var t=this.getAttribute("data-btn-text-not-collapsed");var n=this.getAttribute("data-target");var r=a.querySelector(n);var o=this.innerHTML;if(this.classList.contains("collapsed")){o=o.replace(e,t)}else{o=o.replace(t,e)}this.innerHTML=o;this.classList.toggle("collapsed");r.classList.toggle("invisible")});l.on(".media-loader","click",function(){var e=this.getAttribute("data-target");var t=a.querySelector(e+" > iframe");var n=t.getAttribute("src");if(n===null||n===undefined||n===false){t.setAttribute("src",t.getAttribute("data-src"))}});l.on("#copy_url","click",function(){var e=this.parentElement.querySelector("pre");navigator.clipboard.writeText(e.innerText);this.innerText=this.dataset.copiedText});l.selectImage=function(e){if(e){const t=e.querySelector(".result-images-source img");const n=e.querySelector(".image_thumbnail");const r=e.querySelector(".detail");if(t){const o=t.getAttribute("data-src");if(o){const i=a.createElement("div");const s=new Image;i.classList.add("loader");r.appendChild(i);s.onload=e=>{t.src=o;i.remove()};s.onerror=e=>{i.remove()};s.src=o;t.src=n.src;t.removeAttribute("data-src")}}}a.getElementById("results").classList.add("image-detail-open");l.scrollPageToSelected()};l.closeDetail=function(e){a.getElementById("results").classList.remove("image-detail-open");l.scrollPageToSelected()};l.on(".result-detail-close","click",e=>{e.preventDefault();l.closeDetail()});l.on(".result-detail-previous","click",e=>{e.preventDefault();l.selectPrevious(false)});l.on(".result-detail-next","click",e=>{e.preventDefault();l.selectNext(false)});e.addEventListener("scroll",function(){var e=a.getElementById("backToTop"),t=document.documentElement.scrollTop||document.body.scrollTop,n=a.getElementById("results");if(e!==null){if(t>=100){n.classList.add("scrolling")}else{n.classList.remove("scrolling")}}},true)})})(window,document,window.searxng);(function(e,t,n){"use strict";var r="q",o;const i=window.matchMedia("only screen and (max-width: 50em)").matches;function s(){if(o.value.length>0){var e=document.getElementById("search");setTimeout(e.submit.bind(e),0)}}function a(t){var e=document.getElementById("clear_search");var n=function(){if(t.value.length===0){e.classList.add("empty")}else{e.classList.remove("empty")}};n();e.addEventListener("click",function(e){t.value="";t.focus();n();e.preventDefault()});t.addEventListener("input",n,false)}n.ready(function(){o=t.getElementById(r);if(o!==null){a(o);if(n.settings.autocomplete_provider){n.autocomplete=AutoComplete.call(e,{Url:"./autocompleter",EmptyMessage:n.settings.translations.no_item_found,HttpMethod:n.settings.http_method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:n.settings.autocomplete_min,Delay:300,_Position:function(){},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){if(e.getAttribute("class")!="locked"){e.onmousedown=function(){t._Select(e)}}})},_Select:function(e){AutoComplete.defaults._Select.call(this,e);var t=e.closest("form");if(t){t.submit()}},_MinChars:function(){if(this.Input.value.indexOf("!")>-1){return 0}else{return AutoComplete.defaults._MinChars.call(this)}},KeyboardMappings:Object.assign({},AutoComplete.defaults.KeyboardMappings,{KeyUpAndDown_up:Object.assign({},AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up,{Callback:function(e){AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this,e);var t=this.DOMResults.querySelector("li.active");if(t){AutoComplete.defaults._Select.call(this,t)}}}),Tab:Object.assign({},AutoComplete.defaults.KeyboardMappings.Enter,{Conditions:[{Is:9,Not:false}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");if(t!==null){AutoComplete.defaults._Select.call(this,t);e.preventDefault()}}}})})},"#"+r)}AutoComplete.prototype.ajax=function(e,t,n){if(n===void 0){n=true}if(e.$AjaxTimer){window.clearTimeout(e.$AjaxTimer)}if(n===true){e.$AjaxTimer=window.setTimeout(AutoComplete.prototype.ajax.bind(null,e,t,false),e.Delay)}else{if(e.Request){e.Request.abort()}e.Request=t;e.Request.send(encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(e._Pre()))}};if(!i&&document.querySelector(".index_endpoint")){o.focus()}}if(o!==null&&n.settings.search_on_category_select&&t.querySelector(".search_filters")!=null){n.on(t.getElementById("safesearch"),"change",s);n.on(t.getElementById("time_range"),"change",s);n.on(t.getElementById("language"),"change",s)}try{t.querySelector("html:has(body)")}catch(e){for(let e of t.querySelectorAll("button.category_button")){n.on(e,"click",()=>{const e=t.querySelector("button.category_button.selected");console.log(e);e.classList.remove("selected")})}}})})(window,document,window.searxng);(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.AutoComplete=e()}})(function(){var e,t,n;return function(){function c(i,s,a){function l(n,e){if(!s[n]){if(!i[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(u)return u(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[n]={exports:{}};i[n][0].call(o.exports,function(e){var t=i[n][1][e];return l(t||e)},o,o.exports,c,i,s,a)}return s[n].exports}for(var u="function"==typeof require&&require,e=0;e element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

How to navigate SearXNG with hotkeys

';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
';\n\n html += '

' + cat[0].cat + '

';\n html += '
    ';\n\n for (var cj in cat) {\n html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • ';\n }\n\n html += '
';\n html += '
';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // togggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occour only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img.image').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n img.style.display = 'none';\n img.error = null;\n }\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n searxng.selectImage = function (resultElement) {\n /* eslint no-unused-vars: 0 */\n if (resultElement) {\n // load full size image in background\n const imgElement = resultElement.querySelector('.result-images-source img');\n const thumbnailElement = resultElement.querySelector('.image_thumbnail');\n const detailElement = resultElement.querySelector('.detail');\n if (imgElement) {\n const imgSrc = imgElement.getAttribute('data-src');\n if (imgSrc) {\n const loader = d.createElement('div');\n const imgLoader = new Image();\n\n loader.classList.add('loader');\n detailElement.appendChild(loader);\n\n imgLoader.onload = e => {\n imgElement.src = imgSrc;\n loader.remove();\n };\n imgLoader.onerror = e => {\n loader.remove();\n };\n imgLoader.src = imgSrc;\n imgElement.src = thumbnailElement.src;\n imgElement.removeAttribute('data-src');\n }\n }\n }\n d.getElementById('results').classList.add('image-detail-open');\n searxng.scrollPageToSelected();\n }\n\n searxng.closeDetail = function (e) {\n d.getElementById('results').classList.remove('image-detail-open');\n searxng.scrollPageToSelected();\n }\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false)\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global AutoComplete */\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('keyup', updateClearButton, false);\n }\n\n searxng.ready(function () {\n qinput = d.getElementById(qinput_id);\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete_provider) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.settings.translations.no_item_found,\n HttpMethod: searxng.settings.http_method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: searxng.settings.autocomplete_min,\n Delay: 300,\n _Position: function () {},\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onmousedown = function () {\n params._Select(li);\n };\n }\n });\n },\n _Select: function (item) {\n AutoComplete.defaults._Select.call(this, item);\n var form = item.closest('form');\n if (form) {\n form.submit();\n }\n },\n _MinChars: function () {\n if (this.Input.value.indexOf('!') > -1) {\n return 0;\n } else {\n return AutoComplete.defaults._MinChars.call(this);\n }\n },\n KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, {\n \"KeyUpAndDown_up\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, {\n Callback: function (event) {\n AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event);\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive) {\n AutoComplete.defaults._Select.call(this, liActive);\n }\n },\n }),\n \"Tab\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, {\n Conditions: [{\n Is: 9,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n AutoComplete.defaults._Select.call(this, liActive);\n event.preventDefault();\n }\n }\n },\n })\n }),\n }, \"#\" + qinput_id);\n }\n\n /*\n Monkey patch autocomplete.js to fix a bug\n With the POST method, the values are not URL encoded: query like \"1 + 1\" are sent as \"1 1\" since space are URL encoded as plus.\n See HTML specifications:\n * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer\n * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n\n autocomplete.js does not URL encode the name and values:\n https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665\n\n The monkey patch overrides the compiled version of the ajax function.\n See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158\n The patch changes only the line 156 from\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n to\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n\n Related to:\n * https://github.com/autocompletejs/autocomplete.js/issues/78\n * https://github.com/searxng/searxng/issues/1695\n */\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n } else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n }\n };\n\n if (!isMobile && document.querySelector('.index_endpoint')) {\n qinput.focus();\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n // most common browsers at the time of writing this support :has, except for Firefox\n // can be removed when Firefox / Firefox ESL starts supporting it as well\n try {\n // this fails when the browser does not support :has\n d.querySelector(\"html:has(body)\");\n } catch (_) {\n // manually deselect the old selection when a new category is selected\n for (let button of d.querySelectorAll(\"button.category_button\")) {\n searxng.on(button, 'click', () => {\n const selected = d.querySelector(\"button.category_button.selected\");\n console.log(selected);\n selected.classList.remove(\"selected\");\n })\n }\n }\n });\n\n})(window, document, window.searxng);\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i @baptistedonaux\n */\nvar AutoComplete = /** @class */ (function () {\n // Constructor\n function AutoComplete(params, selector) {\n if (params === void 0) { params = {}; }\n if (selector === void 0) { selector = \"[data-autocomplete]\"; }\n if (Array.isArray(selector)) {\n selector.forEach(function (s) {\n new AutoComplete(params, s);\n });\n }\n else if (typeof selector == \"string\") {\n var elements = document.querySelectorAll(selector);\n Array.prototype.forEach.call(elements, function (input) {\n new AutoComplete(params, input);\n });\n }\n else {\n var specificParams = AutoComplete.merge(AutoComplete.defaults, params, {\n DOMResults: document.createElement(\"div\")\n });\n AutoComplete.prototype.create(specificParams, selector);\n return specificParams;\n }\n }\n AutoComplete.prototype.create = function (params, element) {\n params.Input = element;\n if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute(\"type\") === false || params.Input.getAttribute(\"type\").match(/^TEXT|SEARCH$/i))) {\n params.Input.setAttribute(\"autocomplete\", \"off\");\n params._Position(params);\n params.Input.parentNode.appendChild(params.DOMResults);\n params.$Listeners = {\n blur: params._Blur.bind(params),\n destroy: AutoComplete.prototype.destroy.bind(null, params),\n focus: params._Focus.bind(params),\n keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),\n keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),\n position: params._Position.bind(params)\n };\n for (var event in params.$Listeners) {\n params.Input.addEventListener(event, params.$Listeners[event]);\n }\n }\n };\n AutoComplete.prototype.getEventsByType = function (params, type) {\n var mappings = {};\n for (var key in params.KeyboardMappings) {\n var event = EventType.KEYUP;\n if (params.KeyboardMappings[key].Event !== undefined) {\n event = params.KeyboardMappings[key].Event;\n }\n if (event == type) {\n mappings[key] = params.KeyboardMappings[key];\n }\n }\n return mappings;\n };\n AutoComplete.prototype.event = function (params, type, event) {\n var eventIdentifier = function (condition) {\n if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {\n condition = AutoComplete.merge({\n Not: false\n }, condition);\n if (condition.hasOwnProperty(\"Is\")) {\n if (condition.Is == event.keyCode) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n else if (condition.hasOwnProperty(\"From\") && condition.hasOwnProperty(\"To\")) {\n if (event.keyCode >= condition.From && event.keyCode <= condition.To) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n }\n };\n for (var name in AutoComplete.prototype.getEventsByType(params, type)) {\n var mapping = AutoComplete.merge({\n Operator: ConditionOperator.AND\n }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator;\n mapping.Conditions.forEach(eventIdentifier);\n if (match === true) {\n mapping.Callback.call(params, event);\n }\n }\n };\n AutoComplete.prototype.makeRequest = function (params, callback, callbackErr) {\n var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(queryParams);\n if (method.match(/^GET$/i)) {\n if (url.indexOf(\"?\") !== -1) {\n url += \"&\" + queryParamsStringify;\n }\n else {\n url += \"?\" + queryParamsStringify;\n }\n }\n request.open(method, url, true);\n for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {\n request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4 && request.status == 200) {\n params.$Cache[queryParams] = request.response;\n callback(request.response);\n }\n else if (request.status >= 400) {\n callbackErr();\n }\n };\n return request;\n };\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n }\n else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n }\n };\n AutoComplete.prototype.cache = function (params, callback, callbackErr) {\n var response = params._Cache(params._Pre());\n if (response === undefined) {\n var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);\n AutoComplete.prototype.ajax(params, request);\n }\n else {\n callback(response);\n }\n };\n AutoComplete.prototype.destroy = function (params) {\n for (var event in params.$Listeners) {\n params.Input.removeEventListener(event, params.$Listeners[event]);\n }\n params.DOMResults.parentNode.removeChild(params.DOMResults);\n };\n AutoComplete.merge = function () {\n var merge = {}, tmp;\n for (var i = 0; i < arguments.length; i++) {\n for (tmp in arguments[i]) {\n merge[tmp] = arguments[i][tmp];\n }\n }\n return merge;\n };\n AutoComplete.defaults = {\n Delay: 150,\n EmptyMessage: \"No result here\",\n Highlight: {\n getRegex: function (value) {\n return new RegExp(value, \"ig\");\n },\n transform: function (value) {\n return \"\" + value + \"\";\n }\n },\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n },\n Limit: 0,\n MinChars: 0,\n HttpMethod: \"GET\",\n QueryArg: \"q\",\n Url: null,\n KeyboardMappings: {\n \"Enter\": {\n Conditions: [{\n Is: 13,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n event.preventDefault();\n this._Select(liActive);\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n }\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_down\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_up\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n var first = this.DOMResults.querySelector(\"li:first-child:not(.locked)\"), last = this.DOMResults.querySelector(\"li:last-child:not(.locked)\"), active = this.DOMResults.querySelector(\"li.active\");\n if (active) {\n var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName(\"li\").length;\n if (position < 0) {\n position = lisCount - 1;\n }\n else if (position >= lisCount) {\n position = 0;\n }\n active.classList.remove(\"active\");\n active.parentElement.children.item(position).classList.add(\"active\");\n }\n else if (last && event.keyCode == 38) {\n last.classList.add(\"active\");\n }\n else if (first) {\n first.classList.add(\"active\");\n }\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYUP\n },\n \"AlphaNum\": {\n Conditions: [{\n Is: 13,\n Not: true\n }, {\n From: 35,\n To: 40,\n Not: true\n }],\n Callback: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\"), currentValue = this._Pre();\n if (currentValue !== \"\" && currentValue.length >= this._MinChars()) {\n if (!oldValue || currentValue != oldValue) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n AutoComplete.prototype.cache(this, function (response) {\n this._Render(this._Post(response));\n this._Open();\n }.bind(this), this._Error);\n }\n else {\n this._Close();\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYUP\n }\n },\n DOMResults: null,\n Request: null,\n Input: null,\n /**\n * Return the message when no result returns\n */\n _EmptyMessage: function () {\n var emptyMessage = \"\";\n if (this.Input.hasAttribute(\"data-autocomplete-empty-message\")) {\n emptyMessage = this.Input.getAttribute(\"data-autocomplete-empty-message\");\n }\n else if (this.EmptyMessage !== false) {\n emptyMessage = this.EmptyMessage;\n }\n else {\n emptyMessage = \"\";\n }\n return emptyMessage;\n },\n /**\n * Returns the maximum number of results\n */\n _Limit: function () {\n var limit = this.Input.getAttribute(\"data-autocomplete-limit\");\n if (isNaN(limit) || limit === null) {\n return this.Limit;\n }\n return parseInt(limit, 10);\n },\n /**\n * Returns the minimum number of characters entered before firing ajax\n */\n _MinChars: function () {\n var minchars = this.Input.getAttribute(\"data-autocomplete-minchars\");\n if (isNaN(minchars) || minchars === null) {\n return this.MinChars;\n }\n return parseInt(minchars, 10);\n },\n /**\n * Apply transformation on labels response\n */\n _Highlight: function (label) {\n return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);\n },\n /**\n * Returns the HHTP method to use\n */\n _HttpMethod: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-method\")) {\n return this.Input.getAttribute(\"data-autocomplete-method\");\n }\n return this.HttpMethod;\n },\n /**\n * Returns the query param to use\n */\n _QueryArg: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-param-name\")) {\n return this.Input.getAttribute(\"data-autocomplete-param-name\");\n }\n return this.QueryArg;\n },\n /**\n * Returns the URL to use for AJAX request\n */\n _Url: function () {\n if (this.Input.hasAttribute(\"data-autocomplete\")) {\n return this.Input.getAttribute(\"data-autocomplete\");\n }\n return this.Url;\n },\n /**\n * Manage the close\n */\n _Blur: function (now) {\n if (now === void 0) { now = false; }\n if (now) {\n this._Close();\n }\n else {\n var params = this;\n setTimeout(function () {\n params._Blur(true);\n }, 150);\n }\n },\n /**\n * Manage the cache\n */\n _Cache: function (value) {\n return this.$Cache[value];\n },\n /**\n * Manage the open\n */\n _Focus: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\");\n if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n },\n /**\n * Bind all results item if one result is opened\n */\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onclick = function () {\n params._Select(li);\n };\n }\n });\n },\n _Close: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n },\n /**\n * Position the results HTML element\n */\n _Position: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.setAttribute(\"style\", \"top:\" + (this.Input.offsetTop + this.Input.offsetHeight) + \"px;left:\" + this.Input.offsetLeft + \"px;width:\" + this.Input.clientWidth + \"px;\");\n },\n /**\n * Execute the render of results DOM element\n */\n _Render: function (response) {\n var ul;\n if (typeof response == \"string\") {\n ul = this._RenderRaw(response);\n }\n else {\n ul = this._RenderResponseItems(response);\n }\n if (this.DOMResults.hasChildNodes()) {\n this.DOMResults.removeChild(this.DOMResults.childNodes[0]);\n }\n this.DOMResults.appendChild(ul);\n },\n /**\n * ResponseItems[] rendering\n */\n _RenderResponseItems: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\"), limit = this._Limit();\n // Order\n if (limit < 0) {\n response = response.reverse();\n }\n else if (limit === 0) {\n limit = response.length;\n }\n for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) {\n li.innerHTML = response[item].Label;\n li.setAttribute(\"data-autocomplete-value\", response[item].Value);\n ul.appendChild(li);\n li = document.createElement(\"li\");\n }\n return ul;\n },\n /**\n * string response rendering (RAW HTML)\n */\n _RenderRaw: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\");\n if (response.length > 0) {\n this.DOMResults.innerHTML = response;\n }\n else {\n var emptyMessage = this._EmptyMessage();\n if (emptyMessage !== \"\") {\n li.innerHTML = emptyMessage;\n li.setAttribute(\"class\", \"locked\");\n ul.appendChild(li);\n }\n }\n return ul;\n },\n /**\n * Deal with request response\n */\n _Post: function (response) {\n try {\n var returnResponse = [];\n //JSON return\n var json = JSON.parse(response);\n if (Object.keys(json).length === 0) {\n return \"\";\n }\n if (Array.isArray(json)) {\n for (var i = 0; i < Object.keys(json).length; i++) {\n returnResponse[returnResponse.length] = { \"Value\": json[i], \"Label\": this._Highlight(json[i]) };\n }\n }\n else {\n for (var value in json) {\n returnResponse.push({\n \"Value\": value,\n \"Label\": this._Highlight(json[value])\n });\n }\n }\n return returnResponse;\n }\n catch (event) {\n //HTML return\n return response;\n }\n },\n /**\n * Return the autocomplete value to send (before request)\n */\n _Pre: function () {\n return this.Input.value;\n },\n /**\n * Choice one result item\n */\n _Select: function (item) {\n if (item.hasAttribute(\"data-autocomplete-value\")) {\n this.Input.value = item.getAttribute(\"data-autocomplete-value\");\n }\n else {\n this.Input.value = item.innerHTML;\n }\n this.Input.setAttribute(\"data-autocomplete-old-value\", this.Input.value);\n },\n /**\n * Handle HTTP error on the request\n */\n _Error: function () {\n },\n $AjaxTimer: null,\n $Cache: {},\n $Listeners: {}\n };\n return AutoComplete;\n}());\nmodule.exports = AutoComplete;\n\n},{}]},{},[1])(1)\n});\n"],"names":["window","searxng","w","d","Element","ElementPrototype","matches","matchesSelector","webkitMatchesSelector","msMatchesSelector","selector","node","this","nodes","parentNode","document","querySelectorAll","i","prototype","callbackSafe","callback","el","e","call","exception","console","log","on","obj","eventType","useCapture","addEventListener","target","srcElement","found","parentElement","ready","readyState","bind","http","method","url","data","Promise","resolve","reject","req","XMLHttpRequest","open","timeout","onload","status","response","responseType","Error","statusText","onerror","onabort","ontimeout","send","ex","loadStyle","src","path","settings","theme_static_path","id","replace","s","getElementById","createElement","setAttribute","body","appendChild","loadScript","hasAttribute","apply","insertBefore","newNode","referenceNode","insertAfter","nextSibling","classList","add","getEndpoint","className","getElementsByTagName","values","endsWith","split","endpoint","infinite_scroll_supported","IntersectionObserverEntry","let","onlyImages","contains","newLoadSpinner","loader","replaceChildrenWith","element","children","textContent","forEach","child","loadNextPage","form","querySelector","formData","FormData","getAttribute","then","nextPageDoc","DOMParser","parseFromString","articleList","paginationElement","remove","length","articleElement","catch","err","translations","error_loading_next_page","infinite_scroll","intersectionObserveOptions","rootMargin","observedSelector","observer","IntersectionObserver","entries","paginationEntry","isIntersecting","unobserve","observe","isElementInDetail","undefined","getResultElement","isImageResult","resultElement","highlightResult","preventDefault","selectImage","baseKeyBinding","Escape","key","fun","removeFocus","des","cat","c","copyURLToClipboard","h","toggleHelp","searchInputFocus","n","GoToNextPage","o","openResult","p","GoToPreviousPage","r","reloadPage","t","keyBindingLayouts","default","Object","assign","ArrowLeft","ArrowRight","vim","b","scrollPage","innerHeight","f","u","g","scrollPageTo","scrollHeight","v","k","j","y","keyBindings","hotkeys","hasOwnProperty","ctrlKey","altKey","shiftKey","metaKey","tagName","toLowerCase","which","noScroll","keepFocus","current","effectiveWhich","next","results","Array","from","top","documentElement","scrollTop","bot","clientHeight","etop","offsetTop","ebot","indexOf","removeAttribute","link","focus","scrollPageToSelected","location","reload","activeElement","blur","closeDetail","pageButtonClick","css_selector","button","click","sel","wtop","wheight","offset","previousElementSibling","scroll","scrollX","wbot","amount","scrollBy","position","nav","scrollTo","q","setSelectionRange","len","value","newTab","href","initHelpContent","divElement","categories","push","sorted","keys","sort","a","html","lastCategory","first","cj","innerHTML","helpPanel","toggle","currentUrlElement","navigator","clipboard","writeText","selectNext","selectPrevious","event","leaflet_target","dataset","leafletTarget","map_lon","parseFloat","mapLon","map_lat","mapLat","map_zoom","mapZoom","map_boundingbox","JSON","parse","mapBoundingbox","map_geojson","mapGeojson","map_bounds","southWest","L","latLng","northEast","latLngBounds","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","TileLayer","minZoom","maxZoom","attribution","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","setTimeout","fitBounds","setView","addLayer","baseLayers","OSM Mapnik","OSM Wikimedia","control","layers","addTo","geoJson","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","Source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","offsetParent","checked","enable","copyHashButton","hash","innerText","copiedText","img","style","display","error","btnLabelCollapsed","btnLabelNotCollapsed","targetElement","iframe_load","srctest","imgElement","thumbnailElement","detailElement","imgSrc","imgLoader","Image","qinput_id","qinput","isMobile","matchMedia","submitIfQuery","search","submit","createClearButton","cs","updateClearButton","ev","autocomplete_provider","autocomplete","AutoComplete","Url","EmptyMessage","no_item_found","HttpMethod","http_method","HttpHeaders","Content-type","X-Requested-With","MinChars","autocomplete_min","Delay","_Position","_Open","params","DOMResults","li","onmousedown","_Select","item","defaults","closest","_MinChars","Input","KeyboardMappings","KeyUpAndDown_up","Callback","liActive","Tab","Enter","Conditions","Is","Not","ajax","request","$AjaxTimer","clearTimeout","Request","abort","encodeURIComponent","_QueryArg","_Pre","search_on_category_select","_","selected","exports","module","define","amd","global","self","require","code","1","ConditionOperator","EventType","isArray","input","specificParams","merge","create","nodeName","match","$Listeners","_Blur","destroy","_Focus","keyup","KEYUP","keydown","KEYDOWN","getEventsByType","type","mappings","Event","eventIdentifier","condition","mapping","Operator","AND","OR","keyCode","From","To","name","makeRequest","callbackErr","propertyHttpHeaders","getOwnPropertyNames","_HttpMethod","_Url","queryParams","queryParamsStringify","setRequestHeader","onreadystatechange","$Cache","cache","_Cache","removeEventListener","removeChild","tmp","arguments","Highlight","getRegex","RegExp","transform","Limit","QueryArg","KeyUpAndDown_down","last","active","currentIndex","lisCount","AlphaNum","oldValue","currentValue","_Render","_Post","_Error","_Close","_EmptyMessage","emptyMessage","_Limit","limit","isNaN","parseInt","minchars","_Highlight","label","now","onclick","offsetHeight","offsetLeft","clientWidth","ul","_RenderRaw","_RenderResponseItems","hasChildNodes","childNodes","reverse","Math","min","abs","Label","Value","returnResponse","json"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"searxng.min.js","sources":["../src/js/main/00_toolkit.js","../src/js/main/infinite_scroll.js","../src/js/main/keyboard.js","../src/js/main/mapresult.js","../src/js/main/preferences.js","../src/js/main/results.js","../src/js/main/search.js","../node_modules/autocomplete-js/dist/autocomplete.js"],"sourcesContent":["/**\n * @license\n * (C) Copyright Contributors to the SearXNG project.\n * (C) Copyright Contributors to the searx project (2014 - 2021).\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nwindow.searxng = (function (w, d) {\n\n 'use strict';\n\n // not invented here tookit with bugs fixed elsewhere\n // purposes : be just good enough and as small as possible\n\n // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/\n if (w.Element) {\n (function (ElementPrototype) {\n ElementPrototype.matches = ElementPrototype.matches ||\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n function (selector) {\n var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;\n while (nodes[++i] && nodes[i] != node);\n return !!nodes[i];\n };\n })(Element.prototype);\n }\n\n function callbackSafe (callback, el, e) {\n try {\n callback.call(el, e);\n } catch (exception) {\n console.log(exception);\n }\n }\n\n var searxng = window.searxng || {};\n\n searxng.on = function (obj, eventType, callback, useCapture) {\n useCapture = useCapture || false;\n if (typeof obj !== 'string') {\n // obj HTMLElement, HTMLDocument\n obj.addEventListener(eventType, callback, useCapture);\n } else {\n // obj is a selector\n d.addEventListener(eventType, function (e) {\n var el = e.target || e.srcElement, found = false;\n while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;\n if (found) callbackSafe(callback, el, e);\n }, useCapture);\n }\n };\n\n searxng.ready = function (callback) {\n if (document.readyState != 'loading') {\n callback.call(w);\n } else {\n w.addEventListener('DOMContentLoaded', callback.bind(w));\n }\n };\n\n searxng.http = function (method, url, data = null) {\n return new Promise(function (resolve, reject) {\n try {\n var req = new XMLHttpRequest();\n req.open(method, url, true);\n req.timeout = 20000;\n\n // On load\n req.onload = function () {\n if (req.status == 200) {\n resolve(req.response, req.responseType);\n } else {\n reject(Error(req.statusText));\n }\n };\n\n // Handle network errors\n req.onerror = function () {\n reject(Error(\"Network Error\"));\n };\n\n req.onabort = function () {\n reject(Error(\"Transaction is aborted\"));\n };\n\n req.ontimeout = function () {\n reject(Error(\"Timeout\"));\n }\n\n // Make the request\n if (data) {\n req.send(data)\n } else {\n req.send();\n }\n } catch (ex) {\n reject(ex);\n }\n });\n };\n\n searxng.loadStyle = function (src) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"style_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('link');\n s.setAttribute('id', id);\n s.setAttribute('rel', 'stylesheet');\n s.setAttribute('type', 'text/css');\n s.setAttribute('href', path);\n d.body.appendChild(s);\n }\n };\n\n searxng.loadScript = function (src, callback) {\n var path = searxng.settings.theme_static_path + \"/\" + src,\n id = \"script_\" + src.replace('.', '_'),\n s = d.getElementById(id);\n if (s === null) {\n s = d.createElement('script');\n s.setAttribute('id', id);\n s.setAttribute('src', path);\n s.onload = callback;\n s.onerror = function () {\n s.setAttribute('error', '1');\n };\n d.body.appendChild(s);\n } else if (!s.hasAttribute('error')) {\n try {\n callback.apply(s, []);\n } catch (exception) {\n console.log(exception);\n }\n } else {\n console.log(\"callback not executed : script '\" + path + \"' not loaded.\");\n }\n };\n\n searxng.insertBefore = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode);\n };\n\n searxng.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);\n };\n\n searxng.on('.close', 'click', function () {\n this.parentNode.classList.add('invisible');\n });\n\n function getEndpoint () {\n for (var className of d.getElementsByTagName('body')[0].classList.values()) {\n if (className.endsWith('_endpoint')) {\n return className.split('_')[0];\n }\n }\n return '';\n }\n\n searxng.endpoint = getEndpoint();\n\n return searxng;\n})(window, document);\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/* global searxng */\n\nsearxng.ready(function () {\n 'use strict';\n\n searxng.infinite_scroll_supported = (\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype);\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n if (!searxng.infinite_scroll_supported) {\n console.log('IntersectionObserver not supported');\n return;\n }\n\n let d = document;\n var onlyImages = d.getElementById('results').classList.contains('only_template_images');\n\n function newLoadSpinner () {\n var loader = d.createElement('div');\n loader.classList.add('loader');\n return loader;\n }\n\n function replaceChildrenWith (element, children) {\n element.textContent = '';\n children.forEach(child => element.appendChild(child));\n }\n\n function loadNextPage (callback) {\n var form = d.querySelector('#pagination form.next_page');\n if (!form) {\n return\n }\n replaceChildrenWith(d.querySelector('#pagination'), [ newLoadSpinner() ]);\n var formData = new FormData(form);\n searxng.http('POST', d.querySelector('#search').getAttribute('action'), formData).then(\n function (response) {\n var nextPageDoc = new DOMParser().parseFromString(response, 'text/html');\n var articleList = nextPageDoc.querySelectorAll('#urls article');\n var paginationElement = nextPageDoc.querySelector('#pagination');\n d.querySelector('#pagination').remove();\n if (articleList.length > 0 && !onlyImages) {\n // do not add
element when there are only images\n d.querySelector('#urls').appendChild(d.createElement('hr'));\n }\n articleList.forEach(articleElement => {\n d.querySelector('#urls').appendChild(articleElement);\n });\n if (paginationElement) {\n d.querySelector('#results').appendChild(paginationElement);\n callback();\n }\n }\n ).catch(\n function (err) {\n console.log(err);\n var e = d.createElement('div');\n e.textContent = searxng.settings.translations.error_loading_next_page;\n e.classList.add('dialog-error');\n e.setAttribute('role', 'alert');\n replaceChildrenWith(d.querySelector('#pagination'), [ e ]);\n }\n )\n }\n\n if (searxng.settings.infinite_scroll && searxng.infinite_scroll_supported) {\n const intersectionObserveOptions = {\n rootMargin: \"20rem\",\n };\n const observedSelector = 'article.result:last-child';\n const observer = new IntersectionObserver(entries => {\n const paginationEntry = entries[0];\n if (paginationEntry.isIntersecting) {\n observer.unobserve(paginationEntry.target);\n loadNextPage(() => observer.observe(d.querySelector(observedSelector), intersectionObserveOptions));\n }\n });\n observer.observe(d.querySelector(observedSelector), intersectionObserveOptions);\n }\n\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global searxng */\n\nsearxng.ready(function () {\n\n function isElementInDetail (el) {\n while (el !== undefined) {\n if (el.classList.contains('detail')) {\n return true;\n }\n if (el.classList.contains('result')) {\n // we found a result, no need to go to the root of the document:\n // el is not inside a
element\n return false;\n }\n el = el.parentNode;\n }\n return false;\n }\n\n function getResultElement (el) {\n while (el !== undefined) {\n if (el.classList.contains('result')) {\n return el;\n }\n el = el.parentNode;\n }\n return undefined;\n }\n\n function isImageResult (resultElement) {\n return resultElement && resultElement.classList.contains('result-images');\n }\n\n searxng.on('.result', 'click', function (e) {\n if (!isElementInDetail(e.target)) {\n highlightResult(this)(true, true);\n let resultElement = getResultElement(e.target);\n if (isImageResult(resultElement)) {\n e.preventDefault();\n searxng.selectImage(resultElement);\n }\n }\n });\n\n searxng.on('.result a', 'focus', function (e) {\n if (!isElementInDetail(e.target)) {\n let resultElement = getResultElement(e.target);\n if (resultElement && resultElement.getAttribute(\"data-vim-selected\") === null) {\n highlightResult(resultElement)(true);\n }\n if (isImageResult(resultElement)) {\n searxng.selectImage(resultElement);\n }\n }\n }, true);\n\n /* common base for layouts */\n var baseKeyBinding = {\n 'Escape': {\n key: 'ESC',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 'c': {\n key: 'c',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n 'h': {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n },\n 'i': {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 'n': {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 'o': {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 'p': {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 'r': {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 't': {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n };\n var keyBindingLayouts = {\n\n \"default\": Object.assign(\n { /* SearXNG layout */\n 'ArrowLeft': {\n key: '←',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'ArrowRight': {\n key: '→',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n }, baseKeyBinding),\n\n 'vim': Object.assign(\n { /* Vim-like Key Layout. */\n 'b': {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 'f': {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 'u': {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 'd': {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 'g': {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 'v': {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 'k': {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 'j': {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 'y': {\n key: 'y',\n fun: copyURLToClipboard,\n des: 'copy url of the selected result to the clipboard',\n cat: 'Results'\n },\n }, baseKeyBinding)\n }\n\n var keyBindings = keyBindingLayouts[searxng.settings.hotkeys] || keyBindingLayouts.default;\n\n searxng.on(document, \"keydown\", function (e) {\n // check for modifiers so we don't break browser's hotkeys\n if (\n Object.prototype.hasOwnProperty.call(keyBindings, e.key)\n && !e.ctrlKey && !e.altKey\n && !e.shiftKey && !e.metaKey\n ) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.key === 'Escape') {\n keyBindings[e.key].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n keyBindings[e.key].fun();\n }\n }\n }\n });\n\n function highlightResult (which) {\n return function (noScroll, keepFocus) {\n var current = document.querySelector('.result[data-vim-selected]'),\n effectiveWhich = which;\n if (current === null) {\n // no selection : choose the first one\n current = document.querySelector('.result');\n if (current === null) {\n // no first one : there are no results\n return;\n }\n // replace up/down actions by selecting first one\n if (which === \"down\" || which === \"up\") {\n effectiveWhich = current;\n }\n }\n\n var next, results = document.querySelectorAll('.result');\n results = Array.from(results); // convert NodeList to Array for further use\n\n if (typeof effectiveWhich !== 'string') {\n next = effectiveWhich;\n } else {\n switch (effectiveWhich) {\n case 'visible':\n var top = document.documentElement.scrollTop || document.body.scrollTop;\n var bot = top + document.documentElement.clientHeight;\n\n for (var i = 0; i < results.length; i++) {\n next = results[i];\n var etop = next.offsetTop;\n var ebot = etop + next.clientHeight;\n\n if ((ebot <= bot) && (etop > top)) {\n break;\n }\n }\n break;\n case 'down':\n next = results[results.indexOf(current) + 1] || current;\n break;\n case 'up':\n next = results[results.indexOf(current) - 1] || current;\n break;\n case 'bottom':\n next = results[results.length - 1];\n break;\n case 'top':\n /* falls through */\n default:\n next = results[0];\n }\n }\n\n if (next) {\n current.removeAttribute('data-vim-selected');\n next.setAttribute('data-vim-selected', 'true');\n if (!keepFocus) {\n var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\n }\n }\n if (!noScroll) {\n scrollPageToSelected();\n }\n }\n };\n }\n\n function reloadPage () {\n document.location.reload(true);\n }\n\n function removeFocus (e) {\n const tagName = e.target.tagName.toLowerCase();\n if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {\n document.activeElement.blur();\n } else {\n searxng.closeDetail();\n }\n }\n\n function pageButtonClick (css_selector) {\n return function () {\n var button = document.querySelector(css_selector);\n if (button) {\n button.click();\n }\n };\n }\n\n function GoToNextPage () {\n return pageButtonClick('nav#pagination .next_page button[type=\"submit\"]');\n }\n\n function GoToPreviousPage () {\n return pageButtonClick('nav#pagination .previous_page button[type=\"submit\"]');\n }\n\n function scrollPageToSelected () {\n var sel = document.querySelector('.result[data-vim-selected]');\n if (sel === null) {\n return;\n }\n var wtop = document.documentElement.scrollTop || document.body.scrollTop,\n wheight = document.documentElement.clientHeight,\n etop = sel.offsetTop,\n ebot = etop + sel.clientHeight,\n offset = 120;\n // first element ?\n if ((sel.previousElementSibling === null) && (ebot < wheight)) {\n // set to the top of page if the first element\n // is fully included in the viewport\n window.scroll(window.scrollX, 0);\n return;\n }\n if (wtop > (etop - offset)) {\n window.scroll(window.scrollX, etop - offset);\n } else {\n var wbot = wtop + wheight;\n if (wbot < (ebot + offset)) {\n window.scroll(window.scrollX, ebot - wheight + offset);\n }\n }\n }\n\n function scrollPage (amount) {\n return function () {\n window.scrollBy(0, amount);\n highlightResult('visible')();\n };\n }\n\n function scrollPageTo (position, nav) {\n return function () {\n window.scrollTo(0, position);\n highlightResult(nav)();\n };\n }\n\n function searchInputFocus () {\n window.scrollTo(0, 0);\n var q = document.querySelector('#q');\n q.focus();\n if (q.setSelectionRange) {\n var len = q.value.length;\n q.setSelectionRange(len, len);\n }\n }\n\n function openResult (newTab) {\n return function () {\n var link = document.querySelector('.result[data-vim-selected] h3 a');\n if (link === null) {\n link = document.querySelector('.result[data-vim-selected] > a');\n }\n if (link !== null) {\n var url = link.getAttribute('href');\n if (newTab) {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }\n };\n }\n\n function initHelpContent (divElement) {\n var categories = {};\n\n for (var k in keyBindings) {\n var key = keyBindings[k];\n categories[key.cat] = categories[key.cat] || [];\n categories[key.cat].push(key);\n }\n\n var sorted = Object.keys(categories).sort(function (a, b) {\n return categories[b].length - categories[a].length;\n });\n\n if (sorted.length === 0) {\n return;\n }\n\n var html = '×';\n html += '

How to navigate SearXNG with hotkeys

';\n html += '';\n\n for (var i = 0; i < sorted.length; i++) {\n var cat = categories[sorted[i]];\n\n var lastCategory = i === (sorted.length - 1);\n var first = i % 2 === 0;\n\n if (first) {\n html += '';\n }\n html += ''; // col-sm-*\n\n if (!first || lastCategory) {\n html += ''; // row\n }\n }\n\n html += '
';\n\n html += '

' + cat[0].cat + '

';\n html += '
    ';\n\n for (var cj in cat) {\n html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • ';\n }\n\n html += '
';\n html += '
';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // togggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n function copyURLToClipboard () {\n var currentUrlElement = document.querySelector('.result[data-vim-selected] h3 a');\n if (currentUrlElement === null) return;\n\n const url = currentUrlElement.getAttribute('href');\n navigator.clipboard.writeText(url);\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occour only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n\n const enableAllEngines = d.querySelectorAll(\".enable-all-engines\");\n const disableAllEngines = d.querySelectorAll(\".disable-all-engines\");\n const engineToggles = d.querySelectorAll('tbody input[type=checkbox][class~=checkbox-onoff]');\n const toggleEngines = (enable) => {\n for (const el of engineToggles) {\n // check if element visible, so that only engines of the current category are modified\n if (el.offsetParent !== null) el.checked = !enable;\n }\n };\n for (const el of enableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(true));\n }\n for (const el of disableAllEngines) {\n searxng.on(el, 'click', () => toggleEngines(false));\n }\n\n const copyHashButton = d.querySelector(\"#copy-hash\");\n searxng.on(copyHashButton, 'click', (e) => {\n e.preventDefault();\n navigator.clipboard.writeText(copyHashButton.dataset.hash);\n copyHashButton.innerText = copyHashButton.dataset.copiedText;\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img.image').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n img.style.display = 'none';\n img.error = null;\n }\n ));\n\n if (d.querySelector('#search_url button#copy_url')) {\n d.querySelector('#search_url button#copy_url').style.display = \"block\";\n }\n\n searxng.on('.btn-collapse', 'click', function () {\n var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed');\n var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed');\n var target = this.getAttribute('data-target');\n var targetElement = d.querySelector(target);\n var html = this.innerHTML;\n if (this.classList.contains('collapsed')) {\n html = html.replace(btnLabelCollapsed, btnLabelNotCollapsed);\n } else {\n html = html.replace(btnLabelNotCollapsed, btnLabelCollapsed);\n }\n this.innerHTML = html;\n this.classList.toggle('collapsed');\n targetElement.classList.toggle('invisible');\n });\n\n searxng.on('.media-loader', 'click', function () {\n var target = this.getAttribute('data-target');\n var iframe_load = d.querySelector(target + ' > iframe');\n var srctest = iframe_load.getAttribute('src');\n if (srctest === null || srctest === undefined || srctest === false) {\n iframe_load.setAttribute('src', iframe_load.getAttribute('data-src'));\n }\n });\n\n searxng.on('#copy_url', 'click', function () {\n var target = this.parentElement.querySelector('pre');\n navigator.clipboard.writeText(target.innerText);\n this.innerText = this.dataset.copiedText;\n });\n\n searxng.selectImage = function (resultElement) {\n /* eslint no-unused-vars: 0 */\n if (resultElement) {\n // load full size image in background\n const imgElement = resultElement.querySelector('.result-images-source img');\n const thumbnailElement = resultElement.querySelector('.image_thumbnail');\n const detailElement = resultElement.querySelector('.detail');\n if (imgElement) {\n const imgSrc = imgElement.getAttribute('data-src');\n if (imgSrc) {\n const loader = d.createElement('div');\n const imgLoader = new Image();\n\n loader.classList.add('loader');\n detailElement.appendChild(loader);\n\n imgLoader.onload = e => {\n imgElement.src = imgSrc;\n loader.remove();\n };\n imgLoader.onerror = e => {\n loader.remove();\n };\n imgLoader.src = imgSrc;\n imgElement.src = thumbnailElement.src;\n imgElement.removeAttribute('data-src');\n }\n }\n }\n d.getElementById('results').classList.add('image-detail-open');\n searxng.scrollPageToSelected();\n }\n\n searxng.closeDetail = function (e) {\n d.getElementById('results').classList.remove('image-detail-open');\n searxng.scrollPageToSelected();\n }\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => {\n e.preventDefault();\n searxng.selectPrevious(false)\n });\n searxng.on('.result-detail-next', 'click', e => {\n e.preventDefault();\n searxng.selectNext(false);\n });\n\n w.addEventListener('scroll', function () {\n var e = d.getElementById('backToTop'),\n scrollTop = document.documentElement.scrollTop || document.body.scrollTop,\n results = d.getElementById('results');\n if (e !== null) {\n if (scrollTop >= 100) {\n results.classList.add('scrolling');\n } else {\n results.classList.remove('scrolling');\n }\n }\n }, true);\n\n });\n\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global AutoComplete */\n(function (w, d, searxng) {\n 'use strict';\n\n var qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('input', updateClearButton, false);\n }\n\n searxng.ready(function () {\n qinput = d.getElementById(qinput_id);\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete_provider) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.settings.translations.no_item_found,\n HttpMethod: searxng.settings.http_method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: searxng.settings.autocomplete_min,\n Delay: 300,\n _Position: function () {},\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onmousedown = function () {\n params._Select(li);\n };\n }\n });\n },\n _Select: function (item) {\n AutoComplete.defaults._Select.call(this, item);\n var form = item.closest('form');\n if (form) {\n form.submit();\n }\n },\n _MinChars: function () {\n if (this.Input.value.indexOf('!') > -1) {\n return 0;\n } else {\n return AutoComplete.defaults._MinChars.call(this);\n }\n },\n KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, {\n \"KeyUpAndDown_up\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, {\n Callback: function (event) {\n AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event);\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive) {\n AutoComplete.defaults._Select.call(this, liActive);\n }\n },\n }),\n \"Tab\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, {\n Conditions: [{\n Is: 9,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n AutoComplete.defaults._Select.call(this, liActive);\n event.preventDefault();\n }\n }\n },\n })\n }),\n }, \"#\" + qinput_id);\n }\n\n /*\n Monkey patch autocomplete.js to fix a bug\n With the POST method, the values are not URL encoded: query like \"1 + 1\" are sent as \"1 1\" since space are URL encoded as plus.\n See HTML specifications:\n * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer\n * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n\n autocomplete.js does not URL encode the name and values:\n https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665\n\n The monkey patch overrides the compiled version of the ajax function.\n See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158\n The patch changes only the line 156 from\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n to\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n\n Related to:\n * https://github.com/autocompletejs/autocomplete.js/issues/78\n * https://github.com/searxng/searxng/issues/1695\n */\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n } else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n }\n };\n\n if (!isMobile && document.querySelector('.index_endpoint')) {\n qinput.focus();\n }\n }\n\n // Additionally to searching when selecting a new category, we also\n // automatically start a new search request when the user changes a search\n // filter (safesearch, time range or language) (this requires JavaScript\n // though)\n if (\n qinput !== null\n && searxng.settings.search_on_category_select\n // If .search_filters is undefined (invisible) we are on the homepage and\n // hence don't have to set any listeners\n && d.querySelector(\".search_filters\") != null\n ) {\n searxng.on(d.getElementById('safesearch'), 'change', submitIfQuery);\n searxng.on(d.getElementById('time_range'), 'change', submitIfQuery);\n searxng.on(d.getElementById('language'), 'change', submitIfQuery);\n }\n\n // most common browsers at the time of writing this support :has, except for Firefox\n // can be removed when Firefox / Firefox ESL starts supporting it as well\n try {\n // this fails when the browser does not support :has\n d.querySelector(\"html:has(body)\");\n } catch (_) {\n // manually deselect the old selection when a new category is selected\n for (let button of d.querySelectorAll(\"button.category_button\")) {\n searxng.on(button, 'click', () => {\n const selected = d.querySelector(\"button.category_button.selected\");\n console.log(selected);\n selected.classList.remove(\"selected\");\n })\n }\n }\n });\n\n})(window, document, window.searxng);\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i @baptistedonaux\n */\nvar AutoComplete = /** @class */ (function () {\n // Constructor\n function AutoComplete(params, selector) {\n if (params === void 0) { params = {}; }\n if (selector === void 0) { selector = \"[data-autocomplete]\"; }\n if (Array.isArray(selector)) {\n selector.forEach(function (s) {\n new AutoComplete(params, s);\n });\n }\n else if (typeof selector == \"string\") {\n var elements = document.querySelectorAll(selector);\n Array.prototype.forEach.call(elements, function (input) {\n new AutoComplete(params, input);\n });\n }\n else {\n var specificParams = AutoComplete.merge(AutoComplete.defaults, params, {\n DOMResults: document.createElement(\"div\")\n });\n AutoComplete.prototype.create(specificParams, selector);\n return specificParams;\n }\n }\n AutoComplete.prototype.create = function (params, element) {\n params.Input = element;\n if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute(\"type\") === false || params.Input.getAttribute(\"type\").match(/^TEXT|SEARCH$/i))) {\n params.Input.setAttribute(\"autocomplete\", \"off\");\n params._Position(params);\n params.Input.parentNode.appendChild(params.DOMResults);\n params.$Listeners = {\n blur: params._Blur.bind(params),\n destroy: AutoComplete.prototype.destroy.bind(null, params),\n focus: params._Focus.bind(params),\n keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),\n keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),\n position: params._Position.bind(params)\n };\n for (var event in params.$Listeners) {\n params.Input.addEventListener(event, params.$Listeners[event]);\n }\n }\n };\n AutoComplete.prototype.getEventsByType = function (params, type) {\n var mappings = {};\n for (var key in params.KeyboardMappings) {\n var event = EventType.KEYUP;\n if (params.KeyboardMappings[key].Event !== undefined) {\n event = params.KeyboardMappings[key].Event;\n }\n if (event == type) {\n mappings[key] = params.KeyboardMappings[key];\n }\n }\n return mappings;\n };\n AutoComplete.prototype.event = function (params, type, event) {\n var eventIdentifier = function (condition) {\n if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {\n condition = AutoComplete.merge({\n Not: false\n }, condition);\n if (condition.hasOwnProperty(\"Is\")) {\n if (condition.Is == event.keyCode) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n else if (condition.hasOwnProperty(\"From\") && condition.hasOwnProperty(\"To\")) {\n if (event.keyCode >= condition.From && event.keyCode <= condition.To) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n }\n };\n for (var name in AutoComplete.prototype.getEventsByType(params, type)) {\n var mapping = AutoComplete.merge({\n Operator: ConditionOperator.AND\n }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator;\n mapping.Conditions.forEach(eventIdentifier);\n if (match === true) {\n mapping.Callback.call(params, event);\n }\n }\n };\n AutoComplete.prototype.makeRequest = function (params, callback, callbackErr) {\n var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(queryParams);\n if (method.match(/^GET$/i)) {\n if (url.indexOf(\"?\") !== -1) {\n url += \"&\" + queryParamsStringify;\n }\n else {\n url += \"?\" + queryParamsStringify;\n }\n }\n request.open(method, url, true);\n for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {\n request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4 && request.status == 200) {\n params.$Cache[queryParams] = request.response;\n callback(request.response);\n }\n else if (request.status >= 400) {\n callbackErr();\n }\n };\n return request;\n };\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n }\n else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n }\n };\n AutoComplete.prototype.cache = function (params, callback, callbackErr) {\n var response = params._Cache(params._Pre());\n if (response === undefined) {\n var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);\n AutoComplete.prototype.ajax(params, request);\n }\n else {\n callback(response);\n }\n };\n AutoComplete.prototype.destroy = function (params) {\n for (var event in params.$Listeners) {\n params.Input.removeEventListener(event, params.$Listeners[event]);\n }\n params.DOMResults.parentNode.removeChild(params.DOMResults);\n };\n AutoComplete.merge = function () {\n var merge = {}, tmp;\n for (var i = 0; i < arguments.length; i++) {\n for (tmp in arguments[i]) {\n merge[tmp] = arguments[i][tmp];\n }\n }\n return merge;\n };\n AutoComplete.defaults = {\n Delay: 150,\n EmptyMessage: \"No result here\",\n Highlight: {\n getRegex: function (value) {\n return new RegExp(value, \"ig\");\n },\n transform: function (value) {\n return \"\" + value + \"\";\n }\n },\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n },\n Limit: 0,\n MinChars: 0,\n HttpMethod: \"GET\",\n QueryArg: \"q\",\n Url: null,\n KeyboardMappings: {\n \"Enter\": {\n Conditions: [{\n Is: 13,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n event.preventDefault();\n this._Select(liActive);\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n }\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_down\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_up\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n var first = this.DOMResults.querySelector(\"li:first-child:not(.locked)\"), last = this.DOMResults.querySelector(\"li:last-child:not(.locked)\"), active = this.DOMResults.querySelector(\"li.active\");\n if (active) {\n var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName(\"li\").length;\n if (position < 0) {\n position = lisCount - 1;\n }\n else if (position >= lisCount) {\n position = 0;\n }\n active.classList.remove(\"active\");\n active.parentElement.children.item(position).classList.add(\"active\");\n }\n else if (last && event.keyCode == 38) {\n last.classList.add(\"active\");\n }\n else if (first) {\n first.classList.add(\"active\");\n }\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYUP\n },\n \"AlphaNum\": {\n Conditions: [{\n Is: 13,\n Not: true\n }, {\n From: 35,\n To: 40,\n Not: true\n }],\n Callback: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\"), currentValue = this._Pre();\n if (currentValue !== \"\" && currentValue.length >= this._MinChars()) {\n if (!oldValue || currentValue != oldValue) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n AutoComplete.prototype.cache(this, function (response) {\n this._Render(this._Post(response));\n this._Open();\n }.bind(this), this._Error);\n }\n else {\n this._Close();\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYUP\n }\n },\n DOMResults: null,\n Request: null,\n Input: null,\n /**\n * Return the message when no result returns\n */\n _EmptyMessage: function () {\n var emptyMessage = \"\";\n if (this.Input.hasAttribute(\"data-autocomplete-empty-message\")) {\n emptyMessage = this.Input.getAttribute(\"data-autocomplete-empty-message\");\n }\n else if (this.EmptyMessage !== false) {\n emptyMessage = this.EmptyMessage;\n }\n else {\n emptyMessage = \"\";\n }\n return emptyMessage;\n },\n /**\n * Returns the maximum number of results\n */\n _Limit: function () {\n var limit = this.Input.getAttribute(\"data-autocomplete-limit\");\n if (isNaN(limit) || limit === null) {\n return this.Limit;\n }\n return parseInt(limit, 10);\n },\n /**\n * Returns the minimum number of characters entered before firing ajax\n */\n _MinChars: function () {\n var minchars = this.Input.getAttribute(\"data-autocomplete-minchars\");\n if (isNaN(minchars) || minchars === null) {\n return this.MinChars;\n }\n return parseInt(minchars, 10);\n },\n /**\n * Apply transformation on labels response\n */\n _Highlight: function (label) {\n return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);\n },\n /**\n * Returns the HHTP method to use\n */\n _HttpMethod: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-method\")) {\n return this.Input.getAttribute(\"data-autocomplete-method\");\n }\n return this.HttpMethod;\n },\n /**\n * Returns the query param to use\n */\n _QueryArg: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-param-name\")) {\n return this.Input.getAttribute(\"data-autocomplete-param-name\");\n }\n return this.QueryArg;\n },\n /**\n * Returns the URL to use for AJAX request\n */\n _Url: function () {\n if (this.Input.hasAttribute(\"data-autocomplete\")) {\n return this.Input.getAttribute(\"data-autocomplete\");\n }\n return this.Url;\n },\n /**\n * Manage the close\n */\n _Blur: function (now) {\n if (now === void 0) { now = false; }\n if (now) {\n this._Close();\n }\n else {\n var params = this;\n setTimeout(function () {\n params._Blur(true);\n }, 150);\n }\n },\n /**\n * Manage the cache\n */\n _Cache: function (value) {\n return this.$Cache[value];\n },\n /**\n * Manage the open\n */\n _Focus: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\");\n if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n },\n /**\n * Bind all results item if one result is opened\n */\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onclick = function () {\n params._Select(li);\n };\n }\n });\n },\n _Close: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n },\n /**\n * Position the results HTML element\n */\n _Position: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.setAttribute(\"style\", \"top:\" + (this.Input.offsetTop + this.Input.offsetHeight) + \"px;left:\" + this.Input.offsetLeft + \"px;width:\" + this.Input.clientWidth + \"px;\");\n },\n /**\n * Execute the render of results DOM element\n */\n _Render: function (response) {\n var ul;\n if (typeof response == \"string\") {\n ul = this._RenderRaw(response);\n }\n else {\n ul = this._RenderResponseItems(response);\n }\n if (this.DOMResults.hasChildNodes()) {\n this.DOMResults.removeChild(this.DOMResults.childNodes[0]);\n }\n this.DOMResults.appendChild(ul);\n },\n /**\n * ResponseItems[] rendering\n */\n _RenderResponseItems: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\"), limit = this._Limit();\n // Order\n if (limit < 0) {\n response = response.reverse();\n }\n else if (limit === 0) {\n limit = response.length;\n }\n for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) {\n li.innerHTML = response[item].Label;\n li.setAttribute(\"data-autocomplete-value\", response[item].Value);\n ul.appendChild(li);\n li = document.createElement(\"li\");\n }\n return ul;\n },\n /**\n * string response rendering (RAW HTML)\n */\n _RenderRaw: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\");\n if (response.length > 0) {\n this.DOMResults.innerHTML = response;\n }\n else {\n var emptyMessage = this._EmptyMessage();\n if (emptyMessage !== \"\") {\n li.innerHTML = emptyMessage;\n li.setAttribute(\"class\", \"locked\");\n ul.appendChild(li);\n }\n }\n return ul;\n },\n /**\n * Deal with request response\n */\n _Post: function (response) {\n try {\n var returnResponse = [];\n //JSON return\n var json = JSON.parse(response);\n if (Object.keys(json).length === 0) {\n return \"\";\n }\n if (Array.isArray(json)) {\n for (var i = 0; i < Object.keys(json).length; i++) {\n returnResponse[returnResponse.length] = { \"Value\": json[i], \"Label\": this._Highlight(json[i]) };\n }\n }\n else {\n for (var value in json) {\n returnResponse.push({\n \"Value\": value,\n \"Label\": this._Highlight(json[value])\n });\n }\n }\n return returnResponse;\n }\n catch (event) {\n //HTML return\n return response;\n }\n },\n /**\n * Return the autocomplete value to send (before request)\n */\n _Pre: function () {\n return this.Input.value;\n },\n /**\n * Choice one result item\n */\n _Select: function (item) {\n if (item.hasAttribute(\"data-autocomplete-value\")) {\n this.Input.value = item.getAttribute(\"data-autocomplete-value\");\n }\n else {\n this.Input.value = item.innerHTML;\n }\n this.Input.setAttribute(\"data-autocomplete-old-value\", this.Input.value);\n },\n /**\n * Handle HTTP error on the request\n */\n _Error: function () {\n },\n $AjaxTimer: null,\n $Cache: {},\n $Listeners: {}\n };\n return AutoComplete;\n}());\nmodule.exports = AutoComplete;\n\n},{}]},{},[1])(1)\n});\n"],"names":["window","searxng","w","d","Element","ElementPrototype","matches","matchesSelector","webkitMatchesSelector","msMatchesSelector","selector","node","this","nodes","parentNode","document","querySelectorAll","i","prototype","callbackSafe","callback","el","e","call","exception","console","log","on","obj","eventType","useCapture","addEventListener","target","srcElement","found","parentElement","ready","readyState","bind","http","method","url","data","Promise","resolve","reject","req","XMLHttpRequest","open","timeout","onload","status","response","responseType","Error","statusText","onerror","onabort","ontimeout","send","ex","loadStyle","src","path","settings","theme_static_path","id","replace","s","getElementById","createElement","setAttribute","body","appendChild","loadScript","hasAttribute","apply","insertBefore","newNode","referenceNode","insertAfter","nextSibling","classList","add","getEndpoint","className","getElementsByTagName","values","endsWith","split","endpoint","infinite_scroll_supported","IntersectionObserverEntry","let","onlyImages","contains","newLoadSpinner","loader","replaceChildrenWith","element","children","textContent","forEach","child","loadNextPage","form","querySelector","formData","FormData","getAttribute","then","nextPageDoc","DOMParser","parseFromString","articleList","paginationElement","remove","length","articleElement","catch","err","translations","error_loading_next_page","infinite_scroll","intersectionObserveOptions","rootMargin","observedSelector","observer","IntersectionObserver","entries","paginationEntry","isIntersecting","unobserve","observe","isElementInDetail","undefined","getResultElement","isImageResult","resultElement","highlightResult","preventDefault","selectImage","baseKeyBinding","Escape","key","fun","removeFocus","des","cat","c","copyURLToClipboard","h","toggleHelp","searchInputFocus","n","GoToNextPage","o","openResult","p","GoToPreviousPage","r","reloadPage","t","keyBindingLayouts","default","Object","assign","ArrowLeft","ArrowRight","vim","b","scrollPage","innerHeight","f","u","g","scrollPageTo","scrollHeight","v","k","j","y","keyBindings","hotkeys","hasOwnProperty","ctrlKey","altKey","shiftKey","metaKey","tagName","toLowerCase","which","noScroll","keepFocus","current","effectiveWhich","next","results","Array","from","top","documentElement","scrollTop","bot","clientHeight","etop","offsetTop","ebot","indexOf","removeAttribute","link","focus","scrollPageToSelected","location","reload","activeElement","blur","closeDetail","pageButtonClick","css_selector","button","click","sel","wtop","wheight","offset","previousElementSibling","scroll","scrollX","wbot","amount","scrollBy","position","nav","scrollTo","q","setSelectionRange","len","value","newTab","href","initHelpContent","divElement","categories","push","sorted","keys","sort","a","html","lastCategory","first","cj","innerHTML","helpPanel","toggle","currentUrlElement","navigator","clipboard","writeText","selectNext","selectPrevious","event","leaflet_target","dataset","leafletTarget","map_lon","parseFloat","mapLon","map_lat","mapLat","map_zoom","mapZoom","map_boundingbox","JSON","parse","mapBoundingbox","map_geojson","mapGeojson","map_bounds","southWest","L","latLng","northEast","latLngBounds","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","TileLayer","minZoom","maxZoom","attribution","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","setTimeout","fitBounds","setView","addLayer","baseLayers","OSM Mapnik","OSM Wikimedia","control","layers","addTo","geoJson","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","Source","enableAllEngines","disableAllEngines","engineToggles","toggleEngines","offsetParent","checked","enable","copyHashButton","hash","innerText","copiedText","img","style","display","error","btnLabelCollapsed","btnLabelNotCollapsed","targetElement","iframe_load","srctest","imgElement","thumbnailElement","detailElement","imgSrc","imgLoader","Image","qinput_id","qinput","isMobile","matchMedia","submitIfQuery","search","submit","createClearButton","cs","updateClearButton","ev","autocomplete_provider","autocomplete","AutoComplete","Url","EmptyMessage","no_item_found","HttpMethod","http_method","HttpHeaders","Content-type","X-Requested-With","MinChars","autocomplete_min","Delay","_Position","_Open","params","DOMResults","li","onmousedown","_Select","item","defaults","closest","_MinChars","Input","KeyboardMappings","KeyUpAndDown_up","Callback","liActive","Tab","Enter","Conditions","Is","Not","ajax","request","$AjaxTimer","clearTimeout","Request","abort","encodeURIComponent","_QueryArg","_Pre","search_on_category_select","_","selected","exports","module","define","amd","global","self","require","code","1","ConditionOperator","EventType","isArray","input","specificParams","merge","create","nodeName","match","$Listeners","_Blur","destroy","_Focus","keyup","KEYUP","keydown","KEYDOWN","getEventsByType","type","mappings","Event","eventIdentifier","condition","mapping","Operator","AND","OR","keyCode","From","To","name","makeRequest","callbackErr","propertyHttpHeaders","getOwnPropertyNames","_HttpMethod","_Url","queryParams","queryParamsStringify","setRequestHeader","onreadystatechange","$Cache","cache","_Cache","removeEventListener","removeChild","tmp","arguments","Highlight","getRegex","RegExp","transform","Limit","QueryArg","KeyUpAndDown_down","last","active","currentIndex","lisCount","AlphaNum","oldValue","currentValue","_Render","_Post","_Error","_Close","_EmptyMessage","emptyMessage","_Limit","limit","isNaN","parseInt","minchars","_Highlight","label","now","onclick","offsetHeight","offsetLeft","clientWidth","ul","_RenderRaw","_RenderResponseItems","hasChildNodes","childNodes","reverse","Math","min","abs","Label","Value","returnResponse","json"],"mappings":"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"} \ No newline at end of file From 326ade863423ccfe1c677a26170044788b09f380 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 07:57:41 +0000 Subject: [PATCH 04/23] [upd] pypi: Bump lxml from 5.2.2 to 5.3.0 Bumps [lxml](https://github.com/lxml/lxml) from 5.2.2 to 5.3.0. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-5.2.2...lxml-5.3.0) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1c9a7eacb..ab932f496 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ babel==2.16.0 flask-babel==4.0.0 flask==3.0.3 jinja2==3.1.4 -lxml==5.2.2 +lxml==5.3.0 pygments==2.18.0 python-dateutil==2.9.0.post0 pyyaml==6.0.2 From 29056b9ddd506e2f5c730ddc1db65b7079262639 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 07:57:45 +0000 Subject: [PATCH 05/23] [upd] pypi: Bump uvloop from 0.19.0 to 0.20.0 Bumps [uvloop](https://github.com/MagicStack/uvloop) from 0.19.0 to 0.20.0. - [Release notes](https://github.com/MagicStack/uvloop/releases) - [Commits](https://github.com/MagicStack/uvloop/compare/v0.19.0...v0.20.0) --- updated-dependencies: - dependency-name: uvloop dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ab932f496..4e6ed7ef8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ python-dateutil==2.9.0.post0 pyyaml==6.0.2 httpx[http2]==0.24.1 Brotli==1.1.0 -uvloop==0.19.0 +uvloop==0.20.0 httpx-socks[asyncio]==0.7.7 setproctitle==1.3.3 redis==5.0.8 From c0369ee48812451d40f331de80d388841a8bcf77 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Fri, 16 Aug 2024 07:09:46 +0000 Subject: [PATCH 06/23] [l10n] update translations from Weblate fff02429f - 2024-08-15 - return42 b13279293 - 2024-08-15 - return42 fc7c2faa4 - 2024-08-14 - 0ko <0ko@users.noreply.translate.codeberg.org> 6697dad47 - 2024-08-14 - return42 e9ccc396d - 2024-08-13 - Aeris1One f48553819 - 2024-08-12 - tentsbet d431b6c04 - 2024-08-11 - hugoalh b942a29c7 - 2024-08-11 - rafablog77 2f4d23a5a - 2024-08-09 - xyb a4f47be87 - 2024-08-10 - return42 --- searx/translations/af/LC_MESSAGES/messages.mo | Bin 20291 -> 20291 bytes searx/translations/ar/LC_MESSAGES/messages.mo | Bin 24884 -> 24884 bytes searx/translations/bg/LC_MESSAGES/messages.mo | Bin 26451 -> 26451 bytes searx/translations/bn/LC_MESSAGES/messages.mo | Bin 31450 -> 31450 bytes searx/translations/bo/LC_MESSAGES/messages.mo | Bin 10263 -> 10263 bytes searx/translations/ca/LC_MESSAGES/messages.mo | Bin 19315 -> 19391 bytes searx/translations/ca/LC_MESSAGES/messages.po | 18 +++--- searx/translations/cs/LC_MESSAGES/messages.mo | Bin 20937 -> 20937 bytes searx/translations/cy/LC_MESSAGES/messages.mo | Bin 19910 -> 19910 bytes searx/translations/da/LC_MESSAGES/messages.mo | Bin 19872 -> 19872 bytes searx/translations/de/LC_MESSAGES/messages.mo | Bin 21014 -> 21014 bytes searx/translations/dv/LC_MESSAGES/messages.mo | Bin 1462 -> 1462 bytes .../el_GR/LC_MESSAGES/messages.mo | Bin 28833 -> 28833 bytes searx/translations/en/LC_MESSAGES/messages.mo | Bin 445 -> 445 bytes searx/translations/eo/LC_MESSAGES/messages.mo | Bin 18116 -> 18116 bytes searx/translations/es/LC_MESSAGES/messages.mo | Bin 21260 -> 21260 bytes searx/translations/et/LC_MESSAGES/messages.mo | Bin 20438 -> 20438 bytes searx/translations/eu/LC_MESSAGES/messages.mo | Bin 20798 -> 20798 bytes .../fa_IR/LC_MESSAGES/messages.mo | Bin 23256 -> 23256 bytes searx/translations/fi/LC_MESSAGES/messages.mo | Bin 20311 -> 20311 bytes .../translations/fil/LC_MESSAGES/messages.mo | Bin 19469 -> 19469 bytes searx/translations/fr/LC_MESSAGES/messages.mo | Bin 21359 -> 21561 bytes searx/translations/fr/LC_MESSAGES/messages.po | 17 +++--- searx/translations/gl/LC_MESSAGES/messages.mo | Bin 20555 -> 20555 bytes searx/translations/he/LC_MESSAGES/messages.mo | Bin 19241 -> 20070 bytes searx/translations/he/LC_MESSAGES/messages.po | 57 +++++++++--------- searx/translations/hr/LC_MESSAGES/messages.mo | Bin 19883 -> 19883 bytes searx/translations/hu/LC_MESSAGES/messages.mo | Bin 21321 -> 21321 bytes searx/translations/ia/LC_MESSAGES/messages.mo | Bin 7383 -> 7383 bytes searx/translations/id/LC_MESSAGES/messages.mo | Bin 20405 -> 20414 bytes searx/translations/id/LC_MESSAGES/messages.po | 14 ++--- searx/translations/it/LC_MESSAGES/messages.mo | Bin 21004 -> 21004 bytes searx/translations/ja/LC_MESSAGES/messages.mo | Bin 22474 -> 22506 bytes searx/translations/ja/LC_MESSAGES/messages.po | 17 +++--- searx/translations/ko/LC_MESSAGES/messages.mo | Bin 21003 -> 21003 bytes searx/translations/lt/LC_MESSAGES/messages.mo | Bin 18798 -> 18798 bytes searx/translations/lv/LC_MESSAGES/messages.mo | Bin 11734 -> 11734 bytes searx/translations/ml/LC_MESSAGES/messages.mo | Bin 1032 -> 1032 bytes searx/translations/ms/LC_MESSAGES/messages.mo | Bin 16351 -> 16351 bytes .../nb_NO/LC_MESSAGES/messages.mo | Bin 18507 -> 18507 bytes searx/translations/nl/LC_MESSAGES/messages.mo | Bin 20616 -> 20616 bytes searx/translations/oc/LC_MESSAGES/messages.mo | Bin 12023 -> 12023 bytes searx/translations/pa/LC_MESSAGES/messages.mo | Bin 433 -> 433 bytes .../translations/pap/LC_MESSAGES/messages.mo | Bin 2124 -> 2124 bytes searx/translations/pl/LC_MESSAGES/messages.mo | Bin 21190 -> 21190 bytes searx/translations/pt/LC_MESSAGES/messages.mo | Bin 20948 -> 20948 bytes .../pt_BR/LC_MESSAGES/messages.mo | Bin 20982 -> 21028 bytes .../pt_BR/LC_MESSAGES/messages.po | 18 +++--- searx/translations/ro/LC_MESSAGES/messages.mo | Bin 21446 -> 21446 bytes searx/translations/ru/LC_MESSAGES/messages.mo | Bin 26951 -> 26973 bytes searx/translations/ru/LC_MESSAGES/messages.po | 30 ++++----- searx/translations/si/LC_MESSAGES/messages.mo | Bin 7218 -> 7218 bytes searx/translations/sk/LC_MESSAGES/messages.mo | Bin 20586 -> 20586 bytes searx/translations/sl/LC_MESSAGES/messages.mo | Bin 20007 -> 20007 bytes searx/translations/sr/LC_MESSAGES/messages.mo | Bin 23984 -> 23984 bytes searx/translations/sv/LC_MESSAGES/messages.mo | Bin 20408 -> 20408 bytes .../translations/szl/LC_MESSAGES/messages.mo | Bin 15331 -> 15331 bytes searx/translations/ta/LC_MESSAGES/messages.mo | Bin 23506 -> 23506 bytes searx/translations/te/LC_MESSAGES/messages.mo | Bin 19715 -> 19715 bytes searx/translations/th/LC_MESSAGES/messages.mo | Bin 28622 -> 28622 bytes searx/translations/tr/LC_MESSAGES/messages.mo | Bin 20912 -> 20912 bytes searx/translations/uk/LC_MESSAGES/messages.mo | Bin 26750 -> 26750 bytes searx/translations/vi/LC_MESSAGES/messages.mo | Bin 19915 -> 19915 bytes .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 19689 -> 19722 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 17 +++--- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 19071 -> 19460 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 32 +++++----- 67 files changed, 112 insertions(+), 108 deletions(-) diff --git a/searx/translations/af/LC_MESSAGES/messages.mo b/searx/translations/af/LC_MESSAGES/messages.mo index 0954ca3089227fb846322dbab670b0d8190a9f56..e55a24dfa812ad46de250e4519463170b4811f98 100644 GIT binary patch delta 16 YcmX>+kMZz4#tm79jAom&4R6Q-06XFaivR!s delta 16 YcmX>+kMZz4#tm79jHa8j4R6Q-06W|UiU0rr diff --git a/searx/translations/ar/LC_MESSAGES/messages.mo b/searx/translations/ar/LC_MESSAGES/messages.mo index c408826a3579d1100888efc7d028591de1cd1e95..f8335481a5461e72f1f72368f673b06a7176d8e2 100644 GIT binary patch delta 16 YcmdmTh;hpy#tj<`8O=6tG;G!f06_5u{r~^~ delta 16 YcmdmTh;hpy#tj<`8BI5DG;G!f06^;o{Qv*} diff --git a/searx/translations/bg/LC_MESSAGES/messages.mo b/searx/translations/bg/LC_MESSAGES/messages.mo index 1ac067bb853ebdc77982508e94797b49a4880f1c..a8887a403c5f51d2250bfe0cb704752521373286 100644 GIT binary patch delta 16 Xcmcb7j`8w2#ti`mjAoky4VcUUKhp*o delta 16 Xcmcb7j`8w2#ti`mjHa6d4VcUUKg|Xh diff --git a/searx/translations/bn/LC_MESSAGES/messages.mo b/searx/translations/bn/LC_MESSAGES/messages.mo index d89ded0c6c41a5e1c4e831cc965474abbb8c9d82..a4b1fdedebf763a9063a29c73fe9d8931d80929d 100644 GIT binary patch delta 16 XcmcchmGRbB#to^4jAonD3`;x#M$HE$ delta 16 XcmcchmGRbB#to^4jHa8@3`;x#M#l#v diff --git a/searx/translations/bo/LC_MESSAGES/messages.mo b/searx/translations/bo/LC_MESSAGES/messages.mo index f678a08ccc02b530b83500b2755165760fb09bf4..623aba70cc3a8f4d214ae260bff5c077661d3a9a 100644 GIT binary patch delta 14 VcmbOpFg;*HC_kgw<}m()5&$V81q%QG delta 14 VcmbOpFg;*HC_kg=<}m()5&$V21quKF diff --git a/searx/translations/ca/LC_MESSAGES/messages.mo b/searx/translations/ca/LC_MESSAGES/messages.mo index 8bd7d2a23bf07152e99def1f5ebe4c7d1ee7f07b..fc66b22a87070d8f4873fc6cb569011864315ce3 100644 GIT binary patch delta 4801 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 O_S%f4v0F}0IrAT0U*|;t diff --git a/searx/translations/ca/LC_MESSAGES/messages.po b/searx/translations/ca/LC_MESSAGES/messages.po index 1727a4ebe..df399fef1 100644 --- a/searx/translations/ca/LC_MESSAGES/messages.po +++ b/searx/translations/ca/LC_MESSAGES/messages.po @@ -19,18 +19,19 @@ # sserra , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-04-06 00:18+0000\n" -"Last-Translator: sserra \n" +"PO-Revision-Date: 2024-08-16 06:18+0000\n" +"Last-Translator: return42 \n" +"Language-Team: Catalan \n" "Language: ca\n" -"Language-Team: Catalan " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -81,7 +82,7 @@ msgstr "radio" #. CATEGORY_NAMES['TV'] #: searx/searxng.msg msgid "tv" -msgstr "" +msgstr "tv" #. CATEGORY_NAMES['IT'] #: searx/searxng.msg @@ -181,7 +182,7 @@ msgstr "Quant a" #. WEATHER_TERMS['AVERAGE TEMP.'] #: searx/searxng.msg msgid "Average temp." -msgstr "" +msgstr "Temperatura mitjana" #. WEATHER_TERMS['CLOUD COVER'] #: searx/searxng.msg @@ -1959,4 +1960,3 @@ msgstr "oculta el vídeo" #~ msgid "Hostname replace" #~ msgstr "Substitució del nom de l'amfitrió" - diff --git a/searx/translations/cs/LC_MESSAGES/messages.mo b/searx/translations/cs/LC_MESSAGES/messages.mo index 051793098a9e240c6bdf5e6701cb93199f01db27..45091a70d626afd95d94fcf3e461d8b182428688 100644 GIT binary patch delta 16 YcmX@PnDOLd#tpL#8O=7&G1OH606swmTL1t6 delta 16 YcmX@PnDOLd#tpL#8BI6OG1OH606segS^xk5 diff --git a/searx/translations/cy/LC_MESSAGES/messages.mo b/searx/translations/cy/LC_MESSAGES/messages.mo index 44c6c3930e13154419547c54cc509825353a2936..e6815bd6074ab25b7cc3f602f874e2337434e7fb 100644 GIT binary patch delta 16 YcmX>$oAKCe#trHQjAolP4CcuK05}2#$p8QV delta 16 YcmX>$oAKCe#trHQjHa744CcuK05|*v$N&HU diff --git a/searx/translations/da/LC_MESSAGES/messages.mo b/searx/translations/da/LC_MESSAGES/messages.mo index 6aec25a7368c849ee0b5cb258c7892cb128382b2..78e8d8f7646d773411931665140cddc7716e22c3 100644 GIT binary patch delta 16 XcmZ25n{mNx#tj(;jAolN4a{W$HZuj7 delta 16 XcmZ25n{mNx#tj(;jHa724a{W$HZ290 diff --git a/searx/translations/de/LC_MESSAGES/messages.mo b/searx/translations/de/LC_MESSAGES/messages.mo index ecbfa5290ba567d4ea76a08137f5d93ba926bc28..9df08b2cc7503db21b34d3c194638de8c4b656a6 100644 GIT binary patch delta 16 YcmbQXgmKyu#tk`!jAom24Oc1v05>WI6#xJL delta 16 YcmbQXgmKyu#tk`!jHa7&4Oc1v05>EC6aWAK diff --git a/searx/translations/dv/LC_MESSAGES/messages.mo b/searx/translations/dv/LC_MESSAGES/messages.mo index d6dafc16fe17b22d2fa09d74e27a190bfacf7f20..390f5fdc5dd46b690464b737dd3116189855109d 100644 GIT binary patch delta 14 VcmdnSy^VVVHw&ZLW*(MRi~u1}1Lpt$ delta 14 VcmdnSy^VVVHw&ZbW*(MRi~u1@1Lgn# diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.mo b/searx/translations/el_GR/LC_MESSAGES/messages.mo index 8a2386ac49b8ba5f442302126dec0ef32ddefbf0..446c865e52c4c9ffac8da66333c916327f87640d 100644 GIT binary patch delta 16 XcmZ4Zka6Kd#tjLEjAok?4IS(OJ&6WG delta 16 XcmZ4Zka6Kd#tjLEjHa6t4IS(OJ%a{9 diff --git a/searx/translations/en/LC_MESSAGES/messages.mo b/searx/translations/en/LC_MESSAGES/messages.mo index 14e2ea3c3a0e4240b429b10d7d1c470ebfa371f0..b9efce683ee3b454c5c6e06365759ec0c404db23 100644 GIT binary patch delta 13 UcmdnXyq9^y4n|fpJp(QV03e0~jQ{`u delta 13 UcmdnXyq9^y4n|f}Jp(QV03d+_i~s-t diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo index bfbf3c41d755516db877ebb880bdf45e9e050abb..db36dc4d75ecbe84737b82412181a0f68198ed68 100644 GIT binary patch delta 16 XcmX@o%Xp-haf6Z$quFLX4orO{WHQoi5 diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo index 92eb0a63087f3038c69027e28dd648ccafba7f90..33e203182370ead96feaf34df88648d2a98194c3 100644 GIT binary patch delta 16 XcmeBK#@MrraYMNwquJ&P!zqdYHlzjz delta 16 XcmeBK#@MrraYMNwqv_@f!zqdYHl79s diff --git a/searx/translations/et/LC_MESSAGES/messages.mo b/searx/translations/et/LC_MESSAGES/messages.mo index 56752e1f55858d22a79de60f2532f2f495f200e2..df8acdd95e7a9a60501214c35b4d87e75bb8696e 100644 GIT binary patch delta 16 XcmcaMpYhs!#tmhLjAon54ddkiJW5-Jfy*Fvtad diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo index 8ce92708ab51db35199e5707542f89467367de45..c347910350dcc634afc22c9b6ef2e6f5df2c9561 100644 GIT binary patch delta 5534 zcmYM%2~btn9mny5A|RWHh`YHW2nqYOrqoRgjd1g0eKINV)R*?rL@Mz zJ+Ww_F)FoUEx|;aPNteN+L|<-SZhPGPK}vZCym50GivSk$32rehR-?Yp5=f3=iH0= z=19nyV%t5W*`}jU70{m|*8@F*Fo1YblmuC^n%6G+WQ2CT_!Ad>`X5G|>&HHx8zrjtXct z=3o_S+yUzmETGG(0LIqHYO2!kIjOExJ8*l*bL}D-}F&+Pi3iw;p zg7;B7??&1*Uo@(JPh5_vxSRFO^AvjGpnm*^S=beeQ3Fdb9v7i@T!~t!-ufJ}2eSjm zV-qgLf1v`H*54gB3sql?+L#A}YN(>12?MCJ38Icg%5!9nl8B0L+Xa=L!8HWmB`T+8;1?SPA0ZXjq7)#xU+S${n1$Wx#`%nwMh7KM_ z^}mD@u^lz8FE?5l%(9L_1@JH`@EHTizam*eLofUhD#i7v1%8eSY$r~}M%0Au*3Ynz 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 i(%056UsGI`QxV%TyLfO?(wLT8M!wynrK#$ diff --git a/searx/translations/fr/LC_MESSAGES/messages.po b/searx/translations/fr/LC_MESSAGES/messages.po index 3b688222c..9ad940750 100644 --- a/searx/translations/fr/LC_MESSAGES/messages.po +++ b/searx/translations/fr/LC_MESSAGES/messages.po @@ -23,20 +23,22 @@ # return42 , 2024. # Vulcain , 2024. # wags07 , 2024. +# Aeris1One , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-07-30 08:18+0000\n" -"Last-Translator: wags07 \n" +"PO-Revision-Date: 2024-08-14 16:18+0000\n" +"Last-Translator: Aeris1One \n" +"Language-Team: French \n" "Language: fr\n" -"Language-Team: French " -"\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -535,6 +537,8 @@ msgstr "Plugin de noms d’hôtes" #: searx/plugins/hostnames.py:92 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" msgstr "" +"Réécrire les noms de domaines, supprimer des résultats ou les prioriser en " +"se basant sur les domaines" #: searx/plugins/oa_doi_rewrite.py:12 msgid "Open Access DOI rewrite" @@ -1976,4 +1980,3 @@ msgstr "cacher la vidéo" #~ msgid "Hostname replace" #~ msgstr "Remplacer les noms de domaine" - diff --git a/searx/translations/gl/LC_MESSAGES/messages.mo b/searx/translations/gl/LC_MESSAGES/messages.mo index 734169e4f5c896b18239d8ac3d4f0e4e1b57a15c..3fa7e52993f5b5b55a76618e1c090ad37dc55964 100644 GIT binary patch delta 16 YcmX@TfbsMK#tj*UjAolN4Ijw?06hB!rT_o{ delta 16 YcmX@TfbsMK#tj*UjHa724Ijw?06g^ur2qf` diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo index 81336f16cdb135849e24d24e4bedd1281e3a429b..168507ca3262d2461f64ec3f04a178ddb6e8ccad 100644 GIT binary patch delta 5499 zcmYM%3vg7`9mnyrkS8Po0!VlWS4jx3Kq3$^m6wq45U>V8QK&4*B0DA<%qAd|aSKsE ztp&0P5D5XoE6Ko=x)m)`b`bUsWkXzrWnmse}2PbMCqSbN>Hx z?+r9>@m#L=gwChN)EfR9>@lVvE=W}G|Nqse8WT%*2i}2uZ2w)1r{8Klg>m%HVQ2gl zlkh9d#~YZ8le!!85I%r0#)QmX8oHs``YI~$F&u-(u`Axfp4hdAyOBYdLw_1-{wnKQ z97g{I9E?X$@h>0?ntx#@ypHLtZ*I^~(hkx4;!xB=1^iH;1*iZUPz%+dGOb4i+=Gu} z6V_tFZN_xN2D}{)V@Lc5HUAT&7$%BcS>Iftp#^Rre@uKYWAd;+F2wn$1z$r|;!WE> zVLgMo|8J<0e}O9X_oxlWq!}{+lTZl`N5z|lAvSFuprMIAYbhqsuS8Ym8RU=Izz;37 z8&$$Xs0Cj~&41VW5vI_Oq7u4{TJWa59@E=hFS$4Mcev1#0o{;`x*;D`ss&arYT+fQ z4VR-fumO22Oc=F+12`TJqwc?E{T2)8|A>k+v5zrbaAqIs-@Xt7%EXI0n*gfRYj6Zs zqe^-Vwa^LcS?k|X8@ht3*mu@jsLCc%cU7Pps-K4K&s>Ox0uHqkM%f8@=rDdCYGM&; zUa7sl9JTRh?DZKl)eu}EZmzanDw*9+!6;%3hs0~g>HW)I6G*psBs6b0m0al=P zz7};9&G!0H)I!IR<20vG&&*X+0x|vFg>J)<^zTH)EkwojqAF8@NqYZR(a=M*9*5(0 z)Wi=^B|C*WyR&xu0%p;_g7;z?@0J42MOCs0wXq=TzL!u5)Y$$$>p|=s;zERmZhQ;9 zcmh@O9LE^GP3B=#pc2%AK~yOZqbm1D)b&3h&zosQRp>G*f$OOG-{GC;;XA$((=nun zrh$eg?8TvY7zg1woP!;>>oJ^%44GGOES|;(F?pc-yW?@(M1M6ZPI9_i$+4&kOh&Eu z5US#j>igUNx-k&Lz#6;@*P$MgKcF&u8+C@qQ31}PGCz-*co~&IN``yA59$aVRGeX` zd82V5F2EQ(nnC?X(|C)4>G&-wXE>h#K#Pv6yE2{X@2qfeJJnb#`NLFit=PUW(dKDJsA!jK^Q0GT(r@zXp~04r>!? z;RtrXqp17eu;Zb3Xehv+QSbK|JE0Ag@kP`IzCs21#`b?g1-gY=IF{XNehO+{Kh*Vs z7>`3x>*S!;8RuRPnMpLXz*Kj@%tYN#i249MiV9ecs=!KApmnH+su~k;4=VG6*4I$; z-$p$~3t&1o?=XNk|B@ z5Vi4jxCk3i5BV+Z!5O6TYG|XG!}&t8zPXD=0+ymSupG71Dm%Ur^+DN&TIdyg1V2K3 zA2PG}-s8QfI3J^aOa9e*4V7{12=^gRM!kLyV~EeQd6EWSPqP8DaX%_h)Orygr~d_x z!RdTgwLl0}ky=zn^{D#~*#22mMLt7)n3A|S3o}s_ugs?YNi^0opa3l>TD<21vG3lt%7ozT)hXc@yT4;?OuSb2b4&W3#j$1Hglw0Y2qo}_!d4&Nj{DJi( zCev@jLHJM9nRel0p$%uEzJQ~VV>P9yBio8PqCKel-$GUBFPMU-QR{q$4t^P;p;9DM zS2+N?V-6}nz8#-~UFiEzC9Ond-hc|+j0*fZQY>=}d*U~kj)}SMLp;Jd3Kc&zmWE1J zfLg$d4nBnnSdDXVJL)aCX8jiRJK;xEW#-=PW?qWA?|DqbYE;~MPjZ)1Iv zMje&$NK~mNV=tV6dg>QjS6jEBj^HqAp*K*Kcn{O?B&w2E?D&7I@%Ok#nTncs4<_jS zFKlm+4JyN8)Qo@Ry#uM_~gg!{oM1D;O#0(cnfdH^IqJ2078Q6C>gek5c5KG& z_&)OLo1%&QLc%Sm4IG^q;-5h@-n9cMliUlvt?Ag0>mzM{CTgLFQJF77W%v}fVk0VW z;6C^4SE3Tyhv1sZzZy+VW^cx9E}U8K$meMUPGN}_Ea~c`>eB20UkkZ z(1(ZcH>f!GvRWZdMshP-a4xo?-iGYy?(cvCq#rUhH2QL(1y#EDFab|uDz@4FRa9o* zqjnxY!=2w3weTR+#Y+MJ^ z_!4TNA5a^N<$!fx8fxAh)=_pmA2okA_Q%Jt6RyHo);G`5P=FUvJF7w6upL#hCfk40 z+G;(Edfh%p-G9>>H`Bepi?tsr?hw@5mTmhpu>JjikcKjQ0=3{TQNJ8EqbjfymDz9Y z^<$_7qnLyjQP;1cGP{NPesr4U9$5zJ`;m(p&qvK$G|NnAZ#>C>0xd`Fvcse;nWdV0e zB(vwMF$w;FQ{gLJHX_p2`=Tc{7_2P!MUM0>?U)oO_XmAuPGunItB5!Qu6K-|=lBD~ zzNf<}1Lt?0=l87$ntA@9f3d&BU$HX0WMFlNKymoHfv1z^msOTK(|_*xgLzK)gYyn)~fU%9V1+&N=HLRo34wzx7pE#pGxGJl{VXqJ@)*>c99 zk`4(uqn(`GyqvL-y20x_p4^Btw3Ek^86G|C;a^voF zn52o}Xl>+Z)>Thx`!ohvX*-dsqm7Y$BYz*qmWpy0_u9s-do#6(I>OaqJwIC_@8q8D z5L-{AeUaLGuE+G)!mSEiW7yFFnvKz#NY(h&vE3V3D(o<(3A@WEWg?B_=p0=^We*wU8 BL@WRR delta 4715 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, 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-08-02 07:09+0000\n" -"Last-Translator: return42 " -"\n" +"PO-Revision-Date: 2024-08-14 16:18+0000\n" +"Last-Translator: return42 \n" +"Language-Team: Hebrew \n" "Language: he\n" -"Language-Team: Hebrew " -"\n" -"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 " -"&& n % 10 == 0) ? 2 : 3));\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " +"n % 10 == 0) ? 2 : 3));\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -183,7 +183,7 @@ msgstr "אודות" #. WEATHER_TERMS['AVERAGE TEMP.'] #: searx/searxng.msg msgid "Average temp." -msgstr "טמפרטורה ממוצעת" +msgstr "טמפ' ממוצעת" #. WEATHER_TERMS['CLOUD COVER'] #: searx/searxng.msg @@ -193,12 +193,12 @@ msgstr "כיסוי עננים" #. WEATHER_TERMS['CONDITION'] #: searx/searxng.msg msgid "Condition" -msgstr "" +msgstr "תנאים" #. WEATHER_TERMS['CURRENT CONDITION'] #: searx/searxng.msg msgid "Current condition" -msgstr "" +msgstr "תנאים כרגע" #. WEATHER_TERMS['EVENING'] #: searx/engines/wttr.py:100 searx/searxng.msg @@ -218,12 +218,12 @@ msgstr "לחות" #. WEATHER_TERMS['MAX TEMP.'] #: searx/searxng.msg msgid "Max temp." -msgstr "טמפרטורה מקסימלית" +msgstr "טמפ' מקסימלית" #. WEATHER_TERMS['MIN TEMP.'] #: searx/searxng.msg msgid "Min temp." -msgstr "" +msgstr "טמפ' מינימלית" #. WEATHER_TERMS['MORNING'] #: searx/engines/wttr.py:100 searx/searxng.msg @@ -243,17 +243,17 @@ msgstr "צהריים" #. WEATHER_TERMS['PRESSURE'] #: searx/searxng.msg msgid "Pressure" -msgstr "" +msgstr "לחץ" #. WEATHER_TERMS['SUNRISE'] #: searx/searxng.msg msgid "Sunrise" -msgstr "" +msgstr "זריחה" #. WEATHER_TERMS['SUNSET'] #: searx/searxng.msg msgid "Sunset" -msgstr "" +msgstr "שקיעה" #. WEATHER_TERMS['TEMPERATURE'] #: searx/searxng.msg @@ -263,17 +263,17 @@ msgstr "טמפרטורה" #. WEATHER_TERMS['UV INDEX'] #: searx/searxng.msg msgid "UV index" -msgstr "" +msgstr "מדד קרינת UV" #. WEATHER_TERMS['VISIBILITY'] #: searx/searxng.msg msgid "Visibility" -msgstr "" +msgstr "נראות" #. WEATHER_TERMS['WIND'] #: searx/searxng.msg msgid "Wind" -msgstr "" +msgstr "רוח" #. SOCIAL_MEDIA_TERMS['SUBSCRIBERS'] #: searx/searxng.msg @@ -283,12 +283,12 @@ msgstr "מנויים" #. SOCIAL_MEDIA_TERMS['POSTS'] #: searx/searxng.msg msgid "posts" -msgstr "" +msgstr "פוסטים" #. SOCIAL_MEDIA_TERMS['ACTIVE USERS'] #: searx/searxng.msg msgid "active users" -msgstr "" +msgstr "משתמשים פעילים" #. SOCIAL_MEDIA_TERMS['COMMENTS'] #: searx/searxng.msg @@ -303,12 +303,12 @@ msgstr "משתמש" #. SOCIAL_MEDIA_TERMS['COMMUNITY'] #: searx/searxng.msg msgid "community" -msgstr "" +msgstr "קהילה" #. SOCIAL_MEDIA_TERMS['POINTS'] #: searx/searxng.msg msgid "points" -msgstr "" +msgstr "נקודות" #. SOCIAL_MEDIA_TERMS['TITLE'] #: searx/searxng.msg @@ -333,7 +333,7 @@ msgstr "סגור" #. SOCIAL_MEDIA_TERMS['THREAD ANSWERED'] #: searx/engines/discourse.py:160 searx/searxng.msg msgid "answered" -msgstr "" +msgstr "נענו" #: searx/webapp.py:330 msgid "No item found" @@ -513,7 +513,7 @@ msgstr "איכות קובץ" #: searx/plugins/calculator.py:12 msgid "Calculate mathematical expressions via the search bar" -msgstr "" +msgstr "חשב ביטויים מתמטיים באמצעות שורת החיפוש" #: searx/plugins/hash_plugin.py:10 msgid "Converts strings to different hash digests." @@ -557,7 +557,7 @@ msgstr "" #: searx/plugins/self_info.py:28 msgid "Your IP is: " -msgstr "" +msgstr "ה-IP שלך הוא: " #: searx/plugins/self_info.py:31 msgid "Your user-agent is: " @@ -603,7 +603,7 @@ msgstr "הסר ארגומנטי איתור מתוך URL מוחזר" #: searx/plugins/unit_converter.py:29 msgid "Convert between units" -msgstr "" +msgstr "המר בין יחידות" #: searx/templates/simple/404.html:4 msgid "Page not found" @@ -670,7 +670,7 @@ msgstr "אורך" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "צפיות" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1917,4 +1917,3 @@ msgstr "הסתר וידאו" #~ msgid "Hostname replace" #~ msgstr "החלפת Hostname" - diff --git a/searx/translations/hr/LC_MESSAGES/messages.mo b/searx/translations/hr/LC_MESSAGES/messages.mo index 3816978783a2d508b1222290a7dccba5eaef03df..c611320282ad5fc7952225e59709de377164146a 100644 GIT binary patch delta 16 YcmZ2In{oAQ#tlF88O=8T)ZZiv06(n delta 16 YcmX@PjPc|$#to5%jHa8T4BsmP06ez_p8x;= diff --git a/searx/translations/ia/LC_MESSAGES/messages.mo b/searx/translations/ia/LC_MESSAGES/messages.mo index dd3a80c455541bae060f58c8abd76a23d21d1bf1..c8f34f93391a9ba1fc27b58e1de78abc4e2bcac0 100644 GIT binary patch delta 14 Vcmca^dEIh@ln|rYW@({4TmUMB1lj-q delta 14 Vcmca^dEIh@ln|roW@({4TmUM51la%p diff --git a/searx/translations/id/LC_MESSAGES/messages.mo b/searx/translations/id/LC_MESSAGES/messages.mo index 41dd45322b16f039e198c86cf699d57fb2e7ef9f..fc96a5077ce80cc311731047b64b05c33dcbc9e1 100644 GIT binary patch delta 2701 zcmXxldrX&A9LMqVLlF1@hH)F00&Hl2j%y@{fC3iCWr>&){y) zyCq)dyvLYbX~y^&V;;{iCJG&lz+LE%Js6Muwm)J$i(baZZGQ?w>Hmd#KQPmn8jQ!; z*oL*Z4K?p~nZ_|U(YV0CEd15};FDzxP2)wqxEPgKH7b!tjKogluX&AsG~p=>#BcE) zyofoNlkLv85rgT!j=tEF?HCh4qnCl(@F;4cF^s_pRA8SwjA2nG1{I(JHNm~8$~|bU z#|Zk3_z-TvJ@`GUGF!!61y&S z=dM_PLj{_~Nc78d6N$qp`l+adiZOumXKH9@Wvj6U8&MM;wSJ6C>7PJl9bW-57C(V8_!Md(FQcQ=zn_Ly+-rRwJL!LjIs+vvOB39OD(xB!$Mu+s zTTzubfO_r_ZpS02K&6~mosk-h!#dQKZz-VuNi<$%K-b~8^)u^9)SeBa0!*M*dKH`T zA0&opDs&Tj6Lnj9QO|vXD)}&~a$~3kP1ye5g^v4zPmvoS996PgQ7cTsWXwaYWG#ka zE2?tOp;oj5^?Wz#792w*Jc@jS%z4!B5lh_nQc&|{IW$z7C8&w3unZgUcI-y&=?E&Z zi>R%-jGABy`L>vUkwuwoPAXU2w4+wsjXI2nFcDASjY^{4bFR`*fO*C4-sPYI<)ikx z7&SpPK8AIehTqunfD-q;Xe?zs-uBm_O5cpylFfJvcA*yh4pJ${d_ZFc17D&qp2Bz> z#V-8Qj&EajWxgGgaVO5hL0pADVG|ZDb62__wZfCAYwfwq{a)1KEA%(v0^R@MyE(}W ztL1Ddb~j{y-&`R_3la7gf13)M2Yd&C_IU!F2lV7)pGz zk469<#z6cCmBA5s4a{fv)bOu0M$H1g>%owx>%V*@5GcT4{)#?pTg`G%QZ z)clj^Xz#Dln2FvB_t4BnB@}J@b8J5a^rgA~usWy-o<}A40tVq8)O$VX#Xjqx9UnqHKa7fZ4t3qf zHKA5GjS3i4rFG8v08n9KF2vf=bYzx&i{Y@=bY=|-Jbos zJw2t7&KZv}ug^3l%oy`TwlRs=h7<55yal^34ZCf>-}((kGJekXM{qp-E2!^1ImXmt zBF16^F2hZzdB4svj=7b_cMQbf&-TG6^4EmSazFH;5-Ud~QiloXAb-tk{G$m^U<7`J zH8_N`aYn8?-$NKpe>;X^SFU4BIE?@UlQ4*yXb_We7!`OFS(J(MxdBR16D&qmuGYE& zC(y6M2e1V@@D!>ttzF_VF0REbM54%eY7(T1AfWz@=dq5|(h zmGm9d$`7Ct{{of3X;i?AsDRf|3-sjOl>MinfT^eni>#%nK$Unm-iIpT(>NcuVG{PE z-n(S|1r_KjCg8uQMB?+^3Qj^LRDj`}KT}CVD_e@SScjT0X#EIF=pRC5ZVKGW#GqE1 zf%@KyMK~LkXfrB-EvUo10~L4xwa{UVB)<8{4qQc@g&TM?P@$W7462`sdhSI{Fw6Gy zQ3;fwR$6Ucg?g_6bq4&Hj8CHGdj%bx{tg;ialrZ>w$uLrbp{GqmL^z&D(y0i$9nW) zE2rsE8A*Gg67S<8suNw-i(V$uwSNK-b}*^%LtcOk}(d6<`>((#zO@ zeOZZm2{?Wp%VQMaHMHQxa88)VL)o{wALem4;{pVy(G(&V8gF2f33iFaWqYES!7 zdpU&Kstc$IMv&hY^B1xPGmVqV)i#Z&6?dWz<6g|bL#V`tQQtY2X(&M2J?`GkKn2Q0 z?R5caf^uxb;DiA}9=SDcNi+yc~Lt47VU#=0J}=r`hc z;+vf`!tq^!-0`Q7pA6&RYCMP!Vp64B`e!hO{)@xqcovmlJ4WGlRG?0b#DI0b9Y2D4|2Qh% zAnLjgIW)AwE2w}Wi{0y(h`K>g|tiei`b$T2x{iPzm@^32a84^5-!IccCiPjr#5H zL2d2lsQ2?u*~VGaH9U{Hem~+A3|-<*=*2qv3sH%61vkd`retRM(zAW}zC3RhepF diff --git a/searx/translations/id/LC_MESSAGES/messages.po b/searx/translations/id/LC_MESSAGES/messages.po index 23232df78..9644854de 100644 --- a/searx/translations/id/LC_MESSAGES/messages.po +++ b/searx/translations/id/LC_MESSAGES/messages.po @@ -17,15 +17,16 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-08-05 15:59+0000\n" -"Last-Translator: drat \n" +"PO-Revision-Date: 2024-08-16 06:18+0000\n" +"Last-Translator: return42 \n" +"Language-Team: Indonesian \n" "Language: id\n" -"Language-Team: Indonesian " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -96,7 +97,7 @@ msgstr "peta" #. CATEGORY_NAMES['ONIONS'] #: searx/searxng.msg msgid "onions" -msgstr "onion" +msgstr "onions" #. CATEGORY_NAMES['SCIENCE'] #: searx/searxng.msg @@ -1834,4 +1835,3 @@ msgstr "sembunyikan video" #~ msgid "Hostname replace" #~ msgstr "Pengubah nama host" - diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo index 0c09142d2b8a119fe115dbe71c174e0a9dd0ae3e..6ce56f9f557f0610eb1639b90eaa500101acbabe 100644 GIT binary patch delta 16 XcmeBK!q~HfaYL>lquJ&>!+8n-HU9

lqv_^6!+8n-HTebi diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo index c553f8ffdcdefbee4a4a29ce3aae34be2d14dbdf..0ffc392dbdf9e8f1290b3111cda54974d151cb18 100644 GIT binary patch delta 5325 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 delta 5295 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 LXfC_Iq0|2W{PiLY diff --git a/searx/translations/ja/LC_MESSAGES/messages.po b/searx/translations/ja/LC_MESSAGES/messages.po index c7bb4a854..ed2976fbd 100644 --- a/searx/translations/ja/LC_MESSAGES/messages.po +++ b/searx/translations/ja/LC_MESSAGES/messages.po @@ -23,19 +23,19 @@ # return42 , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-06-22 11:18+0000\n" -"Last-Translator: tentsbet " -"\n" +"PO-Revision-Date: 2024-08-12 14:14+0000\n" +"Last-Translator: tentsbet \n" +"Language-Team: Japanese \n" "Language: ja\n" -"Language-Team: Japanese " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -660,7 +660,7 @@ msgstr "長さ" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "閲覧数" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1884,4 +1884,3 @@ msgstr "動画を隠す" #~ msgid "Hostname replace" #~ msgstr "ホストネーム入れ替え" - diff --git a/searx/translations/ko/LC_MESSAGES/messages.mo b/searx/translations/ko/LC_MESSAGES/messages.mo index 1423483d911fce74c1136922a5ed0c163846bb33..c16a9231a2eb316310f1c9537da100c09e203f12 100644 GIT binary patch delta 16 XcmeBP!q~lpaYLLTquJ(o!!-&3H9H07 delta 16 XcmeBP!q~lpaYLLTqv_^&!!-&3H8ln0 diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo index 03da14a9656aef793e11fdb6c5c7dd48435dad7f..42249972ef07be3537adce9433d151efeaca2fec 100644 GIT binary patch delta 16 YcmaDiiSgYe#tmO}7|k|+)2WaF07aAsbN~PV delta 16 YcmaDiiSgYe#tmO}7)>{S)2WaF07Z@ma{vGU diff --git a/searx/translations/lv/LC_MESSAGES/messages.mo b/searx/translations/lv/LC_MESSAGES/messages.mo index c50f5b9adbf1fc063d4a77e01a994b179d4d055a..74d8b0f9e200af83e9ed51c6ac620ded6a0dcc32 100644 GIT binary patch delta 14 VcmcZ>eJy%JybPn+<^-8CK>#rX1$zJh delta 14 VcmcZ>eJy%JybPo1<^-8CK>#rR1$qDg diff --git a/searx/translations/ml/LC_MESSAGES/messages.mo b/searx/translations/ml/LC_MESSAGES/messages.mo index 7cb8506809f7ae4d9d4f81d8d5a2afa32c1d2fe4..33dc04c9e6fb23811ccdac996fbe98835f308aab 100644 GIT binary patch delta 14 VcmeC+=-}A!nTgSC^A{!&MgS(_1iJtL delta 14 VcmeC+=-}A!nTgSK^A{!&MgS(<1iAnK diff --git a/searx/translations/ms/LC_MESSAGES/messages.mo b/searx/translations/ms/LC_MESSAGES/messages.mo index 255294fe9485a097c1f85ced2e47f540746c1342..2c51efb0e3688e2430c4cd6440c474cbed4ccd16 100644 GIT binary patch delta 14 Vcmca#f4_di1r0{C%@;NJ!~r_R25kTU delta 14 Vcmca#f4_di1r0{i%@;NJ!~r_L25bNT diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.mo b/searx/translations/nb_NO/LC_MESSAGES/messages.mo index 6eee63534a412e463aa7465442fe491d370425e6..fd47a5724e42d4cbb797df049135ca6818f8f769 100644 GIT binary patch delta 16 XcmX>-f${VN#tkgGjAolzb={-^G|&YX delta 16 XcmX>-f${VN#tkgGjHa7eb={-^G|B}Q diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo index c8f03813d582b3a0c0d439dc20a7ccd4c8a66fae..071c3cbc35faac97f81fcd64924aca0bb4811988 100644 GIT binary patch delta 16 XcmeBJ$k?%vaYMEtquJ&hLm7DhG#dqD delta 16 XcmeBJ$k?%vaYMEtqv_@xLm7DhG!+G6 diff --git a/searx/translations/oc/LC_MESSAGES/messages.mo b/searx/translations/oc/LC_MESSAGES/messages.mo index 50918b910b29de15196742ec1f30856cb317ab01..16e197058b9548e65c669b4840e8b9b92e2cccda 100644 GIT binary patch delta 14 Vcmew!`#pBUJ6T4v&F^J71OYn$26F%a delta 14 Vcmew!`#pBUJ6T54&F^J71OYnw266xZ diff --git a/searx/translations/pa/LC_MESSAGES/messages.mo b/searx/translations/pa/LC_MESSAGES/messages.mo index d14948cf12b9128c90c7843596a12d1109558d91..a2ebed4ac681372f9b23b601a183be0af82acddb 100644 GIT binary patch delta 13 UcmdnUypegs8b($#Jp(QV03QYeX#fBK delta 13 UcmdnUypegs8b(%AJp(QV03QJZXaE2J diff --git a/searx/translations/pap/LC_MESSAGES/messages.mo b/searx/translations/pap/LC_MESSAGES/messages.mo index d72d8fb0536bdc25e2e9d0e7155822e50e607707..7e7fc325cea9f19c57805673f7a51a03ddc545b6 100644 GIT binary patch delta 14 VcmX>ja7JJQ8yln9W_C7LCIBN41G4}C delta 14 VcmX>ja7JJQ8ylnPW_C7LCIBM}1F`@B diff --git a/searx/translations/pl/LC_MESSAGES/messages.mo b/searx/translations/pl/LC_MESSAGES/messages.mo index 17c5e73a5e191a4dd80d88c71eadd122d983bcbf..d9fbeb9234471023d56c3328c965d77b04c7c190 100644 GIT binary patch delta 16 YcmX@Ml=0Y7#tl41jAom8jdm&k05|{z$p8QV delta 16 YcmX@Ml=0Y7#tl41jHa7;jdm&k05|#t$N&HU diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo index ca9095de6fcab3db58f53826dbe3147eb21c2892..6feba5f4c415e926559f49a0ddb5a448ec48efe4 100644 GIT binary patch delta 16 XcmcbznDNSD#tmVHjAom|4QmwuJf8+P delta 16 XcmcbznDNSD#tmVHjHa8z4QmwuJedYI diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.mo b/searx/translations/pt_BR/LC_MESSAGES/messages.mo index b4e3db049ce967dad9bb8791f621f4ec488fff98..1a99237171cbd525259aa20c2cba1fd64a6aad62 100644 GIT binary patch delta 5377 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 delta 5314 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 diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.po b/searx/translations/pt_BR/LC_MESSAGES/messages.po index 28fe569c8..6613f779e 100644 --- a/searx/translations/pt_BR/LC_MESSAGES/messages.po +++ b/searx/translations/pt_BR/LC_MESSAGES/messages.po @@ -29,20 +29,23 @@ # nouoneq , 2024. # Pyrbor , 2024. # rodgui , 2024. +# rafablog77 , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-07-03 17:18+0000\n" -"Last-Translator: rodgui \n" +"PO-Revision-Date: 2024-08-12 04:00+0000\n" +"Last-Translator: rafablog77 " +"\n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" -"Language-Team: Portuguese (Brazil) " -"\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -686,7 +689,7 @@ msgstr "Duração" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "Visualizações" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1983,4 +1986,3 @@ msgstr "ocultar vídeo" #~ msgid "Hostname replace" #~ msgstr "Substituir host" - diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo index 63008a3239768ccc26c1f7befcc136420ec93e8b..c1cdf6ea36850072e6e5f47e71b07bfd1eff7718 100644 GIT binary patch delta 16 YcmX@MoblLl#trif8O=7&H&j;w06udDUjP6A delta 16 YcmX@MoblLl#trif8BI6OH&j;w06uL7UH||9 diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo index ee9685ec3573395aca4a3fd391c6210ea0de5a45..c77c92e134f7ed4ef15f3f8668c869b065b65386 100644 GIT binary patch delta 5477 zcmYM%33QHE9>?(;S&)s8&6-yPkwrukf)ovj#8OhBwjjjPN~D#jHkLPHJBHR0qQ_9j zI*cMCwTy$7c49{9yl?C1w5F(zab~8SR@0stHD$iPJon5vz1a_vLh)QS#reXOTtA|9MoLB2+*3ixf2QWpv?dsE#{O9rxSMkD^v|5=-$cs$V=8L+^(^ zsQwwKg*=1ZaSUqQE7m2rka`ueQ*P5pLAT%6I3}awWuX$tLycR5+TktT*nf4{K?Cm&vj??x=a5I(G@u{e zMGd@MocH~X;$HSl|VTv(5trYMg>}hn)nwOf;Fgqdr+SrLM3_(HPI>5M3?O64XF56ZQYB_ z_56QIL2tajF>0czYVR6=E_1Q(-TK+915 zH=_KIA78Uq1YNfX^2LFzFOaq_dmlN!P8utz!z-y@f z<-Fz;XF2M{wjR}f0QDZI!vqXYXaAKzzjWtoc&YUWPN)5I)W89Kot0(dD(Vw)IevjT zIJKYi6zxOp+!>6-cQG4pU?_Ivt)n+#qII5|!e|-}pawRg&g>^tfM)%j!0nLTHob5o z7Gk^)PYd!Zf{7gHeA}g=j;aiGSISWkV4j14ZjKeY9G#yC=YNuA9?!Ye8xP#UY zFoybFbZaY{Z}K$9=9>r7E4eQSE06YKWc^b$OShIs2zE1+go!EN}ww$ zUJ^d-!#`AL;-jZ=ePakV@F?PW;Zd4*pKo?e{65fY8 z`}fcn!$&$sTRWn5%r%nz*96%#Xo3lN3TI;_b{ysG$ad6G)S*_~fVym-p~gSJZrF@x zS%Kq`SBDvm>c0|$u@<%U`*0?{@1~%Ybbr=4qg+(LImj-W#n=}wU@ZQKx*O4BIA=`8 zp|}^-{#VqIK0?Kf7;6kKMbi(D;d~@l(>~ux#66dSGF)rjfeLUGHSuMv#>ZHME1q+n zg0E0J(ui7VOZK}34#w@6i!Qu_VdzufEUYbR=i-n{>Nc4a{y@V-)CyzAJ7=1Wq10c- zO<0AI7&gJ#%6JT~f=cK^jKu56E5`f-pJ2lC`keDmnCRT@r?8k0 zhGQ1Kjj!Xk_#rNv!wX}j_4)pN{pbr7F*-nsLOR8bwpQCmoRC%GcF&s1I4z! z1hrFdVAKEqk5J%UU{2t9{5LAYQ!||B`XW|Pe~2v3EMOJ|yn^ZYB`(IOna(BNh&`zv zMaB6Pb(D8893R;BfLXl1+S3p=%juAWTJb>C%0}DvX{Z&Jq9(3H1=@_f3d}+K`FE&^ zenw3k%z4Tv?1Hg17u&RT>-tsDqDULi5BH%)9zyNyX>5zvP!YaFW$?BA{2{7;tJ%(( zbw+*O&DzI07`f(Vl&#O3&6QKfMKmapYSi<#!*+ZJHK7NU;7#lIw!P&X=N5&d`emTT z55-Pch%vYXHSsU4r>&pNaXTHqwH-s|I(wOn2@J?W?R}}OFGnSM82#`f>Tnw{8oxs& z(sG`&1K}7zy$g=QcL-P_jr5(pxV-*_gg5&7Z(gMdcOA1q+K7l$R7$lr0?K>OH^AmC29#UcHa|`1Gy6l{&JupLet8e0@q* z|InZn-u0dno;q)}cSB9t*w{GlMipJ2GcM1&-YU--&jtPTR#Q5SRh|o;6E&{PPBpj3 z#)c`3%e$IBE9k)|^=nnM5p delta 5464 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 it=s8+*7#1, 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-06-18 21:18+0000\n" -"Last-Translator: Xvnov \n" +"PO-Revision-Date: 2024-08-14 16:18+0000\n" +"Last-Translator: 0ko <0ko@users.noreply.translate.codeberg.org>\n" +"Language-Team: Russian \n" "Language: ru\n" -"Language-Team: Russian " -"\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) " -"|| (n%100>=11 && n%100<=14)? 2 : 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (" +"n%100>=11 && n%100<=14)? 2 : 3);\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -327,12 +328,12 @@ msgstr "автор" #. SOCIAL_MEDIA_TERMS['THREAD OPEN'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "open" -msgstr "Открыть" +msgstr "открыт" #. SOCIAL_MEDIA_TERMS['THREAD CLOSED'] #: searx/engines/discourse.py:149 searx/searxng.msg msgid "closed" -msgstr "Закрыто" +msgstr "закрыт" #. SOCIAL_MEDIA_TERMS['THREAD ANSWERED'] #: searx/engines/discourse.py:160 searx/searxng.msg @@ -529,13 +530,13 @@ msgstr "контрольная сумма" #: searx/plugins/hostnames.py:91 msgid "Hostnames plugin" -msgstr "Плагин имени хостов" +msgstr "Плагин имён хостов" #: searx/plugins/hostnames.py:92 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" msgstr "" -"Перепишите имена хостов, удалите результаты или расставьте приоритеты в " -"зависимости от имени хоста" +"Переписывать имена хостов, удалять и приоритизировать результаты в " +"зависимости от имён хостов" #: searx/plugins/oa_doi_rewrite.py:12 msgid "Open Access DOI rewrite" @@ -677,7 +678,7 @@ msgstr "Длительность" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "Просмотры" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1961,4 +1962,3 @@ msgstr "скрыть видео" #~ msgid "Hostname replace" #~ msgstr "Замена имени сайта" - diff --git a/searx/translations/si/LC_MESSAGES/messages.mo b/searx/translations/si/LC_MESSAGES/messages.mo index 273018ee0c3b06f8fed0051c89608d046e518e95..76bd8131c0229f374c1b6e0be43600b81bfe8f9a 100644 GIT binary patch delta 14 VcmdmFvB_eC93P|EW_dngJ^&?T1L*(& delta 14 VcmdmFvB_eC93P|UW_dngJ^&?N1Lyz% diff --git a/searx/translations/sk/LC_MESSAGES/messages.mo b/searx/translations/sk/LC_MESSAGES/messages.mo index 55beefaa0a45310547be26f0ea3afc44fb91d3c5..6926727442aa03fd8c62798bd27ce2df1cb01a91 100644 GIT binary patch delta 16 XcmaF0fbrD=#tmTxjAom|4TKc{J?#bY delta 16 XcmaF0fbrD=#tmTxjHa8z4TKc{J?91R diff --git a/searx/translations/sl/LC_MESSAGES/messages.mo b/searx/translations/sl/LC_MESSAGES/messages.mo index 40a364411d3903e1b10fa8233a69606c35c40051..34528e601c4b67ff97341d6398d903750ccc64df 100644 GIT binary patch delta 16 YcmZ2JhjIBF#tj_?jAolV4d%%L06B*SPXGV_ delta 16 YcmZ2JhjIBF#tj_?jHa7A4d%%L06BpMP5=M^ diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo index e8ef3b414a51e556cb82724b46e8786fb10a5330..e9d4ddf5f7ddbb1d7c8a21938d4a07c338185393 100644 GIT binary patch delta 16 Wcmdn6n{fjWHR&>%ZEn`pH2?rSlLjvU delta 16 Wcmdn6n{fjWHR&>%Zf@4qH2?rSjRr0N diff --git a/searx/translations/sv/LC_MESSAGES/messages.mo b/searx/translations/sv/LC_MESSAGES/messages.mo index dcb879efcf866c6809b4ad242a427196db382766..0f4f717ffd426140de617bfab1b7183aa96a5a1c 100644 GIT binary patch delta 16 XcmdlnpK-^0#tr#~jAok)3_aukIp78I delta 16 XcmdlnpK-^0#tr#~jHa6l3_aukIobvB diff --git a/searx/translations/szl/LC_MESSAGES/messages.mo b/searx/translations/szl/LC_MESSAGES/messages.mo index a6d6b7bb14c2493138c8b9f89164912d34ee2d6b..319e9efcb0c9117e88c4c42a32f18d677936fddf 100644 GIT binary patch delta 14 VcmaD{{<`$KBaR4^-1`_}P diff --git a/searx/translations/ta/LC_MESSAGES/messages.mo b/searx/translations/ta/LC_MESSAGES/messages.mo index 4067e3df8e653502fb5cbe5e924c0dad34ec5b88..47ef18740853bdcb233716dfca070b6ec2eda3a8 100644 GIT binary patch delta 16 Xcmcb#o$=Ck#tp&BjAoldl0VMzhWD0VM$^sj7i07Ux+_y7O^ delta 16 YcmX?ipYhy%#tk!c7)>|N)G>7i07Uf$_W%F@ diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo index 19ea4f1aefbf6538435f7e581c70323765d84367..db439c18ede931a40ee86c2ef5c98d1b78b336e5 100644 GIT binary patch delta 16 Wcmdn6m~jITWf(G=ZO$}wR{#Jx2?gB% delta 16 Wcmdn6m~jITWf(G=Zq77xR{#Jx0|ndw diff --git a/searx/translations/uk/LC_MESSAGES/messages.mo b/searx/translations/uk/LC_MESSAGES/messages.mo index 87cc6e27bb14e926d1cadb5fb667ccb1cb40564c..ef8d2c93c48616bf38b614319604eebdf32164ab 100644 GIT binary patch delta 16 Xcmex&f$`r3#tq&^jAomCjEu|xMH~j4 delta 16 Xcmex&f$`r3#tq&^jHa7?jEu|xMHU8| diff --git a/searx/translations/vi/LC_MESSAGES/messages.mo b/searx/translations/vi/LC_MESSAGES/messages.mo index dbc813e468c4e9c6a855f583f994b1853dbaa38f..3db429b1b24b62084c5a3b4980dd2511bb1b1b17 100644 GIT binary patch delta 16 YcmX>-oALB)#tnb87|k~S)jFpH07HidrT_o{ delta 16 YcmX>-oALB)#tnb87)>|-)jFpH07HQXr2qf` diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index 8af128c341ef618257349e606191e66d1d571c71..8ecd22d0106323a65db8d41c3556c2778a5ef919 100644 GIT binary patch delta 5292 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 diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po index f8d364a74..c7d1e24a5 100644 --- a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -32,20 +32,22 @@ # lcaopcn , 2024. # chjtxwd , 2024. # Jeex , 2024. +# xyb , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-07-05 07:09+0000\n" -"Last-Translator: Jeex \n" +"PO-Revision-Date: 2024-08-10 15:18+0000\n" +"Last-Translator: xyb \n" +"Language-Team: Chinese (Simplified) \n" "Language: zh_Hans_CN\n" -"Language-Team: Chinese (Simplified) " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -670,7 +672,7 @@ msgstr "长度" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "查看次数" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1890,4 +1892,3 @@ msgstr "隐藏视频" #~ msgid "Hostname replace" #~ msgstr "主机名替换" - diff --git a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 14bcf2a9674ff644d9cd5ae33a69bb17f94c0243..899ec38f19b1242965d4ab8b32ebad1593b69a33 100644 GIT binary patch delta 5739 zcmYk<4OG?j9mnzi6-DJi6H!uIUbPZM)TuvJ6!%R;<|2k_>zL@DgS?j=yuZSSm7^bw19=uDBmHpv7!OO?(o^;D>kvcI_Wds2|=;oP6Wf=OEc5`{!61}B6U%t9qFA9WZH;w`uWdtwz1!dfH;=O8BGZ&3;V z1GV5))XuwcY??0y)xQre#o@S}^_`6r`ruCn@E@jN1m1%hI1l6S0o0CHp%z+WZb0_n zY{iMVAD3VoDuL+(!{f41aV~0O9`vgspMoazp`MK&^+-0Oc2bXnu?e;Fw^8H1KUYJApi>XxXw-?tBYSjiMy)drmB8JDIDaiThYAf?Y_7mw#099GJ%d`X*4pb)3+_QT zzJ}_53Mb)d)VLeD(K^8t^A1!36Htj~+{F1Slf_i@#Ya&`yau(vCRAdzI0YL}6P`A| z!c5{IYT{8mzuq_=)h`RR!FzBV=As_uR@6HC{1ir0IE*^-AZp=DsD-bXUAfwdV^InB zM;+}DGYK_r4CSTBLexASR6qY}3L5xRbmLQ~j`gUHd#(KdYDb5#09#T0 z61f=qKBS}ik4J6fF1!urqQ*U8K8?l1<;Y3-ol6vS`y<@pOVST{bDYt5D`ukJhJ5pJ zvjp|bpF}0H5w+7TxCk3?BK{LqpUOu;-idltnRtWV|NAH?^W~__^HC?V2DQLC?3~!@ z8&J<~FKUN}EdCtT{~{`(ACWiEi5wcfjBeCM$DtC)#uV0f7EsW@^{9omp%U4Jx;zI^ zm$Maf@IxGh1BQkBXQGaH9_pDsVD(EdnRq2m!aBSIKSj;o;}*_ex3xb7WqKQGf@#Pa z&P>!!S6ltl<~r04s!-#%qX+k)9$9z(iN|EreA7`0WTVDyK%MZ`TRDGqsHcK&htr5U zy5qJFDvP(FCftb{w-=Y-DO4gOlfutD z1+$4)piZO(b+`OoxJi0ey-}Cy7XH!Yn1?aA6qQ&$DuEKz#LuD@UT1L?s^9ZgUx(V* zPK)=LucGF86MO3YZ>5k(#k;79FJcUShnnCzYT|BO;pZ?GYf=3gQSHsBL|ae`9Y!tm zwzZ!`&40?`Pq4e*|36XC7w=2dgx{l1;2LV8=+WUzmw-wj5w-I)a}uimOzeg8QR9}Q z5-LI^ScdulJ&Wr90{V4S4HR^%ccC(T1C_`j)WGA|xfASsEm4o`EGqHn6vuf4hoRnr z3jDjvaej^(zacIBY2S<*zYjJ4Z_;@Fs`#B%w3&ZHW%!-N*Da3Zol<>YoPchNb8!}N z9%|x%)wd#-%z4lJ1o^q;oVNBK(m8)6(EawX!_29eO8sKggqu+d*P<5MjXWLa0&2p6 zd{@4E38(G3pnPO@0cRs1alFBh)iHgPJIan)n-3qW?mDkmAOW z43?r2>p3>u-XHa-(oy5aqS_~$Iaa^WV*kSw;^^=g>KpwtEW%@`36l7=MH8f>;;9yA zT7197xn`bOVy;E)_<7_9qVo!BWA9^cz5kzD#W~ah7tPD&71XD>3mrnZeAaZMa6?HPC}jJ zWYiAtMJ1Mtx=S9s5x3%Cd<}E-{{NnWE<=BQT~Q*VPy;7m=Vd~=I62l{fjWsT*m-xX z{v*`5&r##fS$xsr%c%LUSsZ;Q=dX_aD0ChzYJwDVEUJAnYT!(BzSVnB{U5_YSZwvr zTm24mm-#X-qTd13ypfYQe@$=$H%}D_s6>V!Kfs(c)NOtU)$b83!#q?%Uz!(iAo0I3 z0pll!$B#mdUuZ5im!j5LKAH2^#6BvNz#5#2708?Ayo+l80kxoOO4wegXFUkjJ{mQC zjKxz?3uL0kJz(|AEnbbfYh`|`*k!(sn&>F%b$JJMH-hFBYwtsrBd8yQN+bg{ZV_t1 zWo8lT(mjLvaBat%@vqkIccz7R5NpPxCK!Z+F%hR@7V@!kHlf;oZJt6U@E6pMFW@lz z5!KIqS2(d`)JcuAcnZ?)cd{sC(69jY3||a4IEPUK-obSIz~ZZBSF%!jH0p%nPzxra zc09(~=a>tu{vljTdueCApZA-B23|v5y6C&Z6O6?r#B=dcJb+p#enz<8NW6!50jhov zZo#8C1ZT0UJS;%X|3}nM*|Vs`FJS`fJ3mm+(Zywk8-^km*%^VVe-!m>pFmAiZuQj| zLA(sOX&gyk*6!O1$osMZS_kPl4Ar%3bU& zD0;#RzS8^>pS!5o{dn=JB6_V_<8_y;^cJ|6d3@d#?xI3P{~Z}vICMq#2ydA$aAZV{ ztM`LNrN!=2pSL*Kljkig2~1C_a77obDlG9ikF%C9@b0M9UDC!Ur=`17@0ggHnv}|) zsM#K0N%H(+PoXd0Q&Lns(Y>-XugH_X(mlxv0Z+;Vmuqa`#nh;X_=e_ST}#`E>b9es zI_hfApQvho;l;q7+rMy4>S#O|+S}S*(-3@PQ|M4l`%4Y&b;m=8f7!8nZQGFpbpGae z_S*XY?-Ocj4Yt$=*B=g6yc%3z8TwUyuyS9Ze#+IznD$qj z&c9sO{(58k_9KD1j3QTD+lk$w`ijuD=Jv|NZO8V6YBmI}W{!5noDXa~-~3$Yl`ZYh dmDeU`<;8~fR|hLMIKd-z?R6UiwOJQj{{a$N?2Z5c delta 5334 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, # 2024. # pdwalker , 2024. +# hugoalh , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-07-26 07:09+0000\n" -"Last-Translator: pdwalker " -"\n" +"PO-Revision-Date: 2024-08-12 04:00+0000\n" +"Last-Translator: hugoalh \n" +"Language-Team: Chinese (Traditional) \n" "Language: zh_Hant_TW\n" -"Language-Team: Chinese (Traditional) " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -95,7 +96,7 @@ msgstr "電視" #. CATEGORY_NAMES['IT'] #: searx/searxng.msg msgid "it" -msgstr "IT" +msgstr "資訊科技" #. CATEGORY_NAMES['NEWS'] #: searx/searxng.msg @@ -290,7 +291,7 @@ msgstr "訂閱數" #. SOCIAL_MEDIA_TERMS['POSTS'] #: searx/searxng.msg msgid "posts" -msgstr "" +msgstr "帖文" #. SOCIAL_MEDIA_TERMS['ACTIVE USERS'] #: searx/searxng.msg @@ -315,7 +316,7 @@ msgstr "社群" #. SOCIAL_MEDIA_TERMS['POINTS'] #: searx/searxng.msg msgid "points" -msgstr "" +msgstr "積分" #. SOCIAL_MEDIA_TERMS['TITLE'] #: searx/searxng.msg @@ -531,7 +532,7 @@ msgstr "主機名稱外掛" #: searx/plugins/hostnames.py:92 msgid "Rewrite hostnames, remove results or prioritize them based on the hostname" -msgstr "" +msgstr "重寫主機名稱、移除結果或根據主機名稱確定其優先級別" #: searx/plugins/oa_doi_rewrite.py:12 msgid "Open Access DOI rewrite" @@ -559,7 +560,7 @@ msgstr "您的 IP 是: " #: searx/plugins/self_info.py:31 msgid "Your user-agent is: " -msgstr "" +msgstr "你的用戶代理是: " #: searx/plugins/tor_check.py:24 msgid "Tor check plugin" @@ -597,7 +598,7 @@ msgstr "從傳回的 URL 中移除追蹤器參數" #: searx/plugins/unit_converter.py:29 msgid "Convert between units" -msgstr "" +msgstr "在單位之間轉換" #: searx/templates/simple/404.html:4 msgid "Page not found" @@ -664,7 +665,7 @@ msgstr "長度" #: searx/templates/simple/macros.html:36 msgid "Views" -msgstr "" +msgstr "檢視次數" #: searx/templates/simple/macros.html:37 #: searx/templates/simple/result_templates/files.html:34 @@ -1095,7 +1096,7 @@ msgstr "置中對齊" #: searx/templates/simple/preferences/center_alignment.html:14 msgid "Displays results in the center of the page (Oscar layout)." -msgstr "搜尋結果置顯示於網頁中間。(Oscar 版面配置)" +msgstr "顯示搜尋結果於網頁中間(Oscar 版面配置)。" #: searx/templates/simple/preferences/cookies.html:2 msgid "" @@ -1878,4 +1879,3 @@ msgstr "隱藏影片" #~ msgid "Hostname replace" #~ msgstr "主機名替換" - From 799d72e3fd74fd0967a79f07bbf541ce7f0f3e84 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Mon, 19 Aug 2024 11:29:57 +0200 Subject: [PATCH 07/23] [mod] add French translation for infopage The French translation was provided by @jcarnat in #3738. [3738] https://github.com/searxng/searxng/issues/3738 Co-authored-by: Joel Carnat @jcarnat https://github.com/jcarnat Signed-off-by: Markus Heiser --- searx/infopage/fr/about.md | 87 +++++++++++++++++++++++++++ searx/infopage/fr/search-syntax.md | 97 ++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 searx/infopage/fr/about.md create mode 100644 searx/infopage/fr/search-syntax.md diff --git a/searx/infopage/fr/about.md b/searx/infopage/fr/about.md new file mode 100644 index 000000000..402f28069 --- /dev/null +++ b/searx/infopage/fr/about.md @@ -0,0 +1,87 @@ +# A propos de SearXNG + +SearXNG est un [Métamoteur] qui agrège les résultats d'autres +{{link('moteurs de recherche', 'preferences')}} tout en ne sauvegardant +aucune informations à propos de ses utilisateurs. + +Le projet SearXNG est maintenu par une communauté ouverte. +Rejoignez-nous sur Matrix si vous avez des questions ou simplement pour +discuter de SearXNG: [#searxng:matrix.org]. + +Aidez-nous à rendre SearXNG meilleur. + +- Vous pouvez améliorer les traductions de SearXNG avec l'outil + [Weblate]. +- Suivez le développement, contribuez au projet ou remontez des erreurs + en utilisant le [dépôt de sources]. +- Pour obtenir de plus amples informations, consultez la documentation + en ligne du [projet SearXNG]. + +## Pourquoi l'utiliser ? + +- SearXNG ne vous fournira pas de résultats aussi personnalisés que + Google, mais il ne générera pas non plus de suivi sur vous. +- SearXNG ne se soucis pas des recherches que vous faites, ne partage + aucune information avec des tiers et ne peut pas être utilisé contre + vous. +- SearXNG est un logiciel libre. Son code source est 100% ouvert et tout + le mode est encouragé à l'améliorer. + +Si vous êtes soucieux du respect de la vie privée et des libertés sur +Internet, faites de SearXNG votre moteur de recherche par défaut. Vous +pouvez aussi installer et utiliser SearXNG sur votre propre serveur. + +## Comment le configurer comme moteur de recherche par défaut ? + +SearXNG prend en charge [OpenSearch]. Pour plus d'informations sur la +manière de modifier votre moteur de recherche par défaut, veuillez +consulter la documentation de votre navigateur : + +- [Firefox] +- [Microsoft Edge] - Ce lien propose aussi les instructions pour les + navigateurs Chrome et Safari. +- Les navigateurs basés sur [Chromium] permettent d'ajouter des sites de + navigation sans même y accéder. + +Lorsqu'un moteur de recherche est ajouté, son nom doit être unique. Si +vous ne pouvez pas ajouter un moteur de recherche, veuillez : + +- Supprimer le doublon (le nom par défaut est SearXNG) ou bien +- Contacter le propriétaire de l'instance que vous souhaitez utiliser + afin qu'il modifie le nom de celle-ci. + +## Comment ça marche ? + +SearXNG est une reprise logicielle du projet [searx] [Métamoteur], +lui-même inspiré du [projet Seeks]. Il assure la confidentialité en +mélangeant vos recherches vers d'autres plateformes sans stocker aucune +données de recherche. SearXNG peut être ajouté à la barre de recherche +de votre navigateur et même être utilisé comme moteur de recherche par +défaut. + +Le lien "{{link('statistiques des moteurs', 'stats')}}" présente des +informations anonymisées concernant l'utilisation des divers moteurs de +recherche. + +## Comment reprendre la main ? + +SearXNG apprécie votre préoccupation concernant les traces de recherche. +N'hésitez pas à utiliser le [dépôt de sources] et à maintenir votre +propre instance de recherche. + +Ajouter votre instance à la [liste d'instances +publiques]({{get_setting('brand.public_instances')}}) afin d'aider +d'autres personnes à protéger leur vie privée et rendre l'Internet plus +libre. Plus Internet sera décentralisé, plus nous aurons de liberté ! + +[dépôt de sources]: {{GIT_URL}} +[#searxng:matrix.org]: https://matrix.to/#/#searxng:matrix.org +[projet SearXNG]: {{get_setting('brand.docs_url')}} +[searx]: https://github.com/searx/searx +[Métamoteur]: https://fr.wikipedia.org/wiki/M%C3%A9tamoteur +[Weblate]: https://translate.codeberg.org/projects/searxng/ +[projet Seeks]: https://beniz.github.io/seeks/ +[OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md +[Firefox]: https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox +[Microsoft Edge]: https://support.microsoft.com/en-us/help/4028574/microsoft-edge-change-the-default-search-engine +[Chromium]: https://www.chromium.org/tab-to-search diff --git a/searx/infopage/fr/search-syntax.md b/searx/infopage/fr/search-syntax.md new file mode 100644 index 000000000..15e678bb3 --- /dev/null +++ b/searx/infopage/fr/search-syntax.md @@ -0,0 +1,97 @@ +# Syntaxe de recherche + +SearXNG permet de modifier les catégories de recherche, les moteurs +utilisés ou encore la langue de recherche par l'intermédiaire d'une +syntaxe dédiée. La liste des moteurs de recherche, de catégories et de +langues disponibles est accessible depuis la page de +{{link('préférences', 'preferences')}}. + +## `!` Spécifier un moteur ou une catégorie + +Pour restreindre la recherche à un moteur ou une catégorie, utilisez le +caractère "!". Voici quelques exemples d'utilisation : + +- Rechercher **paris** sur Wikipédia. + + - {{search('!wp paris')}} + - {{search('!wikipedia paris')}} + +- Rechercher **paris** dans la catégorie **Carte**. + + - {{search('!map paris')}} + +- Rechercher des **Images**. + + - {{search('!images Wau Holland')}} + +Les abréviations de moteurs et de langues sont aussi valides. Il est +possible d'accumuler les moteurs et catégories dans une requête +complexe. Par exemple, {{search('!map !ddg !wp paris')}} recherchera +**paris** dans la catégorie **Carte** de DuckDuckGo et Wikipédia. + +## `:` Spécifier une langue + +Utilisez le préfixe ":" pour limiter la recherche à une langue en +particulier. Par exemple : + +- Rechercher dans les pages françaises de Wikipédia. + + - {{search(':fr !wp Wau Holland')}} + +## `!!` Recherches externes (!Bang) + +SearXNG supporte les recherches [DuckDuckGo] de type "!Bang". Utilisez +le préfixe "!!" pour être automatiquement redirigé vers un moteur de +recherche externe. Par exemple : + +- Rechercher sur Wikipédia en langue française. + + - {{search('!!wfr Wau Holland')}} + +Prenez garde au fait que de telles recherches sont exécutées directement +sur le moteur externe. Dans ce cas, SearXNG ne peut pas protéger votre +vie privée. + +[DuckDuckGo]: https://duckduckgo.com/bang + +## `!!` Redirection automatique + +En utilisant "!!" suivi d'un ou plusieurs espaces lors de votre +recherche, vous serez automatiquement redirigé vers le premier résultat +de recherche. Cela correspondant au fonctionnement "J'ai de la chance" +du moteur Google. Par exemple : + +- Rechercher et être redirigé directement vers le premier lien + correspondant. + + - {{search('!! Wau Holland')}} + +Prenez garde au fait qu'aucune vérification ne peut être faite +concernant le premier lien retourné. Il pourrait même s'agir d'un site +dangereux. Dans ce cas, SearXNG ne peut pas protéger votre vie +privée. Soyez prudent en utilisant cette fonctionnalité. + +## Requêtes spéciales + +Dans la section _requêtes spéciales_ de la page de {{link('préférences', +'preferences')}} se trouve une liste de mots clés à usage particulier. +Par exemple : + +- Générer une valeur aléatoire. + + - {{search('random uuid')}} + +- Calculer une moyenne. + + - {{search('avg 123 548 2.04 24.2')}} + +- Afficher la valeur de la variable _User-Agent_ utilisée par votre + navigateur (doit être activé manuellement). + + - {{search('user-agent')}} + +- Convertir une chaîne de caractères en valeurs de hachage ("hash digests") + (doit être activé manuellement). + + - {{search('md5 lorem ipsum')}} + - {{search('sha512 lorem ipsum')}} From 5c6b126d7f2bbd12c6944247068b49ec3a9b7dee Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Tue, 20 Aug 2024 16:43:49 +0200 Subject: [PATCH 08/23] [fix] debian/ubuntu python-is-python3 Closes: https://github.com/searxng/searxng/issues/3235 Signed-off-by: Markus Heiser --- manage | 2 +- utils/lib.sh | 2 +- utils/lib_go.sh | 4 ++-- utils/searxng.sh | 10 +++------- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/manage b/manage index 155a1f2dd..2a88a4c5c 100755 --- a/manage +++ b/manage @@ -233,7 +233,7 @@ gecko.driver() { build_msg INSTALL "geckodriver already installed" return fi - PLATFORM="$(python3 -c 'import platform; print(platform.system().lower(), platform.architecture()[0])')" + PLATFORM="$(python -c 'import platform; print(platform.system().lower(), platform.architecture()[0])')" case "$PLATFORM" in "linux 32bit" | "linux2 32bit") ARCH="linux32";; "linux 64bit" | "linux2 64bit") ARCH="linux64";; diff --git a/utils/lib.sh b/utils/lib.sh index 16bfb4398..e527fa1b6 100755 --- a/utils/lib.sh +++ b/utils/lib.sh @@ -1674,7 +1674,7 @@ EOF } # apt packages -LXC_BASE_PACKAGES_debian="bash git build-essential python3 python3-venv" +LXC_BASE_PACKAGES_debian="bash git build-essential python3 python3-venv python-is-python3" # pacman packages LXC_BASE_PACKAGES_arch="bash git base-devel python" diff --git a/utils/lib_go.sh b/utils/lib_go.sh index 462bbbba0..0b58fad61 100755 --- a/utils/lib_go.sh +++ b/utils/lib_go.sh @@ -41,7 +41,7 @@ EOF } go.ls(){ - python3 <&1 | prefix_stdout "$_service_prefix" rm -rf "${SEARXNG_PYENV}" -python3 -m venv "${SEARXNG_PYENV}" +python -m venv "${SEARXNG_PYENV}" grep -qFs -- 'source ${SEARXNG_PYENV}/bin/activate' ~/.profile \ || echo 'source ${SEARXNG_PYENV}/bin/activate' >> ~/.profile EOF From 5be55e3309761842e070f48580a519499cfc8ceb Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Wed, 21 Aug 2024 08:19:54 +0200 Subject: [PATCH 09/23] [fix] unit tests: fix load / unload engines & fix messages - https://github.com/searxng/searxng/pull/3746#issuecomment-2300965005 - https://github.com/searxng/searxng/issues/2988#issuecomment-2226929084 Signed-off-by: Markus Heiser --- tests/unit/test_engines_init.py | 1 + tests/unit/test_search.py | 6 ++++++ tests/unit/test_webapp.py | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/tests/unit/test_engines_init.py b/tests/unit/test_engines_init.py index 4872a1b1b..e2445160a 100644 --- a/tests/unit/test_engines_init.py +++ b/tests/unit/test_engines_init.py @@ -10,6 +10,7 @@ class TestEnginesInit(SearxTestCase): # pylint: disable=missing-class-docstring def tearDownClass(cls): settings['outgoing']['using_tor_proxy'] = False settings['outgoing']['extra_proxy_timeout'] = 0 + engines.load_engines([]) def test_initialize_engines_default(self): engine_list = [ diff --git a/tests/unit/test_search.py b/tests/unit/test_search.py index b85c90c68..a60089aef 100644 --- a/tests/unit/test_search.py +++ b/tests/unit/test_search.py @@ -2,6 +2,7 @@ # pylint: disable=missing-module-docstring, invalid-name from copy import copy +import logging import searx.search from searx.search import SearchQuery, EngineRef @@ -46,8 +47,13 @@ class SearchQueryTestCase(SearxTestCase): # pylint: disable=missing-class-docst class SearchTestCase(SearxTestCase): # pylint: disable=missing-class-docstring def setUp(self): + log = logging.getLogger("searx") + log_lev = log.level + log.setLevel(logging.ERROR) from searx import webapp # pylint: disable=import-outside-toplevel + log.setLevel(log_lev) + self.app = webapp.app @classmethod diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py index 868645e17..7c6e1ef82 100644 --- a/tests/unit/test_webapp.py +++ b/tests/unit/test_webapp.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # pylint: disable=missing-module-docstring +import logging import json from urllib.parse import ParseResult from mock import Mock @@ -20,8 +21,13 @@ class ViewsTestCase(SearxTestCase): # pylint: disable=missing-class-docstring, self.setattr4test(searx.search.processors, 'initialize_processor', dummy) + log = logging.getLogger("searx") + log_lev = log.level + log.setLevel(logging.ERROR) from searx import webapp # pylint: disable=import-outside-toplevel + log.setLevel(log_lev) + webapp.app.config['TESTING'] = True # to get better error messages self.app = webapp.app.test_client() From 5276219b9d790baeeb505813bb76d0dffa1d2d51 Mon Sep 17 00:00:00 2001 From: Grant Lanham Date: Mon, 19 Aug 2024 23:02:06 -0400 Subject: [PATCH 10/23] Fix tineye engine url, datetime parsing, and minor refactor Changes made to tineye engine: 1. Importing logging if TYPE_CHECKING is enabled 2. Remove unecessary try-catch around json parsing the response, as this masked the original error and had no immediate benefit 3. Improve error handling explicitely for status code 422 and 400 upfront, deferring json_parsing only for these status codes and successful status codes 4. Unit test all new applicable changes to ensure compatability --- searx/engines/tineye.py | 57 +++++++++++---------- tests/unit/test_tineye.py | 102 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 29 deletions(-) create mode 100644 tests/unit/test_tineye.py diff --git a/searx/engines/tineye.py b/searx/engines/tineye.py index 196c89a2b..c35799c69 100644 --- a/searx/engines/tineye.py +++ b/searx/engines/tineye.py @@ -14,10 +14,16 @@ billion images `[tineye.com] `_. """ +from typing import TYPE_CHECKING from urllib.parse import urlencode from datetime import datetime from flask_babel import gettext +if TYPE_CHECKING: + import logging + + logger = logging.getLogger() + about = { "website": 'https://tineye.com', "wikidata_id": 'Q2382535', @@ -34,7 +40,7 @@ categories = ['general'] paging = True safesearch = False base_url = 'https://tineye.com' -search_string = '/result_json/?page={page}&{query}' +search_string = '/api/v1/result_json/?page={page}&{query}' FORMAT_NOT_SUPPORTED = gettext( "Could not read that image url. This may be due to an unsupported file" @@ -120,7 +126,7 @@ def parse_tineye_match(match_json): crawl_date = backlink_json.get("crawl_date") if crawl_date: - crawl_date = datetime.fromisoformat(crawl_date[:-3]) + crawl_date = datetime.strptime(crawl_date, '%Y-%m-%d') else: crawl_date = datetime.min @@ -150,29 +156,15 @@ def parse_tineye_match(match_json): def response(resp): """Parse HTTP response from TinEye.""" - results = [] - try: + # handle the 422 client side errors, and the possible 400 status code error + if resp.status_code in (400, 422): json_data = resp.json() - except Exception as exc: # pylint: disable=broad-except - msg = "can't parse JSON response // %s" % exc - logger.error(msg) - json_data = {'error': msg} - - # handle error codes from Tineye - - if resp.is_error: - if resp.status_code in (400, 422): - - message = 'HTTP status: %s' % resp.status_code - error = json_data.get('error') - s_key = json_data.get('suggestions', {}).get('key', '') - - if error and s_key: - message = "%s (%s)" % (error, s_key) - elif error: - message = error + suggestions = json_data.get('suggestions', {}) + message = f'HTTP Status Code: {resp.status_code}' + if resp.status_code == 422: + s_key = suggestions.get('key', '') if s_key == "Invalid image URL": # test https://docs.searxng.org/_static/searxng-wordmark.svg message = FORMAT_NOT_SUPPORTED @@ -182,16 +174,23 @@ def response(resp): elif s_key == 'Download Error': # test https://notexists message = DOWNLOAD_ERROR + else: + logger.warning("Unknown suggestion key encountered: %s", s_key) + else: # 400 + description = suggestions.get('description') + if isinstance(description, list): + message = ','.join(description) - # see https://github.com/searxng/searxng/pull/1456#issuecomment-1193105023 - # results.append({'answer': message}) - logger.error(message) + # see https://github.com/searxng/searxng/pull/1456#issuecomment-1193105023 + # results.append({'answer': message}) + logger.error(message) + return [] - return results + # Raise for all other responses + resp.raise_for_status() - resp.raise_for_status() - - # append results from matches + results = [] + json_data = resp.json() for match_json in json_data['matches']: diff --git a/tests/unit/test_tineye.py b/tests/unit/test_tineye.py new file mode 100644 index 000000000..0530b4c5e --- /dev/null +++ b/tests/unit/test_tineye.py @@ -0,0 +1,102 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=missing-module-docstring + + +from datetime import datetime +from unittest.mock import Mock +from requests import HTTPError +from searx.engines import load_engines, tineye +from tests import SearxTestCase + + +class TinEyeTests(SearxTestCase): # pylint: disable=missing-class-docstring + + def setUp(self): + load_engines([{'name': 'tineye', 'engine': 'tineye', 'shortcut': 'tin', 'timeout': 9.0, 'disabled': True}]) + + def tearDown(self): + load_engines([]) + + def test_status_code_raises(self): + response = Mock() + response.status_code = 401 + response.raise_for_status.side_effect = HTTPError() + self.assertRaises(HTTPError, lambda: tineye.response(response)) + + def test_returns_empty_list_for_422(self): + response = Mock() + response.json.return_value = {} + response.status_code = 422 + response.raise_for_status.side_effect = HTTPError() + with self.assertLogs(tineye.logger) as _dev_null: + results = tineye.response(response) + self.assertEqual(0, len(results)) + + def test_logs_format_for_422(self): + response = Mock() + response.json.return_value = {"suggestions": {"key": "Invalid image URL"}} + response.status_code = 422 + response.raise_for_status.side_effect = HTTPError() + + with self.assertLogs(tineye.logger) as assert_logs_context: + tineye.response(response) + self.assertIn(tineye.FORMAT_NOT_SUPPORTED, ','.join(assert_logs_context.output)) + + def test_logs_signature_for_422(self): + response = Mock() + response.json.return_value = {"suggestions": {"key": "NO_SIGNATURE_ERROR"}} + response.status_code = 422 + response.raise_for_status.side_effect = HTTPError() + + with self.assertLogs(tineye.logger) as assert_logs_context: + tineye.response(response) + self.assertIn(tineye.NO_SIGNATURE_ERROR, ','.join(assert_logs_context.output)) + + def test_logs_download_for_422(self): + response = Mock() + response.json.return_value = {"suggestions": {"key": "Download Error"}} + response.status_code = 422 + response.raise_for_status.side_effect = HTTPError() + + with self.assertLogs(tineye.logger) as assert_logs_context: + tineye.response(response) + self.assertIn(tineye.DOWNLOAD_ERROR, ','.join(assert_logs_context.output)) + + def test_empty_list_for_400(self): + response = Mock() + response.json.return_value = {} + response.status_code = 400 + response.raise_for_status.side_effect = HTTPError() + with self.assertLogs(tineye.logger) as _dev_null: + results = tineye.response(response) + self.assertEqual(0, len(results)) + + def test_logs_description_for_400(self): + description = 'There was a problem with that request. Error ID: ad5fc955-a934-43c1-8187-f9a61d301645' + response = Mock() + response.json.return_value = {"suggestions": {"description": [description], "title": "Oops! We're sorry!"}} + response.status_code = 400 + response.raise_for_status.side_effect = HTTPError() + + with self.assertLogs(tineye.logger) as assert_logs_context: + tineye.response(response) + self.assertIn(description, ','.join(assert_logs_context.output)) + + def test_crawl_date_parses(self): + date_str = '2020-05-25' + date = datetime.strptime(date_str, '%Y-%m-%d') + response = Mock() + response.json.return_value = { + 'matches': [ + { + 'backlinks': [ + { + 'crawl_date': date_str, + } + ] + } + ] + } + response.status_code = 200 + results = tineye.response(response) + self.assertEqual(date, results[0]['publishedDate']) From e45b771ffaeeb41a22fa17690b27be98b01d14cc Mon Sep 17 00:00:00 2001 From: Austin-Olacsi <138650713+Austin-Olacsi@users.noreply.github.com> Date: Sun, 11 Aug 2024 21:38:01 -0600 Subject: [PATCH 11/23] [feat] engine: implementation of yandex (web, images) It's set to inactive in settings.yml because of CAPTCHA. You need to remove that from the settings.yml to get in use. Closes: https://github.com/searxng/searxng/issues/961 --- searx/engines/yandex.py | 133 ++++++++++++++++++++++++++++++++++++++++ searx/settings.yml | 16 +++++ 2 files changed, 149 insertions(+) create mode 100644 searx/engines/yandex.py diff --git a/searx/engines/yandex.py b/searx/engines/yandex.py new file mode 100644 index 000000000..2c6984fdc --- /dev/null +++ b/searx/engines/yandex.py @@ -0,0 +1,133 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Yandex (Web, images)""" + +from json import loads +from urllib.parse import urlencode +from html import unescape +from lxml import html +from searx.exceptions import SearxEngineCaptchaException +from searx.utils import humanize_bytes, eval_xpath, eval_xpath_list, extract_text, extr + + +# Engine metadata +about = { + "website": 'https://yandex.com/', + "wikidata_id": 'Q5281', + "official_api_documentation": "?", + "use_official_api": False, + "require_api_key": False, + "results": 'HTML', +} + +# Engine configuration +categories = [] +paging = True +search_type = "" + +# Search URL +base_url_web = 'https://yandex.com/search/site/' +base_url_images = 'https://yandex.com/images/search' + +results_xpath = '//li[contains(@class, "serp-item")]' +url_xpath = './/a[@class="b-serp-item__title-link"]/@href' +title_xpath = './/h3[@class="b-serp-item__title"]/a[@class="b-serp-item__title-link"]/span' +content_xpath = './/div[@class="b-serp-item__content"]//div[@class="b-serp-item__text"]' + + +def catch_bad_response(resp): + if resp.url.path.startswith('/showcaptcha'): + raise SearxEngineCaptchaException() + + +def request(query, params): + query_params_web = { + "tmpl_version": "releases", + "text": query, + "web": "1", + "frame": "1", + "searchid": "3131712", + } + + query_params_images = { + "text": query, + "uinfo": "sw-1920-sh-1080-ww-1125-wh-999", + } + + if params['pageno'] > 1: + query_params_web.update({"p": params["pageno"] - 1}) + query_params_images.update({"p": params["pageno"] - 1}) + + params["cookies"] = {'cookie': "yp=1716337604.sp.family%3A0#1685406411.szm.1:1920x1080:1920x999"} + + if search_type == 'web': + params['url'] = f"{base_url_web}?{urlencode(query_params_web)}" + elif search_type == 'images': + params['url'] = f"{base_url_images}?{urlencode(query_params_images)}" + + return params + + +def response(resp): + if search_type == 'web': + + catch_bad_response(resp) + + dom = html.fromstring(resp.text) + + results = [] + + for result in eval_xpath_list(dom, results_xpath): + results.append( + { + 'url': extract_text(eval_xpath(result, url_xpath)), + 'title': extract_text(eval_xpath(result, title_xpath)), + 'content': extract_text(eval_xpath(result, content_xpath)), + } + ) + + return results + + if search_type == 'images': + + catch_bad_response(resp) + + html_data = html.fromstring(resp.text) + html_sample = unescape(html.tostring(html_data, encoding='unicode')) + + content_between_tags = extr( + html_sample, '{"location":"/images/search/', 'advRsyaSearchColumn":null}}', default="fail" + ) + json_data = '{"location":"/images/search/' + content_between_tags + 'advRsyaSearchColumn":null}}' + + if content_between_tags == "fail": + content_between_tags = extr(html_sample, '{"location":"/images/search/', 'false}}}') + json_data = '{"location":"/images/search/' + content_between_tags + 'false}}}' + + json_resp = loads(json_data) + + results = [] + for _, item_data in json_resp['initialState']['serpList']['items']['entities'].items(): + title = item_data['snippet']['title'] + source = item_data['snippet']['url'] + thumb = item_data['image'] + fullsize_image = item_data['viewerData']['dups'][0]['url'] + height = item_data['viewerData']['dups'][0]['h'] + width = item_data['viewerData']['dups'][0]['w'] + filesize = item_data['viewerData']['dups'][0]['fileSizeInBytes'] + humanized_filesize = humanize_bytes(filesize) + + results.append( + { + 'title': title, + 'url': source, + 'img_src': fullsize_image, + 'filesize': humanized_filesize, + 'thumbnail_src': thumb, + 'template': 'images.html', + 'resolution': f'{width} x {height}', + } + ) + + return results + + return [] diff --git a/searx/settings.yml b/searx/settings.yml index b3c7f5ffe..a1701d009 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -1814,6 +1814,22 @@ engines: engine: unsplash shortcut: us + - name: yandex + engine: yandex + categories: general + search_type: web + shortcut: yd + disabled: true + inactive: true + + - name: yandex images + engine: yandex + categories: images + search_type: images + shortcut: ydi + disabled: true + inactive: true + - name: yandex music engine: yandex_music shortcut: ydm From fe6bac5a08b8dfc8d91478f5ed78bd584ec9c147 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Thu, 8 Aug 2024 11:46:54 +0200 Subject: [PATCH 12/23] [fix] pip install -e: legacy editable install (setup.py develop) is deprecated From [1]: There is now a standardized mechanism [2] for an installer like pip to request an editable install of a project. pip is transitioning to using this standard only instead of invoking the deprecated `setup.py develop` command. For backward compatibility, we can use switches: --use-pep517 https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-use-pep517 --no-build-isolation https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-build-isolation - [1] https://github.com/pypa/pip/issues/11457 - [2] https://peps.python.org/pep-0660/ Closes: https://github.com/searxng/searxng/issues/3701 Signed-off-by: Markus Heiser --- docs/build-templates/searxng.rst | 2 +- docs/dev/makefile.rst | 4 ++-- manage | 4 ++-- utils/lib.sh | 4 ++-- utils/searxng.sh | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/build-templates/searxng.rst b/docs/build-templates/searxng.rst index 14b385468..bc5d3e8fc 100644 --- a/docs/build-templates/searxng.rst +++ b/docs/build-templates/searxng.rst @@ -123,7 +123,7 @@ ${fedora_build} # jump to SearXNG's working tree and install SearXNG into virtualenv (${SERVICE_USER})$ cd \"$SEARXNG_SRC\" - (${SERVICE_USER})$ pip install -e . + (${SERVICE_USER})$ pip install --use-pep517 --no-build-isolation -e . .. END manage.sh update_packages diff --git a/docs/dev/makefile.rst b/docs/dev/makefile.rst index 3c3b2bf3b..383113bae 100644 --- a/docs/dev/makefile.rst +++ b/docs/dev/makefile.rst @@ -61,7 +61,7 @@ working tree and release a ``make install`` to get a virtualenv with a $ make install PYENV [virtualenv] installing ./requirements*.txt into local/py3 ... - PYENV [install] pip install -e 'searx[test]' + PYENV [install] pip install --use-pep517 --no-build-isolation -e 'searx[test]' ... Successfully installed searxng-2023.7.19+a446dea1b @@ -78,7 +78,7 @@ the check fails if you edit the requirements listed in ... PYENV [virtualenv] installing ./requirements*.txt into local/py3 ... - PYENV [install] pip install -e 'searx[test]' + PYENV [install] pip install --use-pep517 --no-build-isolation -e 'searx[test]' ... Successfully installed searxng-2023.7.19+a446dea1b diff --git a/manage b/manage index 2a88a4c5c..7edcb1f5a 100755 --- a/manage +++ b/manage @@ -299,8 +299,8 @@ pyenv.install() { ( set -e pyenv - build_msg PYENV "[install] pip install -e 'searx${PY_SETUP_EXTRAS}'" - "${PY_ENV_BIN}/python" -m pip install -e ".${PY_SETUP_EXTRAS}" + build_msg PYENV "[install] pip install --use-pep517 --no-build-isolation -e 'searx${PY_SETUP_EXTRAS}'" + "${PY_ENV_BIN}/python" -m pip install --use-pep517 --no-build-isolation -e ".${PY_SETUP_EXTRAS}" ) local exit_val=$? if [ ! $exit_val -eq 0 ]; then diff --git a/utils/lib.sh b/utils/lib.sh index e527fa1b6..b932b875c 100755 --- a/utils/lib.sh +++ b/utils/lib.sh @@ -663,8 +663,8 @@ pyenv.install() { pyenv fi for i in ${PYOBJECTS}; do - build_msg PYENV "[install] pip install -e '$i${PY_SETUP_EXTRAS}'" - "${PY_ENV_BIN}/python" -m pip install -e "$i${PY_SETUP_EXTRAS}" + build_msg PYENV "[install] pip install --use-pep517 --no-build-isolation -e '$i${PY_SETUP_EXTRAS}'" + "${PY_ENV_BIN}/python" -m pip install --use-pep517 --no-build-isolation -e "$i${PY_SETUP_EXTRAS}" done fi pyenv.install.OK diff --git a/utils/searxng.sh b/utils/searxng.sh index ea6a467d2..c15c18218 100755 --- a/utils/searxng.sh +++ b/utils/searxng.sh @@ -501,7 +501,7 @@ pip install -U setuptools pip install -U wheel pip install -U pyyaml cd ${SEARXNG_SRC} -pip install -e . +pip install --use-pep517 --no-build-isolation -e . EOF } @@ -569,7 +569,7 @@ pip install -U pip pip install -U setuptools pip install -U wheel pip install -U pyyaml -pip install -U -e . +pip install -U --use-pep517 --no-build-isolation -e . EOF rst_para "update instance's settings.yml from ${SEARXNG_SETTINGS_PATH}" DEFAULT_SELECT=2 \ From 2033f30c8df9e6af23876345785ec28ba982d5e5 Mon Sep 17 00:00:00 2001 From: Dennis ten Hoove Date: Fri, 16 Aug 2024 05:14:25 +0200 Subject: [PATCH 13/23] [docs] improve Hostname plugin documentation --- searx/plugins/hostnames.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/searx/plugins/hostnames.py b/searx/plugins/hostnames.py index 770b00e15..6519452db 100644 --- a/searx/plugins/hostnames.py +++ b/searx/plugins/hostnames.py @@ -1,7 +1,19 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # pylint: disable=too-many-branches -"""In addition to rewriting/replace reslut URLs, the *hoostnames* plugin offers -other features. +""" +.. attention:: + + The **"Hostname replace"** plugin has been replace by **"Hostnames + plugin"**, see :pull:`3463` & :pull:`3552`. + +The **Hostnames plugin** can be enabled by adding it to the +``enabled_plugins`` **list** in the ``setting.yml`` like so. + + .. code:: yaml + + enabled_plugins: + - 'Hostnames plugin' + ... - ``hostnames.replace``: A **mapping** of regular expressions to hostnames to be replaced by other hostnames. From 4f7dd05d99f159111db152f86a583a5e2964d4a4 Mon Sep 17 00:00:00 2001 From: searxng-bot Date: Fri, 23 Aug 2024 07:09:56 +0000 Subject: [PATCH 14/23] [l10n] update translations from Weblate 1b63de5ca - 2024-08-21 - ghose 7c738125f - 2024-08-20 - crnobog --- searx/translations/gl/LC_MESSAGES/messages.mo | Bin 20555 -> 20555 bytes searx/translations/gl/LC_MESSAGES/messages.po | 14 ++--- searx/translations/sr/LC_MESSAGES/messages.mo | Bin 23984 -> 24310 bytes searx/translations/sr/LC_MESSAGES/messages.po | 48 ++++++++++-------- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/searx/translations/gl/LC_MESSAGES/messages.mo b/searx/translations/gl/LC_MESSAGES/messages.mo index 3fa7e52993f5b5b55a76618e1c090ad37dc55964..b413d207ce9b037a596487a75f71e928d114f5ed 100644 GIT binary patch delta 29 lcmX@TfbsMK#tq^I>=wF4MhXU|o8=7V@-t>`-ecb{005M#35fsz delta 29 lcmX@TfbsMK#tq^I?B=@01_}lio8=7V@-wDx-ecb{005Mi35Eaw diff --git a/searx/translations/gl/LC_MESSAGES/messages.po b/searx/translations/gl/LC_MESSAGES/messages.po index 0f26c69a8..305186744 100644 --- a/searx/translations/gl/LC_MESSAGES/messages.po +++ b/searx/translations/gl/LC_MESSAGES/messages.po @@ -11,18 +11,19 @@ # return42 , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-07-30 08:18+0000\n" +"PO-Revision-Date: 2024-08-22 05:18+0000\n" "Last-Translator: ghose \n" +"Language-Team: Galician \n" "Language: gl\n" -"Language-Team: Galician " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -1308,7 +1309,7 @@ msgid "" "multiple categories" msgstr "" "Buscar inmediatamente se hai unha categoría seleccionada. Desactiva para " -"elexir varias categorías" +"elixir varias categorías" #: searx/templates/simple/preferences/theme.html:2 msgid "Theme" @@ -1953,4 +1954,3 @@ msgstr "agochar vídeo" #~ msgid "Hostname replace" #~ msgstr "Substituír servidor" - diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo index e9d4ddf5f7ddbb1d7c8a21938d4a07c338185393..64dff52189004d4d19bd4dbc8a63c57e4aa63d8a 100644 GIT binary patch delta 5204 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 delta 4894 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, 2022, 2023. # return42 , 2023. # return42 , 2024. +# crnobog , 2024. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-08-08 10:01+0000\n" -"PO-Revision-Date: 2024-04-18 13:18+0000\n" -"Last-Translator: return42 " -"\n" +"PO-Revision-Date: 2024-08-21 01:18+0000\n" +"Last-Translator: crnobog \n" +"Language-Team: Serbian \n" "Language: sr\n" -"Language-Team: Serbian " -"\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.6.2\n" "Generated-By: Babel 2.15.0\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -76,7 +77,7 @@ msgstr "радио" #. CATEGORY_NAMES['TV'] #: searx/searxng.msg msgid "tv" -msgstr "" +msgstr "телевизија" #. CATEGORY_NAMES['IT'] #: searx/searxng.msg @@ -176,62 +177,66 @@ msgstr "О нама" #. WEATHER_TERMS['AVERAGE TEMP.'] #: searx/searxng.msg msgid "Average temp." -msgstr "" +msgstr "Просечна температура" #. WEATHER_TERMS['CLOUD COVER'] #: searx/searxng.msg msgid "Cloud cover" -msgstr "" +msgstr "Облачност" #. WEATHER_TERMS['CONDITION'] #: searx/searxng.msg msgid "Condition" -msgstr "" +msgstr "Стање" #. WEATHER_TERMS['CURRENT CONDITION'] #: searx/searxng.msg msgid "Current condition" -msgstr "" +msgstr "Тренутно стање" #. WEATHER_TERMS['EVENING'] #: searx/engines/wttr.py:100 searx/searxng.msg +#, fuzzy msgid "Evening" -msgstr "Vece" +msgstr "Вече" #. WEATHER_TERMS['FEELS LIKE'] #: searx/searxng.msg msgid "Feels like" -msgstr "" +msgstr "Осећај" #. WEATHER_TERMS['HUMIDITY'] #: searx/searxng.msg msgid "Humidity" -msgstr "" +msgstr "Влажност" #. WEATHER_TERMS['MAX TEMP.'] #: searx/searxng.msg msgid "Max temp." -msgstr "" +msgstr "Највећа темп." #. WEATHER_TERMS['MIN TEMP.'] #: searx/searxng.msg msgid "Min temp." -msgstr "" +msgstr "Најмања темп." #. WEATHER_TERMS['MORNING'] #: searx/engines/wttr.py:100 searx/searxng.msg +#, fuzzy msgid "Morning" -msgstr "Jutro" +msgstr "Јутро" #. WEATHER_TERMS['NIGHT'] #: searx/engines/wttr.py:100 searx/searxng.msg +#, fuzzy msgid "Night" -msgstr "Noc" +msgstr "Ноћ" #. WEATHER_TERMS['NOON'] #: searx/engines/wttr.py:100 searx/searxng.msg +#, fuzzy msgid "Noon" -msgstr "Podne" +msgstr "Подне" #. WEATHER_TERMS['PRESSURE'] #: searx/searxng.msg @@ -1934,4 +1939,3 @@ msgstr "сакриј видео" #~ msgid "Hostname replace" #~ msgstr "Замени име хостинга" - From 8289436e55adca46e40743ae1be229643cb3148f Mon Sep 17 00:00:00 2001 From: GenericMale Date: Fri, 23 Aug 2024 01:29:44 +0200 Subject: [PATCH 15/23] [fix] search: don't show categories without active engine --- searx/templates/simple/categories.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/searx/templates/simple/categories.html b/searx/templates/simple/categories.html index 65f8aeaf4..698c857e9 100644 --- a/searx/templates/simple/categories.html +++ b/searx/templates/simple/categories.html @@ -14,7 +14,7 @@

{{- '' -}}
{%- if not search_on_category_select or not display_tooltip -%} - {%- for category in categories_as_tabs -%} + {%- for category in categories -%}
{{- '' -}}