summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile2
-rw-r--r--requirements-dev.txt4
-rw-r--r--searx/engines/gigablast.py35
-rw-r--r--searx/engines/imdb.py2
-rw-r--r--searx/engines/yggtorrent.py127
-rw-r--r--searx/settings.yml9
-rw-r--r--searx/static/themes/oscar/js/searxng.min.js2
-rw-r--r--searx/static/themes/oscar/js/searxng.min.js.map2
-rw-r--r--searx/static/themes/simple/js/searxng.min.js6
-rw-r--r--searx/static/themes/simple/js/searxng.min.js.map2
-rw-r--r--searx/static/themes/simple/src/js/main/search.js8
-rw-r--r--searx/translations/ar/LC_MESSAGES/messages.mobin9381 -> 10421 bytes
-rw-r--r--searx/translations/ar/LC_MESSAGES/messages.po62
-rw-r--r--searx/translations/bg/LC_MESSAGES/messages.mobin13638 -> 13642 bytes
-rw-r--r--searx/translations/bg/LC_MESSAGES/messages.po4
-rw-r--r--searx/translations/cs/LC_MESSAGES/messages.mobin11023 -> 11024 bytes
-rw-r--r--searx/translations/cs/LC_MESSAGES/messages.po22
-rw-r--r--searx/translations/eo/LC_MESSAGES/messages.mobin9771 -> 9770 bytes
-rw-r--r--searx/translations/eo/LC_MESSAGES/messages.po30
-rw-r--r--searx/translations/es/LC_MESSAGES/messages.mobin11635 -> 11993 bytes
-rw-r--r--searx/translations/es/LC_MESSAGES/messages.po16
-rw-r--r--searx/translations/fi/LC_MESSAGES/messages.mobin9985 -> 10088 bytes
-rw-r--r--searx/translations/fi/LC_MESSAGES/messages.po22
-rw-r--r--searx/translations/fil/LC_MESSAGES/messages.mobin10235 -> 9522 bytes
-rw-r--r--searx/translations/fil/LC_MESSAGES/messages.po44
-rw-r--r--searx/translations/hr/LC_MESSAGES/messages.mobin10824 -> 10830 bytes
-rw-r--r--searx/translations/hr/LC_MESSAGES/messages.po18
-rw-r--r--searx/translations/ia/LC_MESSAGES/messages.mobin9845 -> 9851 bytes
-rw-r--r--searx/translations/ia/LC_MESSAGES/messages.po18
-rw-r--r--searx/translations/id/LC_MESSAGES/messages.mobin0 -> 15039 bytes
-rw-r--r--searx/translations/id/LC_MESSAGES/messages.po1254
-rw-r--r--searx/translations/it/LC_MESSAGES/messages.mobin10729 -> 10764 bytes
-rw-r--r--searx/translations/it/LC_MESSAGES/messages.po20
-rw-r--r--searx/translations/ja/LC_MESSAGES/messages.mobin12041 -> 12201 bytes
-rw-r--r--searx/translations/ja/LC_MESSAGES/messages.po20
-rw-r--r--searx/translations/lt/LC_MESSAGES/messages.mobin11157 -> 11194 bytes
-rw-r--r--searx/translations/lt/LC_MESSAGES/messages.po22
-rw-r--r--searx/translations/nl/LC_MESSAGES/messages.mobin10671 -> 10682 bytes
-rw-r--r--searx/translations/nl/LC_MESSAGES/messages.po14
-rw-r--r--searx/translations/nl_BE/LC_MESSAGES/messages.mobin10775 -> 10770 bytes
-rw-r--r--searx/translations/nl_BE/LC_MESSAGES/messages.po14
-rw-r--r--searx/translations/oc/LC_MESSAGES/messages.mobin10238 -> 10252 bytes
-rw-r--r--searx/translations/oc/LC_MESSAGES/messages.po23
-rw-r--r--searx/translations/pt/LC_MESSAGES/messages.mobin11529 -> 12163 bytes
-rw-r--r--searx/translations/pt/LC_MESSAGES/messages.po40
-rw-r--r--searx/translations/sk/LC_MESSAGES/messages.mobin8745 -> 8743 bytes
-rw-r--r--searx/translations/sk/LC_MESSAGES/messages.po18
-rw-r--r--searx/translations/sr/LC_MESSAGES/messages.mobin13315 -> 13317 bytes
-rw-r--r--searx/translations/sr/LC_MESSAGES/messages.po20
-rw-r--r--searx/translations/sv/LC_MESSAGES/messages.mobin10549 -> 10549 bytes
-rw-r--r--searx/translations/sv/LC_MESSAGES/messages.po14
-rw-r--r--searx/translations/ta/LC_MESSAGES/messages.mobin13819 -> 25177 bytes
-rw-r--r--searx/translations/ta/LC_MESSAGES/messages.po236
-rw-r--r--searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mobin10719 -> 10796 bytes
-rw-r--r--searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po20
55 files changed, 1651 insertions, 499 deletions
diff --git a/Dockerfile b/Dockerfile
index 2d28a1c7c..a7e5e5af0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.14
+FROM alpine:3.15
ENTRYPOINT ["/sbin/tini","--","/usr/local/searxng/dockerfiles/docker-entrypoint.sh"]
EXPOSE 8080
VOLUME /etc/searx
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 330449ed5..97693d6b0 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -2,10 +2,10 @@ mock==4.0.3
nose2[coverage_plugin]==0.10.0
cov-core==1.15.0
pycodestyle==2.8.0
-pylint==2.12.1
+pylint==2.12.2
splinter==0.16.0
selenium==3.141.0
-twine==3.7.0
+twine==3.7.1
Pallets-Sphinx-Themes==2.0.2
Sphinx==4.3.1
sphinx-issues==1.2.0
diff --git a/searx/engines/gigablast.py b/searx/engines/gigablast.py
index c2c51afe8..0f685abc5 100644
--- a/searx/engines/gigablast.py
+++ b/searx/engines/gigablast.py
@@ -6,6 +6,7 @@
# pylint: disable=invalid-name
import re
+from time import time
from json import loads
from urllib.parse import urlencode
from searx.network import get
@@ -28,13 +29,18 @@ safesearch = True
# search-url
base_url = 'https://gigablast.com'
+search_path = '/search?'
# ugly hack: gigablast requires a random extra parameter which can be extracted
# from the source code of the gigablast HTTP client
extra_param = ''
-extra_param_path='/search?c=main&qlangcountry=en-us&q=south&s=10'
+# timestamp of the last fetch of extra_param
+extra_param_ts = 0
+# after how many seconds extra_param expire
+extra_param_expiration_delay = 3000
-def parse_extra_param(text):
+
+def fetch_extra_param(query_args, headers):
# example:
#
@@ -43,7 +49,12 @@ def parse_extra_param(text):
#
# extra_param --> "rand=1590740241635&nsab=730863287"
- global extra_param # pylint: disable=global-statement
+ global extra_param, extra_param_ts # pylint: disable=global-statement
+
+ extra_param_ts = time()
+ extra_param_path = search_path + urlencode(query_args)
+ text = get(base_url + extra_param_path, headers=headers).text
+
re_var= None
for line in text.splitlines():
if re_var is None and extra_param_path in line:
@@ -54,21 +65,12 @@ def parse_extra_param(text):
if re_var is not None and re_var.search(line):
extra_param += re_var.search(line).group(1)
break
- # logger.debug('gigablast extra_param="%s"', extra_param)
-
-def init(engine_settings=None): # pylint: disable=unused-argument
- parse_extra_param(get(base_url + extra_param_path).text)
# do search-request
def request(query, params): # pylint: disable=unused-argument
-
- # see API http://www.gigablast.com/api.html#/search
- # Take into account, that the API has some quirks ..
-
query_args = dict(
c = 'main'
- , format = 'json'
, q = query
, dr = 1
, showgoodimages = 0
@@ -81,8 +83,13 @@ def request(query, params): # pylint: disable=unused-argument
if params['safesearch'] >= 1:
query_args['ff'] = 1
- search_url = '/search?' + urlencode(query_args)
- params['url'] = base_url + search_url + extra_param
+ # see API http://www.gigablast.com/api.html#/search
+ # Take into account, that the API has some quirks ..
+ if time() > (extra_param_ts + extra_param_expiration_delay):
+ fetch_extra_param(query_args, params['headers'])
+
+ query_args['format'] = 'json'
+ params['url'] = base_url + search_path + urlencode(query_args) + extra_param
return params
diff --git a/searx/engines/imdb.py b/searx/engines/imdb.py
index a3dab736d..a7474fd5b 100644
--- a/searx/engines/imdb.py
+++ b/searx/engines/imdb.py
@@ -57,7 +57,7 @@ def response(resp):
suggestions = json.loads(resp.text)
results = []
- for entry in suggestions['d']:
+ for entry in suggestions.get('d', []):
# https://developer.imdb.com/documentation/key-concepts#imdb-ids
entry_id = entry['id']
diff --git a/searx/engines/yggtorrent.py b/searx/engines/yggtorrent.py
deleted file mode 100644
index 31a0408b8..000000000
--- a/searx/engines/yggtorrent.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# SPDX-License-Identifier: AGPL-3.0-or-later
-"""
- Yggtorrent (Videos, Music, Files)
-"""
-
-from lxml import html
-from operator import itemgetter
-from datetime import datetime
-from urllib.parse import quote
-from searx.utils import extract_text, get_torrent_size
-from searx.network import get as http_get
-
-# about
-about = {
- "website": 'https://www4.yggtorrent.li/',
- "wikidata_id": None,
- "official_api_documentation": None,
- "use_official_api": False,
- "require_api_key": False,
- "results": 'HTML',
-}
-
-# engine dependent config
-categories = ['files']
-paging = True
-
-# search-url
-url = 'https://www4.yggtorrent.li/'
-search_url = url + 'engine/search?name={search_term}&do=search&page={pageno}&category={search_type}'
-
-# yggtorrent specific type-definitions
-search_types = {'files': 'all',
- 'music': '2139',
- 'videos': '2145'}
-
-cookies = dict()
-
-
-def init(engine_settings=None):
- # initial cookies
- resp = http_get(url, allow_redirects=False)
- if resp.ok:
- for r in resp.history:
- cookies.update(r.cookies)
- cookies.update(resp.cookies)
-
-
-# do search-request
-def request(query, params):
- search_type = search_types.get(params['category'], 'all')
- pageno = (params['pageno'] - 1) * 50
-
- params['url'] = search_url.format(search_term=quote(query),
- search_type=search_type,
- pageno=pageno)
-
- params['cookies'] = cookies
-
- return params
-
-
-# get response from search-request
-def response(resp):
- results = []
- dom = html.fromstring(resp.text)
-
- search_res = dom.xpath('//section[@id="#torrents"]/div/table/tbody/tr')
-
- # return empty array if nothing is found
- if not search_res:
- return []
-
- # parse results
- for result in search_res:
- link = result.xpath('.//a[@id="torrent_name"]')[0]
- href = link.attrib.get('href')
- title = extract_text(link)
- seed = result.xpath('.//td[8]/text()')[0]
- leech = result.xpath('.//td[9]/text()')[0]
-
- # convert seed to int if possible
- if seed.isdigit():
- seed = int(seed)
- else:
- seed = 0
-
- # convert leech to int if possible
- if leech.isdigit():
- leech = int(leech)
- else:
- leech = 0
-
- params = {'url': href,
- 'title': title,
- 'seed': seed,
- 'leech': leech,
- 'template': 'torrent.html'}
-
- # let's try to calculate the torrent size
- try:
- filesize_info = result.xpath('.//td[6]/text()')[0]
- filesize = filesize_info[:-2]
- filesize_multiplier = filesize_info[-2:].lower()
- multiplier_french_to_english = {
- 'to': 'TiB',
- 'go': 'GiB',
- 'mo': 'MiB',
- 'ko': 'KiB'
- }
- filesize = get_torrent_size(filesize, multiplier_french_to_english[filesize_multiplier])
- params['filesize'] = filesize
- except:
- pass
-
- # extract and convert creation date
- try:
- date_ts = result.xpath('.//td[5]/div/text()')[0]
- date = datetime.fromtimestamp(float(date_ts))
- params['publishedDate'] = date
- except:
- pass
-
- # append result
- results.append(params)
-
- # return results sorted by seeder
- return sorted(results, key=itemgetter('seed'), reverse=True)
diff --git a/searx/settings.yml b/searx/settings.yml
index c4ea6ebdb..305b254c3 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -558,7 +558,7 @@ engines:
- name: gigablast
engine: gigablast
shortcut: gb
- timeout: 3.0
+ timeout: 4.0
disabled: true
additional_tests:
rosebud: *test_rosebud
@@ -1355,13 +1355,6 @@ engines:
# Or you can use the html non-stable engine, activated by default
engine: youtube_noapi
- - name: yggtorrent
- engine: yggtorrent
- shortcut: ygg
- url: https://www4.yggtorrent.li/
- disabled: true
- timeout: 4.0
-
- name: dailymotion
engine: dailymotion
shortcut: dm
diff --git a/searx/static/themes/oscar/js/searxng.min.js b/searx/static/themes/oscar/js/searxng.min.js
index 9da3a8b75..c835d8129 100644
--- a/searx/static/themes/oscar/js/searxng.min.js
+++ b/searx/static/themes/oscar/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){"use strict";t.getElementsByTagName("html")[0].className="js";var e,e=t.currentScript||(e=t.getElementsByTagName("script"))[e.length-1];return{autocompleter:"true"===e.getAttribute("data-autocompleter"),method:e.getAttribute("data-method"),translations:JSON.parse(e.getAttribute("data-translations"))}}(document),
+window.searxng=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";var e=t.currentScript||(e=t.getElementsByTagName("script"))[e.length-1];return{autocompleter:"true"===e.getAttribute("data-autocompleter"),method:e.getAttribute("data-method"),translations:JSON.parse(e.getAttribute("data-translations"))}}(document),
/**
* @license
* (C) Copyright Contributors to the SearXNG project.
diff --git a/searx/static/themes/oscar/js/searxng.min.js.map b/searx/static/themes/oscar/js/searxng.min.js.map
index 33b340aa6..0b6317471 100644
--- a/searx/static/themes/oscar/js/searxng.min.js.map
+++ b/searx/static/themes/oscar/js/searxng.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"searxng.min.js","sources":["searxng.js"],"names":["window","searxng","d","getElementsByTagName","className","scripts","script","currentScript","length","autocompleter","getAttribute","method","translations","JSON","parse","document","$","ready","searchResults","original_search_value","Bloodhound","datumTokenizer","tokenizers","obj","whitespace","queryTokenizer","remote","url","wildcard","initialize","on","e","which","val","typeahead","name","highlight","hint","displayKey","result","classNames","input","menu","dataset","source","bind","ev","suggestion","submit","focus","click","getElementById","value","this","select","btnTextCollapsed","data","btnTextNotCollapsed","new_html","hasClass","html","replace","btnClass","btnLabelDefault","btnLabelToggled","toggleClass","target","iframe_load","srctest","attr","undefined","dblclick","prop","addClass","removeClass","removeAttr","checked","a","parents","children","parent","image_thumbnail_layout","ImageLayout","watch","addEventListener","each","infobox_body","find","height","css","hide","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","southWest","L","latLng","northEast","map_bounds","latLngBounds","Icon","Default","imagePath","map","osmMapnik","TileLayer","minZoom","maxZoom","attribution","setTimeout","fitBounds","setView","LatLng","addLayer","control","layers","OSM Mapnik","addTo","geoJson","off","let","engine_descriptions","querySelector","hover","ajax","dataType","done","engine_name","description","Object","entries","element","Source","innerHTML","w","container_selector","results_selector","img_selector","verticalMargin","horizontalMargin","maxHeight","isAlignDone","prototype","_getHeigth","images","width","img","r","i","naturalWidth","naturalHeight","_setSize","imgWidth","resultNode","imagesLength","style","marginLeft","marginTop","marginRight","marginBottom","parentNode","classList","contains","add","_alignImgs","imgGroup","isSearching","slice","h","containerElement","containerCompStyles","getComputedStyle","containerPaddingLeft","parseInt","getPropertyValue","containerPaddingRight","containerWidth","clientWidth","Math","min","align","results_selectorNode","querySelectorAll","results_length","previous","current","previousElementSibling","push","results_nodes","img_load_error","originalTarget","src","static_path","theme","throttleAlign","once"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"searxng.min.js","sources":["searxng.js"],"names":["window","searxng","d","getElementsByTagName","className","script","currentScript","scripts","length","autocompleter","getAttribute","method","translations","JSON","parse","document","$","ready","searchResults","original_search_value","Bloodhound","datumTokenizer","tokenizers","obj","whitespace","queryTokenizer","remote","url","wildcard","initialize","on","e","which","val","typeahead","name","highlight","hint","displayKey","result","classNames","input","menu","dataset","source","bind","ev","suggestion","submit","focus","click","getElementById","value","this","select","btnTextCollapsed","data","btnTextNotCollapsed","new_html","hasClass","html","replace","btnClass","btnLabelDefault","btnLabelToggled","toggleClass","target","iframe_load","srctest","attr","undefined","dblclick","prop","addClass","removeClass","removeAttr","checked","a","parents","children","parent","image_thumbnail_layout","ImageLayout","watch","addEventListener","each","infobox_body","find","height","css","hide","event","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","southWest","L","latLng","northEast","map_bounds","latLngBounds","Icon","Default","imagePath","map","osmMapnik","TileLayer","minZoom","maxZoom","attribution","setTimeout","fitBounds","setView","LatLng","addLayer","control","layers","OSM Mapnik","addTo","geoJson","off","let","engine_descriptions","querySelector","hover","ajax","dataType","done","engine_name","description","Object","entries","element","Source","innerHTML","w","container_selector","results_selector","img_selector","verticalMargin","horizontalMargin","maxHeight","isAlignDone","prototype","_getHeigth","images","width","img","r","i","naturalWidth","naturalHeight","_setSize","imgWidth","resultNode","imagesLength","style","marginLeft","marginTop","marginRight","marginBottom","parentNode","classList","contains","add","_alignImgs","imgGroup","isSearching","slice","h","containerElement","containerCompStyles","getComputedStyle","containerPaddingLeft","parseInt","getPropertyValue","containerPaddingRight","containerWidth","clientWidth","Math","min","align","results_selectorNode","querySelectorAll","results_length","previous","current","previousElementSibling","push","results_nodes","img_load_error","originalTarget","src","static_path","theme","throttleAlign","once"],"mappings":"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"} \ No newline at end of file
diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js
index c88e39c65..b8b42d34b 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,o){"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 a(e,t,n){try{e.call(t,n)}catch(e){console.log(e)}}var s=window.searxng||{};s.on=function(r,e,i,t){t=t||false;if(typeof r!=="string"){r.addEventListener(e,i,t)}else{o.addEventListener(e,function(e){var t=e.target||e.srcElement,n=false;while(t&&t.matches&&t!==o&&!(n=t.matches(r)))t=t.parentElement;if(n)a(i,t,e)},t)}};s.ready=function(e){if(document.readyState!="loading"){e.call(t)}else{t.addEventListener("DOMContentLoaded",e.bind(t))}};s.http=function(e,t){var n=new XMLHttpRequest,r=function(){},i=function(){},o={then:function(e){r=e;return o},catch:function(e){i=e;return o}};try{n.open(e,t,true);n.onload=function(){if(n.status==200){r(n.response,n.responseType)}else{i(Error(n.statusText))}};n.onerror=function(){i(Error("Network Error"))};n.onabort=function(){i(Error("Transaction is aborted"))};n.send()}catch(e){i(e)}return o};s.loadStyle=function(e){var t=s.static_path+e,n="style_"+e.replace(".","_"),r=o.getElementById(n);if(r===null){r=o.createElement("link");r.setAttribute("id",n);r.setAttribute("rel","stylesheet");r.setAttribute("type","text/css");r.setAttribute("href",t);o.body.appendChild(r)}};s.loadScript=function(e,t){var n=s.static_path+e,r="script_"+e.replace(".","_"),i=o.getElementById(r);if(i===null){i=o.createElement("script");i.setAttribute("id",r);i.setAttribute("src",n);i.onload=t;i.onerror=function(){i.setAttribute("error","1")};o.body.appendChild(i)}else if(!i.hasAttribute("error")){try{t.apply(i,[])}catch(e){console.log(e)}}else{console.log("callback not executed : script '"+n+"' not loaded.")}};s.insertBefore=function(e,t){t.parentNode.insertBefore(e,t)};s.insertAfter=function(e,t){t.parentNode.insertAfter(e,t.nextSibling)};s.on(".close","click",function(){this.parentNode.classList.add("invisible")});return s}(window,document);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);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 d={27:{key:"Escape",fun:o,des:"remove focus from the focused input",cat:"Control"},73:{key:"i",fun:p,des:"focus on the search input",cat:"Control"},66:{key:"b",fun:u(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},70:{key:"f",fun:u(window.innerHeight),des:"scroll one page down",cat:"Navigation"},85:{key:"u",fun:u(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},68:{key:"d",fun:u(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},71:{key:"g",fun:c(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},86:{key:"v",fun:c(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},75:{key:"k",fun:i("up"),des:"select previous search result",cat:"Results"},74:{key:"j",fun:i("down"),des:"select next search result",cat:"Results"},80:{key:"p",fun:l(),des:"go to previous page",cat:"Results"},78:{key:"n",fun:s(),des:"go to next page",cat:"Results"},79:{key:"o",fun:h(false),des:"open search result",cat:"Results"},84:{key:"t",fun:h(true),des:"open the result in a new tab",cat:"Results"},82:{key:"r",fun:t,des:"reload page from the server",cat:"Control"},72:{key:"h",fun:m,des:"toggle help window",cat:"Other"}};if(searxng.hotkeys){searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(d,e.keyCode)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var t=e.target.tagName.toLowerCase();if(e.keyCode===27){d[e.keyCode].fun(e)}else{if(e.target===document.body||t==="a"||t==="button"){e.preventDefault();d[e.keyCode].fun()}}}})}function i(d){return function(e){var t=document.querySelector(".result[data-vim-selected]"),n=d;if(t===null){t=document.querySelector(".result");if(t===null){return}if(d==="down"||d==="up"){n=t}}var r,i=document.querySelectorAll(".result");if(typeof n!=="string"){r=n}else{switch(n){case"visible":var o=document.documentElement.scrollTop||document.body.scrollTop;var a=o+document.documentElement.clientHeight;for(var s=0;s<i.length;s++){r=i[s];var l=r.offsetTop;var u=l+r.clientHeight;if(u<=a&&l>o){break}}break;case"down":r=t.nextElementSibling;if(r===null){r=i[0]}break;case"up":r=t.previousElementSibling;if(r===null){r=i[i.length-1]}break;case"bottom":r=i[i.length-1];break;case"top":default:r=i[0]}}if(r){t.removeAttribute("data-vim-selected");r.setAttribute("data-vim-selected","true");var c=r.querySelector("h3 a")||r.querySelector("a");if(c!==null){c.focus()}if(!e){f()}}}}function t(){document.location.reload(true)}function o(e){const t=e.target.tagName.toLowerCase();if(document.activeElement&&(t==="input"||t==="select"||t==="textarea")){document.activeElement.blur()}else{searxng.closeDetail()}}function a(t){return function(){var e=document.querySelector(t);if(e){e.click()}}}function s(){return a('nav#pagination .next_page button[type="submit"]')}function l(){return a('nav#pagination .previous_page button[type="submit"]')}function f(){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,i=r+e.clientHeight,o=120;if(e.previousElementSibling===null&&i<n){window.scroll(window.scrollX,0);return}if(t>r-o){window.scroll(window.scrollX,r-o)}else{var a=t+n;if(a<i+o){window.scroll(window.scrollX,i-n+o)}}}function u(e){return function(){window.scrollBy(0,e);i("visible")()}}function c(e,t){return function(){window.scrollTo(0,e);i(t)()}}function p(){window.scrollTo(0,0);document.querySelector("#q").focus()}function h(n){return function(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null){e=document.querySelector(".result[data-vim-selected] > a")}if(e!==null){var t=e.getAttribute("href");if(n){window.open(t)}else{window.location.href=t}}}}function g(e){var n={};for(var t in d){var r=d[t];n[r.cat]=n[r.cat]||[];n[r.cat].push(r)}var i=Object.keys(n).sort(function(e,t){return n[t].length-n[e].length});if(i.length===0){return}var o='<a href="#" class="close" aria-label="close" title="close">×</a>';o+="<h3>How to navigate searx with Vim-like hotkeys</h3>";o+="<table>";for(var a=0;a<i.length;a++){var s=n[i[a]];var l=a===i.length-1;var u=a%2===0;if(u){o+="<tr>"}o+="<td>";o+="<h4>"+s[0].cat+"</h4>";o+='<ul class="list-unstyled">';for(var c in s){o+="<li><kbd>"+s[c].key+"</kbd> "+s[c].des+"</li>"}o+="</ul>";o+="</td>";if(!u||l){o+="</tr>"}}o+="</table>";e.innerHTML=o}function m(){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";g(e);g(e);g(e);var t=document.getElementsByTagName("body")[0];t.appendChild(e)}else{e.classList.toggle("invisible");return}}searxng.scrollPageToSelected=f;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 g=JSON.parse(this.dataset.mapBoundingbox);var m=JSON.parse(this.dataset.mapGeojson);n.loadStyle("css/leaflet.css");n.loadScript("js/leaflet.js",function(){var e=null;if(g){var t=L.latLng(g[0],g[2]);var n=L.latLng(g[1],g[3]);e=L.latLngBounds(t,n)}var r=L.map(d);var i="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";var o='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';var a=new L.TileLayer(i,{minZoom:1,maxZoom:19,attribution:o});var s="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png";var l='Wikimedia maps | Maps data © <a href="https://openstreetmap.org">OpenStreetMap contributors</a>';var u=new L.TileLayer(s,{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(a);var c={"OSM Mapnik":a,"OSM Wikimedia":u};L.control.layers(c).addTo(r);if(m){L.geoJson(m).addTo(r)}});e.preventDefault()})})})(window,document,window.searxng);(function(e,o,a){"use strict";a.ready(function(){let i=null;function e(){if(i==null){a.http("GET","engine_descriptions.json").then(function(e){i=JSON.parse(e);for(const[t,n]of Object.entries(i)){let e=o.querySelectorAll('[data-engine-name="'+t+'"] .engine-description');for(const r of e){let e=" (<i>"+a.translations["Source"]+":&nbsp;"+n[1]+"</i>)";r.innerHTML=n[0]+e}}})}}if(o.querySelector('body[class="preferences_endpoint"]')){for(const t of o.querySelectorAll("[data-engine-name]")){a.on(t,"mouseenter",e)}}})})(window,document,window.searxng);(function(e,s,l){"use strict";l.ready(function(){l.image_thumbnail_layout=new l.ImageLayout("#urls","#urls .result-images","img.image_thumbnail",14,6,200);l.image_thumbnail_layout.watch();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=s.querySelector(n);var i=this.innerHTML;if(this.classList.contains("collapsed")){i=i.replace(e,t)}else{i=i.replace(t,e)}this.innerHTML=i;this.classList.toggle("collapsed");r.classList.toggle("invisible")});l.on(".media-loader","click",function(){var e=this.getAttribute("data-target");var t=s.querySelector(e+" > iframe");var n=t.getAttribute("src");if(n===null||n===undefined||n===false){t.setAttribute("src",t.getAttribute("data-src"))}});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 i=t.getAttribute("data-src");if(i){const o=s.createElement("div");const a=new Image;o.classList.add("loader");r.appendChild(o);a.onload=e=>{t.src=i;o.remove()};a.onerror=e=>{o.remove()};a.src=i;t.src=n.src;t.removeAttribute("data-src")}}}s.getElementById("results").classList.add("image-detail-open");l.image_thumbnail_layout.align();l.scrollPageToSelected()};l.closeDetail=function(e){s.getElementById("results").classList.remove("image-detail-open");l.image_thumbnail_layout.align();l.scrollPageToSelected()};l.on(".result-detail-close","click",e=>{e.preventDefault();l.closeDetail()});l.on(".result-detail-previous","click",e=>l.selectPrevious(false));l.on(".result-detail-next","click",e=>l.selectNext(false));e.addEventListener("scroll",function(){var e=s.getElementById("backToTop"),t=document.documentElement.scrollTop||document.body.scrollTop,n=s.getElementById("results");if(e!==null){if(t>=100){n.classList.add("scrolling")}else{n.classList.remove("scrolling")}}},true)})})(window,document,window.searxng);(function(t,n,r){"use strict";var i=true,o="q",a;function s(e){if(e.setSelectionRange){var t=e.value.length;e.setSelectionRange(t,t)}}function l(){if(a.value.length>0){var e=document.getElementById("search");setTimeout(e.submit.bind(e),0)}}function u(e){var t=document.getElementById("clear_search");var n=function(){if(e.value.length===0){t.classList.add("empty")}else{t.classList.remove("empty")}};n();t.addEventListener("click",function(){e.value="";e.focus();n()});e.addEventListener("keyup",n,false)}r.ready(function(){a=n.getElementById(o);function e(){if(i){s(a);i=false}else{}}if(a!==null){u(a);if(r.autocompleter){r.autocomplete=AutoComplete.call(t,{Url:"./autocompleter",EmptyMessage:r.translations.no_item_found,HttpMethod:r.method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:4,Delay:300},"#"+o);t.addEventListener("resize",function(){var e=new CustomEvent("position");a.dispatchEvent(e)})}a.addEventListener("focus",e,false);a.focus()}if(a!==null&&n.querySelector(".help")!=null&&r.search_on_category_select){n.querySelector(".help").className="invisible";r.on("#categories input","change",function(){var e,t=n.querySelectorAll('#categories input[type="checkbox"]');for(e=0;e<t.length;e++){if(t[e]!==this&&t[e].checked){t[e].click()}}if(!this.checked){this.click()}l();return false});r.on(n.getElementById("safesearch"),"change",l);r.on(n.getElementById("time_range"),"change",l);r.on(n.getElementById("language"),"change",l)}})})(window,document,window.searxng);
+window.searxng=function(t,o){"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),i=-1;while(n[++i]&&n[i]!=t);return!!n[i]}})(Element.prototype)}function a(e,t,n){try{e.call(t,n)}catch(e){console.log(e)}}var s=window.searxng||{};s.on=function(i,e,r,t){t=t||false;if(typeof i!=="string"){i.addEventListener(e,r,t)}else{o.addEventListener(e,function(e){var t=e.target||e.srcElement,n=false;while(t&&t.matches&&t!==o&&!(n=t.matches(i)))t=t.parentElement;if(n)a(r,t,e)},t)}};s.ready=function(e){if(document.readyState!="loading"){e.call(t)}else{t.addEventListener("DOMContentLoaded",e.bind(t))}};s.http=function(e,t){var n=new XMLHttpRequest,i=function(){},r=function(){},o={then:function(e){i=e;return o},catch:function(e){r=e;return o}};try{n.open(e,t,true);n.onload=function(){if(n.status==200){i(n.response,n.responseType)}else{r(Error(n.statusText))}};n.onerror=function(){r(Error("Network Error"))};n.onabort=function(){r(Error("Transaction is aborted"))};n.send()}catch(e){r(e)}return o};s.loadStyle=function(e){var t=s.static_path+e,n="style_"+e.replace(".","_"),i=o.getElementById(n);if(i===null){i=o.createElement("link");i.setAttribute("id",n);i.setAttribute("rel","stylesheet");i.setAttribute("type","text/css");i.setAttribute("href",t);o.body.appendChild(i)}};s.loadScript=function(e,t){var n=s.static_path+e,i="script_"+e.replace(".","_"),r=o.getElementById(i);if(r===null){r=o.createElement("script");r.setAttribute("id",i);r.setAttribute("src",n);r.onload=t;r.onerror=function(){r.setAttribute("error","1")};o.body.appendChild(r)}else if(!r.hasAttribute("error")){try{t.apply(r,[])}catch(e){console.log(e)}}else{console.log("callback not executed : script '"+n+"' not loaded.")}};s.insertBefore=function(e,t){t.parentNode.insertBefore(e,t)};s.insertAfter=function(e,t){t.parentNode.insertAfter(e,t.nextSibling)};s.on(".close","click",function(){this.parentNode.classList.add("invisible")});return s}(window,document);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 i(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(t){if(!e(t.target)){r(this)(true);let e=n(t.target);if(i(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){r(e)(true)}if(i(e)){searxng.selectImage(e)}}},true);var d={27:{key:"Escape",fun:o,des:"remove focus from the focused input",cat:"Control"},73:{key:"i",fun:p,des:"focus on the search input",cat:"Control"},66:{key:"b",fun:u(-window.innerHeight),des:"scroll one page up",cat:"Navigation"},70:{key:"f",fun:u(window.innerHeight),des:"scroll one page down",cat:"Navigation"},85:{key:"u",fun:u(-window.innerHeight/2),des:"scroll half a page up",cat:"Navigation"},68:{key:"d",fun:u(window.innerHeight/2),des:"scroll half a page down",cat:"Navigation"},71:{key:"g",fun:c(-document.body.scrollHeight,"top"),des:"scroll to the top of the page",cat:"Navigation"},86:{key:"v",fun:c(document.body.scrollHeight,"bottom"),des:"scroll to the bottom of the page",cat:"Navigation"},75:{key:"k",fun:r("up"),des:"select previous search result",cat:"Results"},74:{key:"j",fun:r("down"),des:"select next search result",cat:"Results"},80:{key:"p",fun:l(),des:"go to previous page",cat:"Results"},78:{key:"n",fun:s(),des:"go to next page",cat:"Results"},79:{key:"o",fun:h(false),des:"open search result",cat:"Results"},84:{key:"t",fun:h(true),des:"open the result in a new tab",cat:"Results"},82:{key:"r",fun:t,des:"reload page from the server",cat:"Control"},72:{key:"h",fun:m,des:"toggle help window",cat:"Other"}};if(searxng.hotkeys){searxng.on(document,"keydown",function(e){if(Object.prototype.hasOwnProperty.call(d,e.keyCode)&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey){var t=e.target.tagName.toLowerCase();if(e.keyCode===27){d[e.keyCode].fun(e)}else{if(e.target===document.body||t==="a"||t==="button"){e.preventDefault();d[e.keyCode].fun()}}}})}function r(d){return function(e){var t=document.querySelector(".result[data-vim-selected]"),n=d;if(t===null){t=document.querySelector(".result");if(t===null){return}if(d==="down"||d==="up"){n=t}}var i,r=document.querySelectorAll(".result");if(typeof n!=="string"){i=n}else{switch(n){case"visible":var o=document.documentElement.scrollTop||document.body.scrollTop;var a=o+document.documentElement.clientHeight;for(var s=0;s<r.length;s++){i=r[s];var l=i.offsetTop;var u=l+i.clientHeight;if(u<=a&&l>o){break}}break;case"down":i=t.nextElementSibling;if(i===null){i=r[0]}break;case"up":i=t.previousElementSibling;if(i===null){i=r[r.length-1]}break;case"bottom":i=r[r.length-1];break;case"top":default:i=r[0]}}if(i){t.removeAttribute("data-vim-selected");i.setAttribute("data-vim-selected","true");var c=i.querySelector("h3 a")||i.querySelector("a");if(c!==null){c.focus()}if(!e){f()}}}}function t(){document.location.reload(true)}function o(e){const t=e.target.tagName.toLowerCase();if(document.activeElement&&(t==="input"||t==="select"||t==="textarea")){document.activeElement.blur()}else{searxng.closeDetail()}}function a(t){return function(){var e=document.querySelector(t);if(e){e.click()}}}function s(){return a('nav#pagination .next_page button[type="submit"]')}function l(){return a('nav#pagination .previous_page button[type="submit"]')}function f(){var e=document.querySelector(".result[data-vim-selected]");if(e===null){return}var t=document.documentElement.scrollTop||document.body.scrollTop,n=document.documentElement.clientHeight,i=e.offsetTop,r=i+e.clientHeight,o=120;if(e.previousElementSibling===null&&r<n){window.scroll(window.scrollX,0);return}if(t>i-o){window.scroll(window.scrollX,i-o)}else{var a=t+n;if(a<r+o){window.scroll(window.scrollX,r-n+o)}}}function u(e){return function(){window.scrollBy(0,e);r("visible")()}}function c(e,t){return function(){window.scrollTo(0,e);r(t)()}}function p(){window.scrollTo(0,0);document.querySelector("#q").focus()}function h(n){return function(){var e=document.querySelector(".result[data-vim-selected] h3 a");if(e===null){e=document.querySelector(".result[data-vim-selected] > a")}if(e!==null){var t=e.getAttribute("href");if(n){window.open(t)}else{window.location.href=t}}}}function g(e){var n={};for(var t in d){var i=d[t];n[i.cat]=n[i.cat]||[];n[i.cat].push(i)}var r=Object.keys(n).sort(function(e,t){return n[t].length-n[e].length});if(r.length===0){return}var o='<a href="#" class="close" aria-label="close" title="close">×</a>';o+="<h3>How to navigate searx with Vim-like hotkeys</h3>";o+="<table>";for(var a=0;a<r.length;a++){var s=n[r[a]];var l=a===r.length-1;var u=a%2===0;if(u){o+="<tr>"}o+="<td>";o+="<h4>"+s[0].cat+"</h4>";o+='<ul class="list-unstyled">';for(var c in s){o+="<li><kbd>"+s[c].key+"</kbd> "+s[c].des+"</li>"}o+="</ul>";o+="</td>";if(!u||l){o+="</tr>"}}o+="</table>";e.innerHTML=o}function m(){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";g(e);g(e);g(e);var t=document.getElementsByTagName("body")[0];t.appendChild(e)}else{e.classList.toggle("invisible");return}}searxng.scrollPageToSelected=f;searxng.selectNext=r("down");searxng.selectPrevious=r("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 g=JSON.parse(this.dataset.mapBoundingbox);var m=JSON.parse(this.dataset.mapGeojson);n.loadStyle("css/leaflet.css");n.loadScript("js/leaflet.js",function(){var e=null;if(g){var t=L.latLng(g[0],g[2]);var n=L.latLng(g[1],g[3]);e=L.latLngBounds(t,n)}var i=L.map(d);var r="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";var o='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';var a=new L.TileLayer(r,{minZoom:1,maxZoom:19,attribution:o});var s="https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png";var l='Wikimedia maps | Maps data © <a href="https://openstreetmap.org">OpenStreetMap contributors</a>';var u=new L.TileLayer(s,{minZoom:1,maxZoom:19,attribution:l});if(e){setTimeout(function(){i.fitBounds(e,{maxZoom:17})},0)}else if(f&&p){if(h){i.setView(new L.latLng(p,f),h)}else{i.setView(new L.latLng(p,f),8)}}i.addLayer(a);var c={"OSM Mapnik":a,"OSM Wikimedia":u};L.control.layers(c).addTo(i);if(m){L.geoJson(m).addTo(i)}});e.preventDefault()})})})(window,document,window.searxng);(function(e,o,a){"use strict";a.ready(function(){let r=null;function e(){if(r==null){a.http("GET","engine_descriptions.json").then(function(e){r=JSON.parse(e);for(const[t,n]of Object.entries(r)){let e=o.querySelectorAll('[data-engine-name="'+t+'"] .engine-description');for(const i of e){let e=" (<i>"+a.translations["Source"]+":&nbsp;"+n[1]+"</i>)";i.innerHTML=n[0]+e}}})}}if(o.querySelector('body[class="preferences_endpoint"]')){for(const t of o.querySelectorAll("[data-engine-name]")){a.on(t,"mouseenter",e)}}})})(window,document,window.searxng);(function(e,s,l){"use strict";l.ready(function(){l.image_thumbnail_layout=new l.ImageLayout("#urls","#urls .result-images","img.image_thumbnail",14,6,200);l.image_thumbnail_layout.watch();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 i=s.querySelector(n);var r=this.innerHTML;if(this.classList.contains("collapsed")){r=r.replace(e,t)}else{r=r.replace(t,e)}this.innerHTML=r;this.classList.toggle("collapsed");i.classList.toggle("invisible")});l.on(".media-loader","click",function(){var e=this.getAttribute("data-target");var t=s.querySelector(e+" > iframe");var n=t.getAttribute("src");if(n===null||n===undefined||n===false){t.setAttribute("src",t.getAttribute("data-src"))}});l.selectImage=function(e){if(e){const t=e.querySelector(".result-images-source img");const n=e.querySelector(".image_thumbnail");const i=e.querySelector(".detail");if(t){const r=t.getAttribute("data-src");if(r){const o=s.createElement("div");const a=new Image;o.classList.add("loader");i.appendChild(o);a.onload=e=>{t.src=r;o.remove()};a.onerror=e=>{o.remove()};a.src=r;t.src=n.src;t.removeAttribute("data-src")}}}s.getElementById("results").classList.add("image-detail-open");l.image_thumbnail_layout.align();l.scrollPageToSelected()};l.closeDetail=function(e){s.getElementById("results").classList.remove("image-detail-open");l.image_thumbnail_layout.align();l.scrollPageToSelected()};l.on(".result-detail-close","click",e=>{e.preventDefault();l.closeDetail()});l.on(".result-detail-previous","click",e=>l.selectPrevious(false));l.on(".result-detail-next","click",e=>l.selectNext(false));e.addEventListener("scroll",function(){var e=s.getElementById("backToTop"),t=document.documentElement.scrollTop||document.body.scrollTop,n=s.getElementById("results");if(e!==null){if(t>=100){n.classList.add("scrolling")}else{n.classList.remove("scrolling")}}},true)})})(window,document,window.searxng);(function(t,n,i){"use strict";var r=true,o="q",a;function s(e){if(e.setSelectionRange){var t=e.value.length;e.setSelectionRange(t,t)}}function l(){if(a.value.length>0){var e=document.getElementById("search");setTimeout(e.submit.bind(e),0)}}function u(e){var t=document.getElementById("clear_search");var n=function(){if(e.value.length===0){t.classList.add("empty")}else{t.classList.remove("empty")}};n();t.addEventListener("click",function(){e.value="";e.focus();n()});e.addEventListener("keyup",n,false)}i.ready(function(){a=n.getElementById(o);function e(){if(r){s(a);r=false}else{}}if(a!==null){u(a);if(i.autocompleter){i.autocomplete=AutoComplete.call(t,{Url:"./autocompleter",EmptyMessage:i.translations.no_item_found,HttpMethod:i.method,HttpHeaders:{"Content-type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},MinChars:4,Delay:300,_Position:function(){this.DOMResults.setAttribute("class","autocomplete");this.DOMResults.style.top=this.Input.offsetTop+this.Input.offsetHeight+"px";this.DOMResults.style.left=this.Input.offsetLeft+"px";this.DOMResults.style.width=this.Input.clientWidth+"px"}},"#"+o);t.addEventListener("resize",function(){var e=new CustomEvent("position");a.dispatchEvent(e)})}a.addEventListener("focus",e,false);a.focus()}if(a!==null&&n.querySelector(".help")!=null&&i.search_on_category_select){n.querySelector(".help").className="invisible";i.on("#categories input","change",function(){var e,t=n.querySelectorAll('#categories input[type="checkbox"]');for(e=0;e<t.length;e++){if(t[e]!==this&&t[e].checked){t[e].click()}}if(!this.checked){this.click()}l();return false});i.on(n.getElementById("safesearch"),"change",l);i.on(n.getElementById("time_range"),"change",l);i.on(n.getElementById("language"),"change",l)}})})(window,document,window.searxng);
/**
*
* Google Image Layout v0.0.1
@@ -26,7 +26,7 @@ window.searxng=function(t,o){"use strict";if(t.Element){(function(e){e.matches=e
* );
* searxng.image_thumbnail_layout.watch();
*/
-(function(s,c){function e(e,t,n,r,i,o){this.container_selector=e;this.results_selector=t;this.img_selector=n;this.verticalMargin=r;this.horizontalMargin=i;this.maxHeight=o;this.isAlignDone=true}e.prototype._getHeigth=function(e,t){var n,r;var i=0;for(n=0;n<e.length;n++){r=e[n];if(r.naturalWidth>0&&r.naturalHeight>0){i+=r.naturalWidth/r.naturalHeight}else{i+=1}}return(t-e.length*this.verticalMargin)/i};e.prototype._setSize=function(e,t){var n,r,i;var o=e.length,a;for(n=0;n<o;n++){r=e[n];if(r.naturalWidth>0&&r.naturalHeight>0){i=t*r.naturalWidth/r.naturalHeight}else{i=t}r.style.width=i+"px";r.style.height=t+"px";r.style.marginLeft=this.horizontalMargin+"px";r.style.marginTop=this.horizontalMargin+"px";r.style.marginRight=this.verticalMargin-7+"px";r.style.marginBottom=this.verticalMargin-7+"px";a=r.parentNode.parentNode;if(!a.classList.contains("js")){a.classList.add("js")}}};e.prototype._alignImgs=function(e){var t,n,r,i;var o=c.querySelector(this.container_selector);var a=window.getComputedStyle(o);var s=parseInt(a.getPropertyValue("padding-left"),10);var l=parseInt(a.getPropertyValue("padding-right"),10);var u=o.clientWidth-s-l;while(e.length>0){t=true;for(r=1;r<=e.length&&t;r++){n=e.slice(0,r);i=this._getHeigth(n,u);if(i<this.maxHeight){this._setSize(n,i);e=e.slice(r);t=false}}if(t){this._setSize(n,Math.min(this.maxHeight,i));break}}};e.prototype.align=function(){var e;var t=c.querySelectorAll(this.results_selector);var n=t.length;var r=null;var i=null;var o=[];for(e=0;e<n;e++){i=t[e];if(i.previousElementSibling!==r&&o.length>0){this._alignImgs(o);o=[]}o.push(i.querySelector(this.img_selector));r=i}if(o.length>0){this._alignImgs(o)}};e.prototype.watch=function(){var e,t;var n=this;var r=c.querySelectorAll(this.results_selector);var i=r.length;function o(e){e.originalTarget.src=s.searxng.static_path+s.searxng.theme.img_load_error}function a(){if(n.isAlignDone){n.isAlignDone=false;setTimeout(function(){n.align();n.isAlignDone=true},100)}}s.addEventListener("pageshow",a);s.addEventListener("load",a);s.addEventListener("resize",a);for(e=0;e<i;e++){t=r[e].querySelector(this.img_selector);if(t!==null&&t!==undefined){t.addEventListener("load",a);t.addEventListener("error",a);if(s.searxng.theme.img_load_error){t.addEventListener("error",o,{once:true})}}}};s.searxng.ImageLayout=e})(window,document);(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(o,a,s){function l(n,e){if(!a[n]){if(!o[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 i=a[n]={exports:{}};o[n][0].call(i.exports,function(e){var t=o[n][1][e];return l(t||e)},i,i.exports,c,o,a,s)}return a[n].exports}for(var u="function"==typeof require&&require,e=0;e<s.length;e++)l(s[e]);return l}return c}()({1:[function(e,t,n){
+(function(s,c){function e(e,t,n,i,r,o){this.container_selector=e;this.results_selector=t;this.img_selector=n;this.verticalMargin=i;this.horizontalMargin=r;this.maxHeight=o;this.isAlignDone=true}e.prototype._getHeigth=function(e,t){var n,i;var r=0;for(n=0;n<e.length;n++){i=e[n];if(i.naturalWidth>0&&i.naturalHeight>0){r+=i.naturalWidth/i.naturalHeight}else{r+=1}}return(t-e.length*this.verticalMargin)/r};e.prototype._setSize=function(e,t){var n,i,r;var o=e.length,a;for(n=0;n<o;n++){i=e[n];if(i.naturalWidth>0&&i.naturalHeight>0){r=t*i.naturalWidth/i.naturalHeight}else{r=t}i.style.width=r+"px";i.style.height=t+"px";i.style.marginLeft=this.horizontalMargin+"px";i.style.marginTop=this.horizontalMargin+"px";i.style.marginRight=this.verticalMargin-7+"px";i.style.marginBottom=this.verticalMargin-7+"px";a=i.parentNode.parentNode;if(!a.classList.contains("js")){a.classList.add("js")}}};e.prototype._alignImgs=function(e){var t,n,i,r;var o=c.querySelector(this.container_selector);var a=window.getComputedStyle(o);var s=parseInt(a.getPropertyValue("padding-left"),10);var l=parseInt(a.getPropertyValue("padding-right"),10);var u=o.clientWidth-s-l;while(e.length>0){t=true;for(i=1;i<=e.length&&t;i++){n=e.slice(0,i);r=this._getHeigth(n,u);if(r<this.maxHeight){this._setSize(n,r);e=e.slice(i);t=false}}if(t){this._setSize(n,Math.min(this.maxHeight,r));break}}};e.prototype.align=function(){var e;var t=c.querySelectorAll(this.results_selector);var n=t.length;var i=null;var r=null;var o=[];for(e=0;e<n;e++){r=t[e];if(r.previousElementSibling!==i&&o.length>0){this._alignImgs(o);o=[]}o.push(r.querySelector(this.img_selector));i=r}if(o.length>0){this._alignImgs(o)}};e.prototype.watch=function(){var e,t;var n=this;var i=c.querySelectorAll(this.results_selector);var r=i.length;function o(e){e.originalTarget.src=s.searxng.static_path+s.searxng.theme.img_load_error}function a(){if(n.isAlignDone){n.isAlignDone=false;setTimeout(function(){n.align();n.isAlignDone=true},100)}}s.addEventListener("pageshow",a);s.addEventListener("load",a);s.addEventListener("resize",a);for(e=0;e<r;e++){t=i[e].querySelector(this.img_selector);if(t!==null&&t!==undefined){t.addEventListener("load",a);t.addEventListener("error",a);if(s.searxng.theme.img_load_error){t.addEventListener("error",o,{once:true})}}}};s.searxng.ImageLayout=e})(window,document);(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(o,a,s){function l(n,e){if(!a[n]){if(!o[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(u)return u(n,!0);var i=new Error("Cannot find module '"+n+"'");throw i.code="MODULE_NOT_FOUND",i}var r=a[n]={exports:{}};o[n][0].call(r.exports,function(e){var t=o[n][1][e];return l(t||e)},r,r.exports,c,o,a,s)}return a[n].exports}for(var u="function"==typeof require&&require,e=0;e<s.length;e++)l(s[e]);return l}return c}()({1:[function(e,t,n){
/*
* @license MIT
*
@@ -36,5 +36,5 @@ window.searxng=function(t,o){"use strict";if(t.Element){(function(e){e.matches=e
*
* (c) 2017, Baptiste Donaux
*/
-"use strict";var l;(function(e){e[e["AND"]=0]="AND";e[e["OR"]=1]="OR"})(l||(l={}));var o;(function(e){e[e["KEYDOWN"]=0]="KEYDOWN";e[e["KEYUP"]=1]="KEYUP"})(o||(o={}));var r=function(){function s(t,e){if(t===void 0){t={}}if(e===void 0){e="[data-autocomplete]"}if(Array.isArray(e)){e.forEach(function(e){new s(t,e)})}else if(typeof e=="string"){var n=document.querySelectorAll(e);Array.prototype.forEach.call(n,function(e){new s(t,e)})}else{var r=s.merge(s.defaults,t,{DOMResults:document.createElement("div")});s.prototype.create(r,e);return r}}s.prototype.create=function(e,t){e.Input=t;if(e.Input.nodeName.match(/^INPUT$/i)&&(e.Input.hasAttribute("type")===false||e.Input.getAttribute("type").match(/^TEXT|SEARCH$/i))){e.Input.setAttribute("autocomplete","off");e._Position(e);e.Input.parentNode.appendChild(e.DOMResults);e.$Listeners={blur:e._Blur.bind(e),destroy:s.prototype.destroy.bind(null,e),focus:e._Focus.bind(e),keyup:s.prototype.event.bind(null,e,o.KEYUP),keydown:s.prototype.event.bind(null,e,o.KEYDOWN),position:e._Position.bind(e)};for(var n in e.$Listeners){e.Input.addEventListener(n,e.$Listeners[n])}}};s.prototype.getEventsByType=function(e,t){var n={};for(var r in e.KeyboardMappings){var i=o.KEYUP;if(e.KeyboardMappings[r].Event!==undefined){i=e.KeyboardMappings[r].Event}if(i==t){n[r]=e.KeyboardMappings[r]}}return n};s.prototype.event=function(e,t,n){var r=function(e){if(a===true&&o.Operator==l.AND||a===false&&o.Operator==l.OR){e=s.merge({Not:false},e);if(e.hasOwnProperty("Is")){if(e.Is==n.keyCode){a=!e.Not}else{a=e.Not}}else if(e.hasOwnProperty("From")&&e.hasOwnProperty("To")){if(n.keyCode>=e.From&&n.keyCode<=e.To){a=!e.Not}else{a=e.Not}}}};for(var i in s.prototype.getEventsByType(e,t)){var o=s.merge({Operator:l.AND},e.KeyboardMappings[i]),a=l.AND==o.Operator;o.Conditions.forEach(r);if(a===true){o.Callback.call(e,n)}}};s.prototype.makeRequest=function(e,t,n){var r=Object.getOwnPropertyNames(e.HttpHeaders),i=new XMLHttpRequest,o=e._HttpMethod(),a=e._Url(),s=e._Pre(),l=encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(s);if(o.match(/^GET$/i)){if(a.indexOf("?")!==-1){a+="&"+l}else{a+="?"+l}}i.open(o,a,true);for(var u=r.length-1;u>=0;u--){i.setRequestHeader(r[u],e.HttpHeaders[r[u]])}i.onreadystatechange=function(){if(i.readyState==4&&i.status==200){e.$Cache[s]=i.response;t(i.response)}else if(i.status>=400){n()}};return i};s.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(s.prototype.ajax.bind(null,e,t,false),e.Delay)}else{if(e.Request){e.Request.abort()}e.Request=t;e.Request.send(e._QueryArg()+"="+e._Pre())}};s.prototype.cache=function(e,t,n){var r=e._Cache(e._Pre());if(r===undefined){var i=s.prototype.makeRequest(e,t,n);s.prototype.ajax(e,i)}else{t(r)}};s.prototype.destroy=function(e){for(var t in e.$Listeners){e.Input.removeEventListener(t,e.$Listeners[t])}e.DOMResults.parentNode.removeChild(e.DOMResults)};s.merge=function(){var e={},t;for(var n=0;n<arguments.length;n++){for(t in arguments[n]){e[t]=arguments[n][t]}}return e};s.defaults={Delay:150,EmptyMessage:"No result here",Highlight:{getRegex:function(e){return new RegExp(e,"ig")},transform:function(e){return"<strong>"+e+"</strong>"}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:false}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");if(t!==null){e.preventDefault();this._Select(t);this.DOMResults.setAttribute("class","autocomplete")}}},Operator:l.AND,Event:o.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:false},{Is:40,Not:false}],Callback:function(e){e.preventDefault()},Operator:l.OR,Event:o.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:false},{Is:40,Not:false}],Callback:function(e){e.preventDefault();var t=this.DOMResults.querySelector("li:first-child:not(.locked)"),n=this.DOMResults.querySelector("li:last-child:not(.locked)"),r=this.DOMResults.querySelector("li.active");if(r){var i=Array.prototype.indexOf.call(r.parentNode.children,r),o=i+(e.keyCode-39),a=this.DOMResults.getElementsByTagName("li").length;if(o<0){o=a-1}else if(o>=a){o=0}r.classList.remove("active");r.parentElement.children.item(o).classList.add("active")}else if(n&&e.keyCode==38){n.classList.add("active")}else if(t){t.classList.add("active")}},Operator:l.OR,Event:o.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:true},{From:35,To:40,Not:true}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),t=this._Pre();if(t!==""&&t.length>=this._MinChars()){if(!e||t!=e){this.DOMResults.setAttribute("class","autocomplete open")}s.prototype.cache(this,function(e){this._Render(this._Post(e));this._Open()}.bind(this),this._Error)}else{this._Close()}},Operator:l.AND,Event:o.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var e="";if(this.Input.hasAttribute("data-autocomplete-empty-message")){e=this.Input.getAttribute("data-autocomplete-empty-message")}else if(this.EmptyMessage!==false){e=this.EmptyMessage}else{e=""}return e},_Limit:function(){var e=this.Input.getAttribute("data-autocomplete-limit");if(isNaN(e)||e===null){return this.Limit}return parseInt(e,10)},_MinChars:function(){var e=this.Input.getAttribute("data-autocomplete-minchars");if(isNaN(e)||e===null){return this.MinChars}return parseInt(e,10)},_Highlight:function(e){return e.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){if(this.Input.hasAttribute("data-autocomplete-method")){return this.Input.getAttribute("data-autocomplete-method")}return this.HttpMethod},_QueryArg:function(){if(this.Input.hasAttribute("data-autocomplete-param-name")){return this.Input.getAttribute("data-autocomplete-param-name")}return this.QueryArg},_Url:function(){if(this.Input.hasAttribute("data-autocomplete")){return this.Input.getAttribute("data-autocomplete")}return this.Url},_Blur:function(e){if(e===void 0){e=false}if(e){this._Close()}else{var t=this;setTimeout(function(){t._Blur(true)},150)}},_Cache:function(e){return this.$Cache[e]},_Focus:function(){var e=this.Input.getAttribute("data-autocomplete-old-value");if((!e||this.Input.value!=e)&&this._MinChars()<=this.Input.value.length){this.DOMResults.setAttribute("class","autocomplete open")}},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){if(e.getAttribute("class")!="locked"){e.onclick=function(){t._Select(e)}}})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete");this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(e){var t;if(typeof e=="string"){t=this._RenderRaw(e)}else{t=this._RenderResponseItems(e)}if(this.DOMResults.hasChildNodes()){this.DOMResults.removeChild(this.DOMResults.childNodes[0])}this.DOMResults.appendChild(t)},_RenderResponseItems:function(e){var t=document.createElement("ul"),n=document.createElement("li"),r=this._Limit();if(r<0){e=e.reverse()}else if(r===0){r=e.length}for(var i=0;i<Math.min(Math.abs(r),e.length);i++){n.innerHTML=e[i].Label;n.setAttribute("data-autocomplete-value",e[i].Value);t.appendChild(n);n=document.createElement("li")}return t},_RenderRaw:function(e){var t=document.createElement("ul"),n=document.createElement("li");if(e.length>0){this.DOMResults.innerHTML=e}else{var r=this._EmptyMessage();if(r!==""){n.innerHTML=r;n.setAttribute("class","locked");t.appendChild(n)}}return t},_Post:function(t){try{var e=[];var n=JSON.parse(t);if(Object.keys(n).length===0){return""}if(Array.isArray(n)){for(var r=0;r<Object.keys(n).length;r++){e[e.length]={Value:n[r],Label:this._Highlight(n[r])}}}else{for(var i in n){e.push({Value:i,Label:this._Highlight(n[i])})}}return e}catch(e){return t}},_Pre:function(){return this.Input.value},_Select:function(e){if(e.hasAttribute("data-autocomplete-value")){this.Input.value=e.getAttribute("data-autocomplete-value")}else{this.Input.value=e.innerHTML}this.Input.setAttribute("data-autocomplete-old-value",this.Input.value)},_Error:function(){},$AjaxTimer:null,$Cache:{},$Listeners:{}};return s}();t.exports=r},{}]},{},[1])(1)});
+"use strict";var l;(function(e){e[e["AND"]=0]="AND";e[e["OR"]=1]="OR"})(l||(l={}));var o;(function(e){e[e["KEYDOWN"]=0]="KEYDOWN";e[e["KEYUP"]=1]="KEYUP"})(o||(o={}));var i=function(){function s(t,e){if(t===void 0){t={}}if(e===void 0){e="[data-autocomplete]"}if(Array.isArray(e)){e.forEach(function(e){new s(t,e)})}else if(typeof e=="string"){var n=document.querySelectorAll(e);Array.prototype.forEach.call(n,function(e){new s(t,e)})}else{var i=s.merge(s.defaults,t,{DOMResults:document.createElement("div")});s.prototype.create(i,e);return i}}s.prototype.create=function(e,t){e.Input=t;if(e.Input.nodeName.match(/^INPUT$/i)&&(e.Input.hasAttribute("type")===false||e.Input.getAttribute("type").match(/^TEXT|SEARCH$/i))){e.Input.setAttribute("autocomplete","off");e._Position(e);e.Input.parentNode.appendChild(e.DOMResults);e.$Listeners={blur:e._Blur.bind(e),destroy:s.prototype.destroy.bind(null,e),focus:e._Focus.bind(e),keyup:s.prototype.event.bind(null,e,o.KEYUP),keydown:s.prototype.event.bind(null,e,o.KEYDOWN),position:e._Position.bind(e)};for(var n in e.$Listeners){e.Input.addEventListener(n,e.$Listeners[n])}}};s.prototype.getEventsByType=function(e,t){var n={};for(var i in e.KeyboardMappings){var r=o.KEYUP;if(e.KeyboardMappings[i].Event!==undefined){r=e.KeyboardMappings[i].Event}if(r==t){n[i]=e.KeyboardMappings[i]}}return n};s.prototype.event=function(e,t,n){var i=function(e){if(a===true&&o.Operator==l.AND||a===false&&o.Operator==l.OR){e=s.merge({Not:false},e);if(e.hasOwnProperty("Is")){if(e.Is==n.keyCode){a=!e.Not}else{a=e.Not}}else if(e.hasOwnProperty("From")&&e.hasOwnProperty("To")){if(n.keyCode>=e.From&&n.keyCode<=e.To){a=!e.Not}else{a=e.Not}}}};for(var r in s.prototype.getEventsByType(e,t)){var o=s.merge({Operator:l.AND},e.KeyboardMappings[r]),a=l.AND==o.Operator;o.Conditions.forEach(i);if(a===true){o.Callback.call(e,n)}}};s.prototype.makeRequest=function(e,t,n){var i=Object.getOwnPropertyNames(e.HttpHeaders),r=new XMLHttpRequest,o=e._HttpMethod(),a=e._Url(),s=e._Pre(),l=encodeURIComponent(e._QueryArg())+"="+encodeURIComponent(s);if(o.match(/^GET$/i)){if(a.indexOf("?")!==-1){a+="&"+l}else{a+="?"+l}}r.open(o,a,true);for(var u=i.length-1;u>=0;u--){r.setRequestHeader(i[u],e.HttpHeaders[i[u]])}r.onreadystatechange=function(){if(r.readyState==4&&r.status==200){e.$Cache[s]=r.response;t(r.response)}else if(r.status>=400){n()}};return r};s.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(s.prototype.ajax.bind(null,e,t,false),e.Delay)}else{if(e.Request){e.Request.abort()}e.Request=t;e.Request.send(e._QueryArg()+"="+e._Pre())}};s.prototype.cache=function(e,t,n){var i=e._Cache(e._Pre());if(i===undefined){var r=s.prototype.makeRequest(e,t,n);s.prototype.ajax(e,r)}else{t(i)}};s.prototype.destroy=function(e){for(var t in e.$Listeners){e.Input.removeEventListener(t,e.$Listeners[t])}e.DOMResults.parentNode.removeChild(e.DOMResults)};s.merge=function(){var e={},t;for(var n=0;n<arguments.length;n++){for(t in arguments[n]){e[t]=arguments[n][t]}}return e};s.defaults={Delay:150,EmptyMessage:"No result here",Highlight:{getRegex:function(e){return new RegExp(e,"ig")},transform:function(e){return"<strong>"+e+"</strong>"}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:false}],Callback:function(e){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");if(t!==null){e.preventDefault();this._Select(t);this.DOMResults.setAttribute("class","autocomplete")}}},Operator:l.AND,Event:o.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:false},{Is:40,Not:false}],Callback:function(e){e.preventDefault()},Operator:l.OR,Event:o.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:false},{Is:40,Not:false}],Callback:function(e){e.preventDefault();var t=this.DOMResults.querySelector("li:first-child:not(.locked)"),n=this.DOMResults.querySelector("li:last-child:not(.locked)"),i=this.DOMResults.querySelector("li.active");if(i){var r=Array.prototype.indexOf.call(i.parentNode.children,i),o=r+(e.keyCode-39),a=this.DOMResults.getElementsByTagName("li").length;if(o<0){o=a-1}else if(o>=a){o=0}i.classList.remove("active");i.parentElement.children.item(o).classList.add("active")}else if(n&&e.keyCode==38){n.classList.add("active")}else if(t){t.classList.add("active")}},Operator:l.OR,Event:o.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:true},{From:35,To:40,Not:true}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),t=this._Pre();if(t!==""&&t.length>=this._MinChars()){if(!e||t!=e){this.DOMResults.setAttribute("class","autocomplete open")}s.prototype.cache(this,function(e){this._Render(this._Post(e));this._Open()}.bind(this),this._Error)}else{this._Close()}},Operator:l.AND,Event:o.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var e="";if(this.Input.hasAttribute("data-autocomplete-empty-message")){e=this.Input.getAttribute("data-autocomplete-empty-message")}else if(this.EmptyMessage!==false){e=this.EmptyMessage}else{e=""}return e},_Limit:function(){var e=this.Input.getAttribute("data-autocomplete-limit");if(isNaN(e)||e===null){return this.Limit}return parseInt(e,10)},_MinChars:function(){var e=this.Input.getAttribute("data-autocomplete-minchars");if(isNaN(e)||e===null){return this.MinChars}return parseInt(e,10)},_Highlight:function(e){return e.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){if(this.Input.hasAttribute("data-autocomplete-method")){return this.Input.getAttribute("data-autocomplete-method")}return this.HttpMethod},_QueryArg:function(){if(this.Input.hasAttribute("data-autocomplete-param-name")){return this.Input.getAttribute("data-autocomplete-param-name")}return this.QueryArg},_Url:function(){if(this.Input.hasAttribute("data-autocomplete")){return this.Input.getAttribute("data-autocomplete")}return this.Url},_Blur:function(e){if(e===void 0){e=false}if(e){this._Close()}else{var t=this;setTimeout(function(){t._Blur(true)},150)}},_Cache:function(e){return this.$Cache[e]},_Focus:function(){var e=this.Input.getAttribute("data-autocomplete-old-value");if((!e||this.Input.value!=e)&&this._MinChars()<=this.Input.value.length){this.DOMResults.setAttribute("class","autocomplete open")}},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){if(e.getAttribute("class")!="locked"){e.onclick=function(){t._Select(e)}}})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete");this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(e){var t;if(typeof e=="string"){t=this._RenderRaw(e)}else{t=this._RenderResponseItems(e)}if(this.DOMResults.hasChildNodes()){this.DOMResults.removeChild(this.DOMResults.childNodes[0])}this.DOMResults.appendChild(t)},_RenderResponseItems:function(e){var t=document.createElement("ul"),n=document.createElement("li"),i=this._Limit();if(i<0){e=e.reverse()}else if(i===0){i=e.length}for(var r=0;r<Math.min(Math.abs(i),e.length);r++){n.innerHTML=e[r].Label;n.setAttribute("data-autocomplete-value",e[r].Value);t.appendChild(n);n=document.createElement("li")}return t},_RenderRaw:function(e){var t=document.createElement("ul"),n=document.createElement("li");if(e.length>0){this.DOMResults.innerHTML=e}else{var i=this._EmptyMessage();if(i!==""){n.innerHTML=i;n.setAttribute("class","locked");t.appendChild(n)}}return t},_Post:function(t){try{var e=[];var n=JSON.parse(t);if(Object.keys(n).length===0){return""}if(Array.isArray(n)){for(var i=0;i<Object.keys(n).length;i++){e[e.length]={Value:n[i],Label:this._Highlight(n[i])}}}else{for(var r in n){e.push({Value:r,Label:this._Highlight(n[r])})}}return e}catch(e){return t}},_Pre:function(){return this.Input.value},_Select:function(e){if(e.hasAttribute("data-autocomplete-value")){this.Input.value=e.getAttribute("data-autocomplete-value")}else{this.Input.value=e.innerHTML}this.Input.setAttribute("data-autocomplete-old-value",this.Input.value)},_Error:function(){},$AjaxTimer:null,$Cache:{},$Listeners:{}};return s}();t.exports=i},{}]},{},[1])(1)});
//# sourceMappingURL=searxng.min.js.map \ No newline at end of file
diff --git a/searx/static/themes/simple/js/searxng.min.js.map b/searx/static/themes/simple/js/searxng.min.js.map
index a11737204..4bddf9335 100644
--- a/searx/static/themes/simple/js/searxng.min.js.map
+++ b/searx/static/themes/simple/js/searxng.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"searxng.min.js","sources":["../src/js/main/00_toolkit.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","../../__common__/js/image_layout.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) {\n var req = new XMLHttpRequest(),\n resolve = function() {},\n reject = function() {},\n promise = {\n then: function(callback) { resolve = callback; return promise; },\n catch: function(callback) { reject = callback; return promise; }\n };\n\n try {\n req.open(method, url, true);\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 // Make the request\n req.send();\n } catch (ex) {\n reject(ex);\n }\n\n return promise;\n };\n\n searxng.loadStyle = function(src) {\n var path = searxng.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.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 return searxng;\n})(window, document);\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 <div class=\"detail\"> 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);\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 var vimKeys = {\n 27: {\n key: 'Escape',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 73: {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 66: {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 70: {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 85: {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 68: {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 71: {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 86: {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 75: {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 74: {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 80: {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 78: {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 79: {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 84: {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n 82: {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 72: {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n }\n };\n\n if (searxng.hotkeys) {\n searxng.on(document, \"keydown\", function(e) {\n // check for modifiers so we don't break browser's hotkeys\n if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.keyCode === 27) {\n vimKeys[e.keyCode].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n vimKeys[e.keyCode].fun();\n }\n }\n }\n });\n }\n\n function highlightResult(which) {\n return function(noScroll) {\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\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 = current.nextElementSibling;\n if (next === null) {\n next = results[0];\n }\n break;\n case 'up':\n next = current.previousElementSibling;\n if (next === null) {\n next = results[results.length - 1];\n }\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 var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\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 document.querySelector('#q').focus();\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 vimKeys) {\n var key = vimKeys[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 = '<a href=\"#\" class=\"close\" aria-label=\"close\" title=\"close\">×</a>';\n html += '<h3>How to navigate searx with Vim-like hotkeys</h3>';\n html += '<table>';\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 += '<tr>';\n }\n html += '<td>';\n\n html += '<h4>' + cat[0].cat + '</h4>';\n html += '<ul class=\"list-unstyled\">';\n\n for (var cj in cat) {\n html += '<li><kbd>' + cat[cj].key + '</kbd> ' + cat[cj].des + '</li>';\n }\n\n html += '</ul>';\n html += '</td>'; // col-sm-*\n\n if (!first || lastCategory) {\n html += '</tr>'; // row\n }\n }\n\n html += '</table>';\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\t\t\tinitHelpContent(helpPanel);\t\t\t\t\t\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 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 © <a href=\"https://openstreetmap.org\">OpenStreetMap</a> 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 © <a href=\"https://openstreetmap.org\">OpenStreetMap contributors</a>';\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 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 = ' (<i>' + searxng.translations['Source'] + ':&nbsp;' + description[1] + '</i>)';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n if (d.querySelector('body[class=\"preferences_endpoint\"]')) {\n for(const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\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 searxng.ready(function() {\n searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 14, 6, 200);\n searxng.image_thumbnail_layout.watch();\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.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.image_thumbnail_layout.align();\n searxng.scrollPageToSelected();\n }\n\n searxng.closeDetail = function(e) {\n d.getElementById('results').classList.remove('image-detail-open');\n searxng.image_thumbnail_layout.align();\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 => searxng.selectPrevious(false));\n searxng.on('.result-detail-next', 'click', e => searxng.selectNext(false));\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 firstFocus = true, qinput_id = \"q\", qinput;\n\n function placeCursorAtEnd(element) {\n if (element.setSelectionRange) {\n var len = element.value.length;\n element.setSelectionRange(len, len);\n }\n }\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\tcs.classList.add(\"empty\");\n } else {\n\tcs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function() {\n qinput.value='';\n qinput.focus();\n updateClearButton();\n });\n qinput.addEventListener('keyup', updateClearButton, false);\n }\n\n searxng.ready(function() {\n qinput = d.getElementById(qinput_id);\n\n function placeCursorAtEndOnce() {\n if (firstFocus) {\n placeCursorAtEnd(qinput);\n firstFocus = false;\n } else {\n // e.preventDefault();\n }\n }\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n \n // autocompleter\n if (searxng.autocompleter) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.translations.no_item_found,\n HttpMethod: searxng.method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: 4,\n Delay: 300,\n }, \"#\" + qinput_id);\n\n // hack, see : https://github.com/autocompletejs/autocomplete.js/issues/37\n w.addEventListener('resize', function() {\n var event = new CustomEvent(\"position\");\n qinput.dispatchEvent(event);\n });\n }\n\n qinput.addEventListener('focus', placeCursorAtEndOnce, false);\n qinput.focus();\n }\n\n // vanilla js version of search_on_category_select.js\n if (qinput !== null && d.querySelector('.help') != null && searxng.search_on_category_select) {\n d.querySelector('.help').className='invisible';\n\n searxng.on('#categories input', 'change', function() {\n var i, categories = d.querySelectorAll('#categories input[type=\"checkbox\"]');\n for(i=0; i<categories.length; i++) {\n if (categories[i] !== this && categories[i].checked) {\n categories[i].click();\n }\n }\n if (! this.checked) {\n this.click();\n }\n submitIfQuery();\n return false;\n });\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 });\n\n})(window, document, window.searxng);\n","/**\n*\n* Google Image Layout v0.0.1\n* Description, by Anh Trinh.\n* Heavily modified for searx\n* https://ptgamr.github.io/2014-09-12-google-image-layout/\n* https://ptgamr.github.io/google-image-layout/src/google-image-layout.js\n*\n* @license Free to use under the MIT License.\n*\n* @example <caption>Example usage of searxng.ImageLayout class.</caption>\n* searxng.image_thumbnail_layout = new searxng.ImageLayout(\n* '#urls', // container_selector\n* '#urls .result-images', // results_selector\n* 'img.image_thumbnail', // img_selector\n* 14, // verticalMargin\n* 6, // horizontalMargin\n* 200 // maxHeight\n* );\n* searxng.image_thumbnail_layout.watch();\n*/\n\n\n(function (w, d) {\n function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) {\n this.container_selector = container_selector;\n this.results_selector = results_selector;\n this.img_selector = img_selector;\n this.verticalMargin = verticalMargin;\n this.horizontalMargin = horizontalMargin;\n this.maxHeight = maxHeight;\n this.isAlignDone = true;\n }\n\n /**\n * Get the height that make all images fit the container\n *\n * width = w1 + w2 + w3 + ... = r1*h + r2*h + r3*h + ...\n *\n * @param {[type]} images the images to be calculated\n * @param {[type]} width the container witdth\n * @param {[type]} margin the margin between each image\n *\n * @return {[type]} the height\n */\n ImageLayout.prototype._getHeigth = function (images, width) {\n var i, img;\n var r = 0;\n\n for (i = 0; i < images.length; i++) {\n img = images[i];\n if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {\n r += img.naturalWidth / img.naturalHeight;\n } else {\n // assume that not loaded images are square\n r += 1;\n }\n }\n\n return (width - images.length * this.verticalMargin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3\n };\n\n ImageLayout.prototype._setSize = function (images, height) {\n var i, img, imgWidth;\n var imagesLength = images.length, resultNode;\n\n for (i = 0; i < imagesLength; i++) {\n img = images[i];\n if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {\n imgWidth = height * img.naturalWidth / img.naturalHeight;\n } else {\n // not loaded image : make it square as _getHeigth said it\n imgWidth = height;\n }\n img.style.width = imgWidth + 'px';\n img.style.height = height + 'px';\n img.style.marginLeft = this.horizontalMargin + 'px';\n img.style.marginTop = this.horizontalMargin + 'px';\n img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element\n img.style.marginBottom = this.verticalMargin - 7 + 'px';\n resultNode = img.parentNode.parentNode;\n if (!resultNode.classList.contains('js')) {\n resultNode.classList.add('js');\n }\n }\n };\n\n ImageLayout.prototype._alignImgs = function (imgGroup) {\n var isSearching, slice, i, h;\n var containerElement = d.querySelector(this.container_selector);\n var containerCompStyles = window.getComputedStyle(containerElement);\n var containerPaddingLeft = parseInt(containerCompStyles.getPropertyValue('padding-left'), 10);\n var containerPaddingRight = parseInt(containerCompStyles.getPropertyValue('padding-right'), 10);\n var containerWidth = containerElement.clientWidth - containerPaddingLeft - containerPaddingRight;\n\n while (imgGroup.length > 0) {\n isSearching = true;\n for (i = 1; i <= imgGroup.length && isSearching; i++) {\n slice = imgGroup.slice(0, i);\n h = this._getHeigth(slice, containerWidth);\n if (h < this.maxHeight) {\n this._setSize(slice, h);\n // continue with the remaining images\n imgGroup = imgGroup.slice(i);\n isSearching = false;\n }\n }\n if (isSearching) {\n this._setSize(slice, Math.min(this.maxHeight, h));\n break;\n }\n }\n };\n\n ImageLayout.prototype.align = function () {\n var i;\n var results_selectorNode = d.querySelectorAll(this.results_selector);\n var results_length = results_selectorNode.length;\n var previous = null;\n var current = null;\n var imgGroup = [];\n\n for (i = 0; i < results_length; i++) {\n current = results_selectorNode[i];\n if (current.previousElementSibling !== previous && imgGroup.length > 0) {\n // the current image is not connected to previous one\n // so the current image is the start of a new group of images.\n // so call _alignImgs to align the current group\n this._alignImgs(imgGroup);\n // and start a new empty group of images\n imgGroup = [];\n }\n // add the current image to the group (only the img tag)\n imgGroup.push(current.querySelector(this.img_selector));\n // update the previous variable\n previous = current;\n }\n // align the remaining images\n if (imgGroup.length > 0) {\n this._alignImgs(imgGroup);\n }\n };\n\n ImageLayout.prototype.watch = function () {\n var i, img;\n var obj = this;\n var results_nodes = d.querySelectorAll(this.results_selector);\n var results_length = results_nodes.length;\n\n function img_load_error(event) {\n // console.log(\"ERROR can't load: \" + event.originalTarget.src);\n event.originalTarget.src = w.searxng.static_path + w.searxng.theme.img_load_error;\n }\n\n function throttleAlign() {\n if (obj.isAlignDone) {\n obj.isAlignDone = false;\n setTimeout(function () {\n obj.align();\n obj.isAlignDone = true;\n }, 100);\n }\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event\n w.addEventListener('pageshow', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/load_event\n w.addEventListener('load', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event\n w.addEventListener('resize', throttleAlign);\n\n for (i = 0; i < results_length; i++) {\n img = results_nodes[i].querySelector(this.img_selector);\n if (img !== null && img !== undefined) {\n img.addEventListener('load', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror\n img.addEventListener('error', throttleAlign);\n if (w.searxng.theme.img_load_error) {\n img.addEventListener('error', img_load_error, {once: true});\n }\n }\n }\n };\n\n w.searxng.ImageLayout = ImageLayout;\n\n}(window, document));\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<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n/*\n * @license MIT\n *\n * Autocomplete.js v2.7.1\n * Developed by Baptiste Donaux\n * http://autocomplete-js.com\n *\n * (c) 2017, Baptiste Donaux\n */\n\"use strict\";\nvar ConditionOperator;\n(function (ConditionOperator) {\n ConditionOperator[ConditionOperator[\"AND\"] = 0] = \"AND\";\n ConditionOperator[ConditionOperator[\"OR\"] = 1] = \"OR\";\n})(ConditionOperator || (ConditionOperator = {}));\nvar EventType;\n(function (EventType) {\n EventType[EventType[\"KEYDOWN\"] = 0] = \"KEYDOWN\";\n EventType[EventType[\"KEYUP\"] = 1] = \"KEYUP\";\n})(EventType || (EventType = {}));\n/**\n * Core\n *\n * @class\n * @author Baptiste Donaux <baptiste.donaux@gmail.com> @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 \"<strong>\" + value + \"</strong>\";\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","req","XMLHttpRequest","resolve","reject","promise","then","catch","open","onload","status","response","responseType","Error","statusText","onerror","onabort","send","ex","loadStyle","src","path","static_path","id","replace","s","getElementById","createElement","setAttribute","body","appendChild","loadScript","hasAttribute","apply","insertBefore","newNode","referenceNode","insertAfter","nextSibling","classList","add","isElementInDetail","undefined","contains","getResultElement","isImageResult","resultElement","highlightResult","let","preventDefault","selectImage","getAttribute","vimKeys","27","key","fun","removeFocus","des","cat","73","searchInputFocus","66","scrollPage","innerHeight","70","85","68","71","scrollPageTo","scrollHeight","86","75","74","80","GoToPreviousPage","78","GoToNextPage","79","openResult","84","82","reloadPage","72","toggleHelp","hotkeys","Object","hasOwnProperty","keyCode","ctrlKey","altKey","shiftKey","metaKey","tagName","toLowerCase","which","noScroll","current","querySelector","effectiveWhich","next","results","top","documentElement","scrollTop","bot","clientHeight","length","etop","offsetTop","ebot","nextElementSibling","previousElementSibling","removeAttribute","link","focus","scrollPageToSelected","location","reload","activeElement","blur","closeDetail","pageButtonClick","css_selector","button","click","sel","wtop","wheight","offset","scroll","scrollX","wbot","amount","scrollBy","position","nav","scrollTo","newTab","href","initHelpContent","divElement","categories","k","push","sorted","keys","sort","a","b","html","lastCategory","first","cj","innerHTML","helpPanel","className","getElementsByTagName","toggle","selectNext","selectPrevious","event","remove","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","entries","elements","element","source","translations","image_thumbnail_layout","ImageLayout","watch","btnLabelCollapsed","btnLabelNotCollapsed","targetElement","iframe_load","srctest","imgElement","thumbnailElement","detailElement","imgSrc","loader","imgLoader","Image","align","firstFocus","qinput_id","qinput","placeCursorAtEnd","setSelectionRange","len","value","submitIfQuery","search","submit","createClearButton","cs","updateClearButton","placeCursorAtEndOnce","autocompleter","autocomplete","AutoComplete","Url","EmptyMessage","no_item_found","HttpMethod","HttpHeaders","Content-type","X-Requested-With","MinChars","Delay","CustomEvent","dispatchEvent","search_on_category_select","checked","container_selector","results_selector","img_selector","verticalMargin","horizontalMargin","maxHeight","isAlignDone","_getHeigth","images","width","img","r","naturalWidth","naturalHeight","_setSize","height","imgWidth","imagesLength","resultNode","style","marginLeft","marginTop","marginRight","marginBottom","_alignImgs","imgGroup","isSearching","slice","h","containerElement","containerCompStyles","getComputedStyle","containerPaddingLeft","parseInt","getPropertyValue","containerPaddingRight","containerWidth","clientWidth","Math","min","results_selectorNode","results_length","previous","results_nodes","img_load_error","originalTarget","theme","throttleAlign","once","f","exports","module","define","amd","g","global","self","n","t","o","c","require","u","code","p","1","ConditionOperator","EventType","params","Array","isArray","forEach","input","specificParams","merge","defaults","DOMResults","create","Input","nodeName","match","_Position","$Listeners","_Blur","destroy","_Focus","keyup","KEYUP","keydown","KEYDOWN","getEventsByType","type","mappings","KeyboardMappings","Event","eventIdentifier","condition","mapping","Operator","AND","OR","Not","Is","From","To","name","Conditions","Callback","makeRequest","callbackErr","propertyHttpHeaders","getOwnPropertyNames","request","_HttpMethod","_Url","queryParams","_Pre","queryParamsStringify","encodeURIComponent","_QueryArg","indexOf","setRequestHeader","onreadystatechange","$Cache","ajax","timeout","$AjaxTimer","clearTimeout","Request","abort","cache","_Cache","removeEventListener","removeChild","tmp","arguments","Highlight","getRegex","RegExp","transform","Limit","QueryArg","Enter","liActive","_Select","KeyUpAndDown_down","KeyUpAndDown_up","last","active","currentIndex","children","lisCount","item","AlphaNum","oldValue","currentValue","_MinChars","_Render","_Post","_Open","_Error","_Close","_EmptyMessage","emptyMessage","_Limit","limit","isNaN","minchars","_Highlight","label","now","li","onclick","offsetHeight","offsetLeft","ul","_RenderRaw","_RenderResponseItems","hasChildNodes","childNodes","reverse","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/keyboard.js","../src/js/main/mapresult.js","../src/js/main/preferences.js","../src/js/main/results.js","../src/js/main/search.js","../../__common__/js/image_layout.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) {\n var req = new XMLHttpRequest(),\n resolve = function() {},\n reject = function() {},\n promise = {\n then: function(callback) { resolve = callback; return promise; },\n catch: function(callback) { reject = callback; return promise; }\n };\n\n try {\n req.open(method, url, true);\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 // Make the request\n req.send();\n } catch (ex) {\n reject(ex);\n }\n\n return promise;\n };\n\n searxng.loadStyle = function(src) {\n var path = searxng.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.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 return searxng;\n})(window, document);\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 <div class=\"detail\"> 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);\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 var vimKeys = {\n 27: {\n key: 'Escape',\n fun: removeFocus,\n des: 'remove focus from the focused input',\n cat: 'Control'\n },\n 73: {\n key: 'i',\n fun: searchInputFocus,\n des: 'focus on the search input',\n cat: 'Control'\n },\n 66: {\n key: 'b',\n fun: scrollPage(-window.innerHeight),\n des: 'scroll one page up',\n cat: 'Navigation'\n },\n 70: {\n key: 'f',\n fun: scrollPage(window.innerHeight),\n des: 'scroll one page down',\n cat: 'Navigation'\n },\n 85: {\n key: 'u',\n fun: scrollPage(-window.innerHeight / 2),\n des: 'scroll half a page up',\n cat: 'Navigation'\n },\n 68: {\n key: 'd',\n fun: scrollPage(window.innerHeight / 2),\n des: 'scroll half a page down',\n cat: 'Navigation'\n },\n 71: {\n key: 'g',\n fun: scrollPageTo(-document.body.scrollHeight, 'top'),\n des: 'scroll to the top of the page',\n cat: 'Navigation'\n },\n 86: {\n key: 'v',\n fun: scrollPageTo(document.body.scrollHeight, 'bottom'),\n des: 'scroll to the bottom of the page',\n cat: 'Navigation'\n },\n 75: {\n key: 'k',\n fun: highlightResult('up'),\n des: 'select previous search result',\n cat: 'Results'\n },\n 74: {\n key: 'j',\n fun: highlightResult('down'),\n des: 'select next search result',\n cat: 'Results'\n },\n 80: {\n key: 'p',\n fun: GoToPreviousPage(),\n des: 'go to previous page',\n cat: 'Results'\n },\n 78: {\n key: 'n',\n fun: GoToNextPage(),\n des: 'go to next page',\n cat: 'Results'\n },\n 79: {\n key: 'o',\n fun: openResult(false),\n des: 'open search result',\n cat: 'Results'\n },\n 84: {\n key: 't',\n fun: openResult(true),\n des: 'open the result in a new tab',\n cat: 'Results'\n },\n 82: {\n key: 'r',\n fun: reloadPage,\n des: 'reload page from the server',\n cat: 'Control'\n },\n 72: {\n key: 'h',\n fun: toggleHelp,\n des: 'toggle help window',\n cat: 'Other'\n }\n };\n\n if (searxng.hotkeys) {\n searxng.on(document, \"keydown\", function(e) {\n // check for modifiers so we don't break browser's hotkeys\n if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {\n var tagName = e.target.tagName.toLowerCase();\n if (e.keyCode === 27) {\n vimKeys[e.keyCode].fun(e);\n } else {\n if (e.target === document.body || tagName === 'a' || tagName === 'button') {\n e.preventDefault();\n vimKeys[e.keyCode].fun();\n }\n }\n }\n });\n }\n\n function highlightResult(which) {\n return function(noScroll) {\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\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 = current.nextElementSibling;\n if (next === null) {\n next = results[0];\n }\n break;\n case 'up':\n next = current.previousElementSibling;\n if (next === null) {\n next = results[results.length - 1];\n }\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 var link = next.querySelector('h3 a') || next.querySelector('a');\n if (link !== null) {\n link.focus();\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 document.querySelector('#q').focus();\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 vimKeys) {\n var key = vimKeys[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 = '<a href=\"#\" class=\"close\" aria-label=\"close\" title=\"close\">×</a>';\n html += '<h3>How to navigate searx with Vim-like hotkeys</h3>';\n html += '<table>';\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 += '<tr>';\n }\n html += '<td>';\n\n html += '<h4>' + cat[0].cat + '</h4>';\n html += '<ul class=\"list-unstyled\">';\n\n for (var cj in cat) {\n html += '<li><kbd>' + cat[cj].key + '</kbd> ' + cat[cj].des + '</li>';\n }\n\n html += '</ul>';\n html += '</td>'; // col-sm-*\n\n if (!first || lastCategory) {\n html += '</tr>'; // row\n }\n }\n\n html += '</table>';\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\t\t\tinitHelpContent(helpPanel);\t\t\t\t\t\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 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 © <a href=\"https://openstreetmap.org\">OpenStreetMap</a> 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 © <a href=\"https://openstreetmap.org\">OpenStreetMap contributors</a>';\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 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 = ' (<i>' + searxng.translations['Source'] + ':&nbsp;' + description[1] + '</i>)';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n if (d.querySelector('body[class=\"preferences_endpoint\"]')) {\n for(const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\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 searxng.ready(function() {\n searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 14, 6, 200);\n searxng.image_thumbnail_layout.watch();\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.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.image_thumbnail_layout.align();\n searxng.scrollPageToSelected();\n }\n\n searxng.closeDetail = function(e) {\n d.getElementById('results').classList.remove('image-detail-open');\n searxng.image_thumbnail_layout.align();\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 => searxng.selectPrevious(false));\n searxng.on('.result-detail-next', 'click', e => searxng.selectNext(false));\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 firstFocus = true, qinput_id = \"q\", qinput;\n\n function placeCursorAtEnd(element) {\n if (element.setSelectionRange) {\n var len = element.value.length;\n element.setSelectionRange(len, len);\n }\n }\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\tcs.classList.add(\"empty\");\n } else {\n\tcs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function() {\n qinput.value='';\n qinput.focus();\n updateClearButton();\n });\n qinput.addEventListener('keyup', updateClearButton, false);\n }\n\n searxng.ready(function() {\n qinput = d.getElementById(qinput_id);\n\n function placeCursorAtEndOnce() {\n if (firstFocus) {\n placeCursorAtEnd(qinput);\n firstFocus = false;\n } else {\n // e.preventDefault();\n }\n }\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.autocompleter) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.translations.no_item_found,\n HttpMethod: searxng.method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: 4,\n Delay: 300,\n _Position:function() {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.style.top = (this.Input.offsetTop + this.Input.offsetHeight) + \"px\";\n this.DOMResults.style.left = this.Input.offsetLeft + \"px\";\n this.DOMResults.style.width = this.Input.clientWidth + \"px\";\n },\n }, \"#\" + qinput_id);\n\n // hack, see : https://github.com/autocompletejs/autocomplete.js/issues/37\n w.addEventListener('resize', function() {\n var event = new CustomEvent(\"position\");\n qinput.dispatchEvent(event);\n });\n }\n\n qinput.addEventListener('focus', placeCursorAtEndOnce, false);\n qinput.focus();\n }\n\n // vanilla js version of search_on_category_select.js\n if (qinput !== null && d.querySelector('.help') != null && searxng.search_on_category_select) {\n d.querySelector('.help').className='invisible';\n\n searxng.on('#categories input', 'change', function() {\n var i, categories = d.querySelectorAll('#categories input[type=\"checkbox\"]');\n for(i=0; i<categories.length; i++) {\n if (categories[i] !== this && categories[i].checked) {\n categories[i].click();\n }\n }\n if (! this.checked) {\n this.click();\n }\n submitIfQuery();\n return false;\n });\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 });\n\n})(window, document, window.searxng);\n","/**\n*\n* Google Image Layout v0.0.1\n* Description, by Anh Trinh.\n* Heavily modified for searx\n* https://ptgamr.github.io/2014-09-12-google-image-layout/\n* https://ptgamr.github.io/google-image-layout/src/google-image-layout.js\n*\n* @license Free to use under the MIT License.\n*\n* @example <caption>Example usage of searxng.ImageLayout class.</caption>\n* searxng.image_thumbnail_layout = new searxng.ImageLayout(\n* '#urls', // container_selector\n* '#urls .result-images', // results_selector\n* 'img.image_thumbnail', // img_selector\n* 14, // verticalMargin\n* 6, // horizontalMargin\n* 200 // maxHeight\n* );\n* searxng.image_thumbnail_layout.watch();\n*/\n\n\n(function (w, d) {\n function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) {\n this.container_selector = container_selector;\n this.results_selector = results_selector;\n this.img_selector = img_selector;\n this.verticalMargin = verticalMargin;\n this.horizontalMargin = horizontalMargin;\n this.maxHeight = maxHeight;\n this.isAlignDone = true;\n }\n\n /**\n * Get the height that make all images fit the container\n *\n * width = w1 + w2 + w3 + ... = r1*h + r2*h + r3*h + ...\n *\n * @param {[type]} images the images to be calculated\n * @param {[type]} width the container witdth\n * @param {[type]} margin the margin between each image\n *\n * @return {[type]} the height\n */\n ImageLayout.prototype._getHeigth = function (images, width) {\n var i, img;\n var r = 0;\n\n for (i = 0; i < images.length; i++) {\n img = images[i];\n if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {\n r += img.naturalWidth / img.naturalHeight;\n } else {\n // assume that not loaded images are square\n r += 1;\n }\n }\n\n return (width - images.length * this.verticalMargin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3\n };\n\n ImageLayout.prototype._setSize = function (images, height) {\n var i, img, imgWidth;\n var imagesLength = images.length, resultNode;\n\n for (i = 0; i < imagesLength; i++) {\n img = images[i];\n if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {\n imgWidth = height * img.naturalWidth / img.naturalHeight;\n } else {\n // not loaded image : make it square as _getHeigth said it\n imgWidth = height;\n }\n img.style.width = imgWidth + 'px';\n img.style.height = height + 'px';\n img.style.marginLeft = this.horizontalMargin + 'px';\n img.style.marginTop = this.horizontalMargin + 'px';\n img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element\n img.style.marginBottom = this.verticalMargin - 7 + 'px';\n resultNode = img.parentNode.parentNode;\n if (!resultNode.classList.contains('js')) {\n resultNode.classList.add('js');\n }\n }\n };\n\n ImageLayout.prototype._alignImgs = function (imgGroup) {\n var isSearching, slice, i, h;\n var containerElement = d.querySelector(this.container_selector);\n var containerCompStyles = window.getComputedStyle(containerElement);\n var containerPaddingLeft = parseInt(containerCompStyles.getPropertyValue('padding-left'), 10);\n var containerPaddingRight = parseInt(containerCompStyles.getPropertyValue('padding-right'), 10);\n var containerWidth = containerElement.clientWidth - containerPaddingLeft - containerPaddingRight;\n\n while (imgGroup.length > 0) {\n isSearching = true;\n for (i = 1; i <= imgGroup.length && isSearching; i++) {\n slice = imgGroup.slice(0, i);\n h = this._getHeigth(slice, containerWidth);\n if (h < this.maxHeight) {\n this._setSize(slice, h);\n // continue with the remaining images\n imgGroup = imgGroup.slice(i);\n isSearching = false;\n }\n }\n if (isSearching) {\n this._setSize(slice, Math.min(this.maxHeight, h));\n break;\n }\n }\n };\n\n ImageLayout.prototype.align = function () {\n var i;\n var results_selectorNode = d.querySelectorAll(this.results_selector);\n var results_length = results_selectorNode.length;\n var previous = null;\n var current = null;\n var imgGroup = [];\n\n for (i = 0; i < results_length; i++) {\n current = results_selectorNode[i];\n if (current.previousElementSibling !== previous && imgGroup.length > 0) {\n // the current image is not connected to previous one\n // so the current image is the start of a new group of images.\n // so call _alignImgs to align the current group\n this._alignImgs(imgGroup);\n // and start a new empty group of images\n imgGroup = [];\n }\n // add the current image to the group (only the img tag)\n imgGroup.push(current.querySelector(this.img_selector));\n // update the previous variable\n previous = current;\n }\n // align the remaining images\n if (imgGroup.length > 0) {\n this._alignImgs(imgGroup);\n }\n };\n\n ImageLayout.prototype.watch = function () {\n var i, img;\n var obj = this;\n var results_nodes = d.querySelectorAll(this.results_selector);\n var results_length = results_nodes.length;\n\n function img_load_error(event) {\n // console.log(\"ERROR can't load: \" + event.originalTarget.src);\n event.originalTarget.src = w.searxng.static_path + w.searxng.theme.img_load_error;\n }\n\n function throttleAlign() {\n if (obj.isAlignDone) {\n obj.isAlignDone = false;\n setTimeout(function () {\n obj.align();\n obj.isAlignDone = true;\n }, 100);\n }\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event\n w.addEventListener('pageshow', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/load_event\n w.addEventListener('load', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event\n w.addEventListener('resize', throttleAlign);\n\n for (i = 0; i < results_length; i++) {\n img = results_nodes[i].querySelector(this.img_selector);\n if (img !== null && img !== undefined) {\n img.addEventListener('load', throttleAlign);\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror\n img.addEventListener('error', throttleAlign);\n if (w.searxng.theme.img_load_error) {\n img.addEventListener('error', img_load_error, {once: true});\n }\n }\n }\n };\n\n w.searxng.ImageLayout = ImageLayout;\n\n}(window, document));\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<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n/*\n * @license MIT\n *\n * Autocomplete.js v2.7.1\n * Developed by Baptiste Donaux\n * http://autocomplete-js.com\n *\n * (c) 2017, Baptiste Donaux\n */\n\"use strict\";\nvar ConditionOperator;\n(function (ConditionOperator) {\n ConditionOperator[ConditionOperator[\"AND\"] = 0] = \"AND\";\n ConditionOperator[ConditionOperator[\"OR\"] = 1] = \"OR\";\n})(ConditionOperator || (ConditionOperator = {}));\nvar EventType;\n(function (EventType) {\n EventType[EventType[\"KEYDOWN\"] = 0] = \"KEYDOWN\";\n EventType[EventType[\"KEYUP\"] = 1] = \"KEYUP\";\n})(EventType || (EventType = {}));\n/**\n * Core\n *\n * @class\n * @author Baptiste Donaux <baptiste.donaux@gmail.com> @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 \"<strong>\" + value + \"</strong>\";\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","req","XMLHttpRequest","resolve","reject","promise","then","catch","open","onload","status","response","responseType","Error","statusText","onerror","onabort","send","ex","loadStyle","src","path","static_path","id","replace","s","getElementById","createElement","setAttribute","body","appendChild","loadScript","hasAttribute","apply","insertBefore","newNode","referenceNode","insertAfter","nextSibling","classList","add","isElementInDetail","undefined","contains","getResultElement","isImageResult","resultElement","highlightResult","let","preventDefault","selectImage","getAttribute","vimKeys","27","key","fun","removeFocus","des","cat","73","searchInputFocus","66","scrollPage","innerHeight","70","85","68","71","scrollPageTo","scrollHeight","86","75","74","80","GoToPreviousPage","78","GoToNextPage","79","openResult","84","82","reloadPage","72","toggleHelp","hotkeys","Object","hasOwnProperty","keyCode","ctrlKey","altKey","shiftKey","metaKey","tagName","toLowerCase","which","noScroll","current","querySelector","effectiveWhich","next","results","top","documentElement","scrollTop","bot","clientHeight","length","etop","offsetTop","ebot","nextElementSibling","previousElementSibling","removeAttribute","link","focus","scrollPageToSelected","location","reload","activeElement","blur","closeDetail","pageButtonClick","css_selector","button","click","sel","wtop","wheight","offset","scroll","scrollX","wbot","amount","scrollBy","position","nav","scrollTo","newTab","href","initHelpContent","divElement","categories","k","push","sorted","keys","sort","a","b","html","lastCategory","first","cj","innerHTML","helpPanel","className","getElementsByTagName","toggle","selectNext","selectPrevious","event","remove","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","entries","elements","element","source","translations","image_thumbnail_layout","ImageLayout","watch","btnLabelCollapsed","btnLabelNotCollapsed","targetElement","iframe_load","srctest","imgElement","thumbnailElement","detailElement","imgSrc","loader","imgLoader","Image","align","firstFocus","qinput_id","qinput","placeCursorAtEnd","setSelectionRange","len","value","submitIfQuery","search","submit","createClearButton","cs","updateClearButton","placeCursorAtEndOnce","autocompleter","autocomplete","AutoComplete","Url","EmptyMessage","no_item_found","HttpMethod","HttpHeaders","Content-type","X-Requested-With","MinChars","Delay","_Position","DOMResults","style","Input","offsetHeight","left","offsetLeft","width","clientWidth","CustomEvent","dispatchEvent","search_on_category_select","checked","container_selector","results_selector","img_selector","verticalMargin","horizontalMargin","maxHeight","isAlignDone","_getHeigth","images","img","r","naturalWidth","naturalHeight","_setSize","height","imgWidth","imagesLength","resultNode","marginLeft","marginTop","marginRight","marginBottom","_alignImgs","imgGroup","isSearching","slice","h","containerElement","containerCompStyles","getComputedStyle","containerPaddingLeft","parseInt","getPropertyValue","containerPaddingRight","containerWidth","Math","min","results_selectorNode","results_length","previous","results_nodes","img_load_error","originalTarget","theme","throttleAlign","once","f","exports","module","define","amd","g","global","self","n","t","o","c","require","u","code","p","1","ConditionOperator","EventType","params","Array","isArray","forEach","input","specificParams","merge","defaults","create","nodeName","match","$Listeners","_Blur","destroy","_Focus","keyup","KEYUP","keydown","KEYDOWN","getEventsByType","type","mappings","KeyboardMappings","Event","eventIdentifier","condition","mapping","Operator","AND","OR","Not","Is","From","To","name","Conditions","Callback","makeRequest","callbackErr","propertyHttpHeaders","getOwnPropertyNames","request","_HttpMethod","_Url","queryParams","_Pre","queryParamsStringify","encodeURIComponent","_QueryArg","indexOf","setRequestHeader","onreadystatechange","$Cache","ajax","timeout","$AjaxTimer","clearTimeout","Request","abort","cache","_Cache","removeEventListener","removeChild","tmp","arguments","Highlight","getRegex","RegExp","transform","Limit","QueryArg","Enter","liActive","_Select","KeyUpAndDown_down","KeyUpAndDown_up","last","active","currentIndex","children","lisCount","item","AlphaNum","oldValue","currentValue","_MinChars","_Render","_Post","_Open","_Error","_Close","_EmptyMessage","emptyMessage","_Limit","limit","isNaN","minchars","_Highlight","label","now","li","onclick","ul","_RenderRaw","_RenderResponseItems","hasChildNodes","childNodes","reverse","abs","Label","Value","returnResponse","json"],"mappings":"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"} \ No newline at end of file
diff --git a/searx/static/themes/simple/src/js/main/search.js b/searx/static/themes/simple/src/js/main/search.js
index 0244a90ea..09a90b7e9 100644
--- a/searx/static/themes/simple/src/js/main/search.js
+++ b/searx/static/themes/simple/src/js/main/search.js
@@ -54,7 +54,7 @@
if (qinput !== null) {
// clear button
createClearButton(qinput);
-
+
// autocompleter
if (searxng.autocompleter) {
searxng.autocomplete = AutoComplete.call(w, {
@@ -67,6 +67,12 @@
},
MinChars: 4,
Delay: 300,
+ _Position:function() {
+ this.DOMResults.setAttribute("class", "autocomplete");
+ this.DOMResults.style.top = (this.Input.offsetTop + this.Input.offsetHeight) + "px";
+ this.DOMResults.style.left = this.Input.offsetLeft + "px";
+ this.DOMResults.style.width = this.Input.clientWidth + "px";
+ },
}, "#" + qinput_id);
// hack, see : https://github.com/autocompletejs/autocomplete.js/issues/37
diff --git a/searx/translations/ar/LC_MESSAGES/messages.mo b/searx/translations/ar/LC_MESSAGES/messages.mo
index 646c9f7b8..c2113fdd9 100644
--- a/searx/translations/ar/LC_MESSAGES/messages.mo
+++ b/searx/translations/ar/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/ar/LC_MESSAGES/messages.po b/searx/translations/ar/LC_MESSAGES/messages.po
index 0d4ae4082..f05ae7e65 100644
--- a/searx/translations/ar/LC_MESSAGES/messages.po
+++ b/searx/translations/ar/LC_MESSAGES/messages.po
@@ -8,19 +8,20 @@
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-11-03 08:06+0000\n"
-"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"PO-Revision-Date: 2021-12-11 18:11+0000\n"
+"Last-Translator: Alexandre Flament <alex@al-f.net>\n"
+"Language-Team: Arabic <https://weblate.bubu1.eu/projects/searxng/searxng/ar/>"
+"\n"
"Language: ar\n"
-"Language-Team: Arabic "
-"<https://weblate.bubu1.eu/projects/searxng/searxng/ar/>\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : "
-"n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -69,15 +70,15 @@ msgstr "علوم"
#: searx/webapp.py:178
msgid "auto"
-msgstr ""
+msgstr "تلقائي"
#: searx/webapp.py:179
msgid "light"
-msgstr ""
+msgstr "فاتح"
#: searx/webapp.py:180
msgid "dark"
-msgstr ""
+msgstr "مظلم"
#: searx/webapp.py:184
msgid "timeout"
@@ -97,7 +98,7 @@ msgstr "خطأ في الشبكة"
#: searx/webapp.py:189
msgid "unexpected crash"
-msgstr ""
+msgstr "تعطل غير متوقع"
#: searx/webapp.py:196
msgid "HTTP error"
@@ -105,7 +106,7 @@ msgstr "خطأ HTTP"
#: searx/webapp.py:197
msgid "HTTP connection error"
-msgstr ""
+msgstr "خطأ في اتصال HTTP"
#: searx/webapp.py:203
msgid "proxy error"
@@ -125,7 +126,7 @@ msgstr ""
#: searx/webapp.py:207
msgid "server API error"
-msgstr ""
+msgstr "خطأ في API الخادم"
#: searx/webapp.py:399
msgid "No item found"
@@ -150,7 +151,7 @@ msgstr "خطأ في البحث"
#: searx/webapp.py:731
msgid "{minutes} minute(s) ago"
-msgstr "قبل {minutes} ثانية"
+msgstr "قبل دقائق"
#: searx/webapp.py:733
msgid "{hours} hour(s), {minutes} minute(s) ago"
@@ -158,7 +159,7 @@ msgstr "قبل {hours} ساعات، {minutes} دقائق"
#: searx/webapp.py:856
msgid "Suspended"
-msgstr ""
+msgstr "معلق"
#: searx/answerers/random/answerer.py:65
msgid "Random value generator"
@@ -190,7 +191,7 @@ msgstr ""
#: searx/engines/pubmed.py:78
msgid "No abstract is available for this publication."
-msgstr ""
+msgstr "لا يوجد ملخص لهاذا المنشور"
#: searx/engines/qwant.py:200
msgid "Channel"
@@ -728,7 +729,7 @@ msgstr "أقصى مدّة"
#: searx/templates/simple/preferences.html:290
#: searx/templates/simple/stats.html:32
msgid "Reliability"
-msgstr ""
+msgstr "إمكانية الإشتغال"
#: searx/templates/oscar/preferences.html:396
msgid "Query"
@@ -902,7 +903,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:31 searx/templates/simple/stats.html:30
msgid "Result count"
-msgstr ""
+msgstr "نتيجة العد"
#: searx/templates/oscar/stats.html:42 searx/templates/simple/stats.html:41
msgid "Scores per result"
@@ -910,7 +911,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:65 searx/templates/simple/stats.html:65
msgid "Total"
-msgstr ""
+msgstr "إجمالي"
#: searx/templates/oscar/stats.html:66 searx/templates/simple/stats.html:66
msgid "HTTP"
@@ -922,7 +923,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
msgid "Warnings"
-msgstr ""
+msgstr "تحذيرات"
#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
msgid "Errors and exceptions"
@@ -930,7 +931,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:112 searx/templates/simple/stats.html:111
msgid "Exception"
-msgstr ""
+msgstr "استثناء"
#: searx/templates/oscar/stats.html:114 searx/templates/simple/stats.html:113
msgid "Message"
@@ -938,7 +939,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:116 searx/templates/simple/stats.html:115
msgid "Percentage"
-msgstr ""
+msgstr "نسبة"
#: searx/templates/oscar/stats.html:118 searx/templates/simple/stats.html:117
msgid "Parameter"
@@ -967,7 +968,7 @@ msgstr ""
#: searx/templates/oscar/stats.html:139 searx/templates/simple/stats.html:138
msgid "Comment(s)"
-msgstr ""
+msgstr "تعليق/تعليقات"
#: searx/templates/oscar/time-range.html:5
#: searx/templates/simple/filters/time_range.html:3
@@ -1073,7 +1074,7 @@ msgstr "إخفاء الوسائط"
#: searx/templates/oscar/result_templates/videos.html:19
#: searx/templates/simple/result_templates/images.html:21
msgid "Author"
-msgstr ""
+msgstr "الكاتب"
#: searx/templates/oscar/result_templates/files.html:37
#: searx/templates/oscar/result_templates/torrent.html:7
@@ -1113,7 +1114,7 @@ msgstr "تيرابيت"
#: searx/templates/oscar/result_templates/files.html:46
msgid "Date"
-msgstr ""
+msgstr "تاريخ"
#: searx/templates/oscar/result_templates/files.html:48
msgid "Type"
@@ -1131,7 +1132,7 @@ msgstr "عرض المصدر"
#: searx/templates/oscar/result_templates/map.html:26
#: searx/templates/simple/result_templates/map.html:12
msgid "address"
-msgstr ""
+msgstr "عنوان"
#: searx/templates/oscar/result_templates/map.html:59
#: searx/templates/simple/result_templates/map.html:43
@@ -1170,7 +1171,7 @@ msgstr "إخفاء الفيديو"
#: searx/templates/oscar/result_templates/videos.html:20
msgid "Length"
-msgstr ""
+msgstr "الطول"
#: searx/templates/simple/categories.html:16
msgid "Click on the magnifier to perform search"
@@ -1212,12 +1213,12 @@ msgstr ""
#: searx/templates/simple/search.html:10
#: searx/templates/simple/simple_search.html:6
msgid "search"
-msgstr ""
+msgstr "بحت"
#: searx/templates/simple/result_templates/default.html:14
#: searx/templates/simple/result_templates/videos.html:14
msgid "This site did not provide any description."
-msgstr ""
+msgstr "هذا الموقع لا يتوفر على أي وصف."
#: searx/templates/simple/result_templates/images.html:22
msgid "Format"
@@ -1225,7 +1226,7 @@ msgstr ""
#: searx/templates/simple/result_templates/images.html:24
msgid "Engine"
-msgstr ""
+msgstr "محرك"
#~ msgid "Engine time (sec)"
#~ msgstr "المدة المستغرقة للمحرك (ثواني)"
@@ -1339,4 +1340,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/bg/LC_MESSAGES/messages.mo b/searx/translations/bg/LC_MESSAGES/messages.mo
index 1f5f4999d..7159f4255 100644
--- a/searx/translations/bg/LC_MESSAGES/messages.mo
+++ b/searx/translations/bg/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/bg/LC_MESSAGES/messages.po b/searx/translations/bg/LC_MESSAGES/messages.po
index 52b8cc5b6..4332bb78a 100644
--- a/searx/translations/bg/LC_MESSAGES/messages.po
+++ b/searx/translations/bg/LC_MESSAGES/messages.po
@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-12-03 07:17+0000\n"
-"Last-Translator: Ati Art <atiartstudio.home@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Bulgarian <https://weblate.bubu1.eu/projects/searxng/searxng/"
"bg/>\n"
"Language: bg\n"
diff --git a/searx/translations/cs/LC_MESSAGES/messages.mo b/searx/translations/cs/LC_MESSAGES/messages.mo
index 821a5b253..61da7c6ae 100644
--- a/searx/translations/cs/LC_MESSAGES/messages.mo
+++ b/searx/translations/cs/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/cs/LC_MESSAGES/messages.po b/searx/translations/cs/LC_MESSAGES/messages.po
index eb0ff1bb7..5d662bf67 100644
--- a/searx/translations/cs/LC_MESSAGES/messages.po
+++ b/searx/translations/cs/LC_MESSAGES/messages.po
@@ -9,19 +9,20 @@
# Venca24 <Vaclav.Zouzalik@seznam.cz>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-16 13:52+0000\n"
-"Last-Translator: Lukáš Kucharczyk <lukas@kucharczyk.xyz>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Czech <https://weblate.bubu1.eu/projects/searxng/searxng/cs/>"
+"\n"
"Language: cs\n"
-"Language-Team: Czech "
-"(http://www.transifex.com/asciimoo/searx/language/cs/)\n"
-"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && "
-"n <= 4 && n % 1 == 0) ? 1: (n % 1 != 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 && n % 1 == 0) ? 0 : (n >= 2 && n "
+"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+"X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -242,8 +243,8 @@ msgid ""
"Perform search immediately if a category selected. Disable to select "
"multiple categories. (JavaScript required)"
msgstr ""
-"Provede hledání okamžitě při výběru kategorie. Pokud je tato funkce "
-"vypnuta, je možné vybrat více kategorií (vyžaduje JavaScript)."
+"Provede hledání okamžitě při výběru kategorie. Pokud je tato funkce vypnuta, "
+"je možné vybrat více kategorií (vyžaduje JavaScript)"
#: searx/plugins/self_info.py:19
msgid "Self Informations"
@@ -285,7 +286,7 @@ msgstr "Stránka nenalezena"
#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
#, python-format
msgid "Go to %(search_page)s."
-msgstr "Přejít na %(search_page)s"
+msgstr "Přejít na %(search_page)s."
#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
msgid "search page"
@@ -1366,4 +1367,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo
index ceffc2222..c150dd187 100644
--- a/searx/translations/eo/LC_MESSAGES/messages.mo
+++ b/searx/translations/eo/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/eo/LC_MESSAGES/messages.po b/searx/translations/eo/LC_MESSAGES/messages.po
index b72ba841f..9ab14f87a 100644
--- a/searx/translations/eo/LC_MESSAGES/messages.po
+++ b/searx/translations/eo/LC_MESSAGES/messages.po
@@ -9,18 +9,19 @@
# Venca24 <Vaclav.Zouzalik@seznam.cz>, 2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: Venca24 <Vaclav.Zouzalik@seznam.cz>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Esperanto <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"eo/>\n"
"Language: eo\n"
-"Language-Team: Esperanto "
-"(http://www.transifex.com/asciimoo/searx/language/eo/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -517,7 +518,7 @@ msgstr "Kiun lingvon vi pli ŝatas por serĉi?"
#: searx/templates/simple/preferences.html:145
#: searx/templates/simple/preferences.html:286
msgid "SafeSearch"
-msgstr " SekuraSerĉo"
+msgstr "SekuraSerĉo"
#: searx/templates/oscar/preferences.html:142
#: searx/templates/simple/preferences.html:153
@@ -645,9 +646,9 @@ msgid ""
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
" rel=\"external\">learn more about request methods</a>"
msgstr ""
-"Ŝanĝi kiel formoj estas sendataj, <a "
-"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
-" rel=\"external\">sciu pli pri peto-metodoj</a> "
+"Ŝanĝi kiel formoj estas sendataj, <a href=\"http://en.wikipedia.org/wiki/"
+"Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">sciu pli pri "
+"peto-metodoj</a>"
#: searx/templates/oscar/preferences.html:273
#: searx/templates/simple/preferences.html:249
@@ -699,7 +700,7 @@ msgstr ""
#: searx/templates/simple/preferences.html:283
#: searx/templates/simple/stats.html:28
msgid "Engine name"
-msgstr " Motora nomo"
+msgstr "Motora nomo"
#: searx/templates/oscar/preferences.html:332
#: searx/templates/oscar/preferences.html:346
@@ -879,13 +880,13 @@ msgstr "Provu serĉi:"
#: searx/templates/oscar/results.html:187
#: searx/templates/simple/results.html:182
msgid "next page"
-msgstr " sekva paĝo"
+msgstr "sekva paĝo"
#: searx/templates/oscar/results.html:169
#: searx/templates/oscar/results.html:180
#: searx/templates/simple/results.html:165
msgid "previous page"
-msgstr " antaŭa paĝo"
+msgstr "antaŭa paĝo"
#: searx/templates/oscar/search.html:6 searx/templates/oscar/search_full.html:9
#: searx/templates/simple/search.html:8
@@ -1209,7 +1210,7 @@ msgstr ""
#: searx/templates/simple/preferences.html:275
msgid "Currently used search engines"
-msgstr " Aktuale uzataj serĉiloj"
+msgstr "Aktuale uzataj serĉiloj"
#: searx/templates/simple/preferences.html:285
msgid "Supports selected language"
@@ -1359,4 +1360,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo
index 4e0d8e251..96c07b91b 100644
--- a/searx/translations/es/LC_MESSAGES/messages.mo
+++ b/searx/translations/es/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/es/LC_MESSAGES/messages.po b/searx/translations/es/LC_MESSAGES/messages.po
index 9fb1c744b..1702b1615 100644
--- a/searx/translations/es/LC_MESSAGES/messages.po
+++ b/searx/translations/es/LC_MESSAGES/messages.po
@@ -20,8 +20,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-12-03 07:17+0000\n"
-"Last-Translator: Alexandre Flament <alex@al-f.net>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Spanish <https://weblate.bubu1.eu/projects/searxng/searxng/es/"
">\n"
"Language: es\n"
@@ -167,7 +167,7 @@ msgstr "hace {hours} hora(s) y {minutes} minuto(s)"
#: searx/webapp.py:856
msgid "Suspended"
-msgstr ""
+msgstr "Suspendido/a"
#: searx/answerers/random/answerer.py:65
msgid "Random value generator"
@@ -191,7 +191,7 @@ msgstr "Obtener indicaciones"
#: searx/engines/pdbe.py:90
msgid "{title} (OBSOLETE)"
-msgstr ""
+msgstr "{titulo} (OBSOLETO)"
#: searx/engines/pdbe.py:97
msgid "This entry has been superseded by"
@@ -203,19 +203,19 @@ msgstr "No hay resúmenes disponibles para esta publicación."
#: searx/engines/qwant.py:200
msgid "Channel"
-msgstr ""
+msgstr "Canal"
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
-msgstr ""
+msgstr "Convierte hilos de texto a differentes digestiones hash."
#: searx/plugins/hash_plugin.py:52
msgid "hash digest"
-msgstr ""
+msgstr "digestion hash"
#: searx/plugins/hostname_replace.py:9
msgid "Hostname replace"
-msgstr ""
+msgstr "Reemplazo de nombre de anfitrion"
#: searx/plugins/hostname_replace.py:10
msgid "Rewrite result hostnames or remove results based on the hostname"
diff --git a/searx/translations/fi/LC_MESSAGES/messages.mo b/searx/translations/fi/LC_MESSAGES/messages.mo
index 8f231d875..36bdc2c90 100644
--- a/searx/translations/fi/LC_MESSAGES/messages.mo
+++ b/searx/translations/fi/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/fi/LC_MESSAGES/messages.po b/searx/translations/fi/LC_MESSAGES/messages.po
index 67a6ff83e..4c78106ac 100644
--- a/searx/translations/fi/LC_MESSAGES/messages.po
+++ b/searx/translations/fi/LC_MESSAGES/messages.po
@@ -6,18 +6,19 @@
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2017
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Finnish <https://weblate.bubu1.eu/projects/searxng/searxng/fi/"
+">\n"
"Language: fi\n"
-"Language-Team: Finnish "
-"(http://www.transifex.com/asciimoo/searx/language/fi/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -131,7 +132,7 @@ msgstr "Tietuetta ei löytynyt"
#: searx/engines/qwant.py:198
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:401
msgid "Source"
-msgstr ""
+msgstr "Lähde"
#: searx/webapp.py:523 searx/webapp.py:935
msgid "Invalid settings, please edit your preferences"
@@ -155,7 +156,7 @@ msgstr "{hours} t, {minutes} min sitten"
#: searx/webapp.py:856
msgid "Suspended"
-msgstr ""
+msgstr "keskeytetty"
#: searx/answerers/random/answerer.py:65
msgid "Random value generator"
@@ -191,7 +192,7 @@ msgstr "Tästä julkaisusta ei ole yhteenvetoa."
#: searx/engines/qwant.py:200
msgid "Channel"
-msgstr ""
+msgstr "Kanava"
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@@ -1063,7 +1064,7 @@ msgstr "Hyvin tehty!"
#: searx/templates/oscar/messages/save_settings_successfull.html:8
msgid "Settings saved successfully."
-msgstr "Asetukset tallennettiin onnistuneesti"
+msgstr "Asetukset tallennettiin onnistuneesti."
#: searx/templates/oscar/messages/unknow_error.html:7
msgid "Oh snap!"
@@ -1362,4 +1363,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/fil/LC_MESSAGES/messages.mo b/searx/translations/fil/LC_MESSAGES/messages.mo
index df385b22a..49452ebc2 100644
--- a/searx/translations/fil/LC_MESSAGES/messages.mo
+++ b/searx/translations/fil/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/fil/LC_MESSAGES/messages.po b/searx/translations/fil/LC_MESSAGES/messages.po
index e51d45531..deee62612 100644
--- a/searx/translations/fil/LC_MESSAGES/messages.po
+++ b/searx/translations/fil/LC_MESSAGES/messages.po
@@ -6,19 +6,20 @@
# gr01d, 2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: gr01d\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Filipino <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"fil/>\n"
"Language: fil\n"
-"Language-Team: Filipino "
-"(http://www.transifex.com/asciimoo/searx/language/fil/)\n"
-"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4"
-" || n % 10 != 6 || n % 10 != 9)\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==2 || n==3) || (n % 10 != 4 || "
+"n % 10 != 6 || n % 10 != 9);\n"
+"X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -164,7 +165,7 @@ msgstr "Random value generator"
#: searx/answerers/random/answerer.py:66
msgid "Generate different random values"
-msgstr "Generate different random values"
+msgstr ""
#: searx/answerers/statistics/answerer.py:50
msgid "Statistics functions"
@@ -222,7 +223,7 @@ msgstr ""
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
-msgstr "Open Access DOI rewrite"
+msgstr ""
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
@@ -266,7 +267,7 @@ msgstr "Alisin ang tracker sa ibabalik na URL"
#: searx/plugins/vim_hotkeys.py:3
msgid "Vim-like hotkeys"
-msgstr "Vim-like hotkeys"
+msgstr ""
#: searx/plugins/vim_hotkeys.py:4
msgid ""
@@ -296,7 +297,7 @@ msgstr "hinggil"
#: searx/templates/oscar/advanced.html:4
msgid "Advanced settings"
-msgstr "Advanced settings"
+msgstr ""
#: searx/templates/oscar/base.html:55
#: searx/templates/oscar/messages/first_time.html:4
@@ -362,19 +363,19 @@ msgstr "i-magnet ang link"
#: searx/templates/oscar/macros.html:24
#: searx/templates/simple/result_templates/torrent.html:7
msgid "torrent file"
-msgstr "torrent file"
+msgstr ""
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
#: searx/templates/simple/macros.html:41
msgid "cached"
-msgstr "cached"
+msgstr ""
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
#: searx/templates/simple/macros.html:41
msgid "proxied"
-msgstr "proxied"
+msgstr ""
#: searx/templates/oscar/macros.html:133
#: searx/templates/oscar/preferences.html:330
@@ -400,7 +401,7 @@ msgstr "hindi suportado"
#: searx/templates/oscar/navbar.html:7
#: searx/templates/oscar/preferences.html:90
msgid "preferences"
-msgstr "preferences"
+msgstr ""
#: searx/templates/oscar/preferences.html:12
#: searx/templates/simple/preferences.html:29
@@ -456,7 +457,7 @@ msgstr ""
#: searx/templates/oscar/preferences.html:96
#: searx/templates/simple/preferences.html:101
msgid "Preferences"
-msgstr "Preferences"
+msgstr ""
#: searx/templates/oscar/preferences.html:101
#: searx/templates/oscar/preferences.html:111
@@ -546,7 +547,7 @@ msgstr "Wala"
#: searx/templates/oscar/preferences.html:153
#: searx/templates/simple/preferences.html:131
msgid "Autocomplete"
-msgstr "Autocomplete"
+msgstr ""
#: searx/templates/oscar/preferences.html:154
#: searx/templates/simple/preferences.html:140
@@ -564,8 +565,6 @@ msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
msgstr ""
-"Redirect to open-access versions of publications when available (plugin "
-"required)"
#: searx/templates/oscar/preferences.html:183
#: searx/templates/simple/preferences.html:173
@@ -708,7 +707,7 @@ msgstr "Pangalan ng engine"
#: searx/templates/oscar/preferences.html:346
#: searx/templates/simple/preferences.html:284
msgid "Shortcut"
-msgstr "Shortcut"
+msgstr ""
#: searx/templates/oscar/preferences.html:333
#: searx/templates/oscar/preferences.html:345
@@ -798,7 +797,7 @@ msgstr "Pangalan ng cookie"
#: searx/templates/oscar/preferences.html:452
#: searx/templates/simple/preferences.html:364
msgid "Value"
-msgstr "Value"
+msgstr ""
#: searx/templates/oscar/preferences.html:469
#: searx/templates/simple/preferences.html:385
@@ -1100,7 +1099,7 @@ msgstr ""
#: searx/templates/oscar/result_templates/torrent.html:7
#: searx/templates/simple/result_templates/torrent.html:11
msgid "Filesize"
-msgstr "Filesize"
+msgstr ""
#: searx/templates/oscar/result_templates/files.html:38
#: searx/templates/oscar/result_templates/torrent.html:9
@@ -1368,4 +1367,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/hr/LC_MESSAGES/messages.mo b/searx/translations/hr/LC_MESSAGES/messages.mo
index 469f75fd4..c9b2d4203 100644
--- a/searx/translations/hr/LC_MESSAGES/messages.mo
+++ b/searx/translations/hr/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/hr/LC_MESSAGES/messages.po b/searx/translations/hr/LC_MESSAGES/messages.po
index 5f208cce3..89c4f7814 100644
--- a/searx/translations/hr/LC_MESSAGES/messages.po
+++ b/searx/translations/hr/LC_MESSAGES/messages.po
@@ -7,19 +7,20 @@
# Issa1552 <fairfull.playing@gmail.com>, 2020
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 22:17+0000\n"
-"Last-Translator: Issa1552 <fairfull.playing@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Croatian <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"hr/>\n"
"Language: hr\n"
-"Language-Team: Croatian "
-"(http://www.transifex.com/asciimoo/searx/language/hr/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -1058,7 +1059,7 @@ msgid ""
"categories."
msgstr ""
"nema rezultata pretraživanja. Unesite novi upit ili pretražite u više "
-"kategorija"
+"kategorija."
#: searx/templates/oscar/messages/save_settings_successfull.html:7
msgid "Well done!"
@@ -1364,4 +1365,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/ia/LC_MESSAGES/messages.mo b/searx/translations/ia/LC_MESSAGES/messages.mo
index aef73afb7..555d17272 100644
--- a/searx/translations/ia/LC_MESSAGES/messages.mo
+++ b/searx/translations/ia/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/ia/LC_MESSAGES/messages.po b/searx/translations/ia/LC_MESSAGES/messages.po
index 0db81ad95..bbb5df313 100644
--- a/searx/translations/ia/LC_MESSAGES/messages.po
+++ b/searx/translations/ia/LC_MESSAGES/messages.po
@@ -6,18 +6,19 @@
# Guimarães Mello <matheus.mello@disroot.org>, 2017,2019
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Interlingua <https://weblate.bubu1.eu/projects/searxng/"
+"searxng/ia/>\n"
"Language: ia\n"
-"Language-Team: Interlingua "
-"(http://www.transifex.com/asciimoo/searx/language/ia/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -135,7 +136,7 @@ msgstr ""
#: searx/webapp.py:523 searx/webapp.py:935
msgid "Invalid settings, please edit your preferences"
-msgstr "Configurationes non valide, per favor, modifica tu preferentias."
+msgstr "Configurationes non valide, per favor, modifica tu preferentias"
#: searx/webapp.py:539
msgid "Invalid settings"
@@ -509,7 +510,7 @@ msgstr "Lingua pro le recerca"
#: searx/templates/oscar/preferences.html:134
#: searx/templates/simple/preferences.html:126
msgid "What language do you prefer for search?"
-msgstr "Qual lingua tu prefere pro recercar? "
+msgstr "Qual lingua tu prefere pro recercar?"
#: searx/templates/oscar/preferences.html:141
#: searx/templates/oscar/preferences.html:334
@@ -1368,4 +1369,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/id/LC_MESSAGES/messages.mo b/searx/translations/id/LC_MESSAGES/messages.mo
new file mode 100644
index 000000000..88ea71053
--- /dev/null
+++ b/searx/translations/id/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/id/LC_MESSAGES/messages.po b/searx/translations/id/LC_MESSAGES/messages.po
new file mode 100644
index 000000000..e4a60299c
--- /dev/null
+++ b/searx/translations/id/LC_MESSAGES/messages.po
@@ -0,0 +1,1254 @@
+# Translations template for PROJECT.
+# Copyright (C) 2021 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2021-11-24 19:24+0000\n"
+"PO-Revision-Date: 2021-12-11 18:11+0000\n"
+"Last-Translator: Linerly <linerly@protonmail.com>\n"
+"Language-Team: Indonesian <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"id/>\n"
+"Language: id\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 4.8.1\n"
+"Generated-By: Babel 2.9.1\n"
+
+#: searx/webapp.py:164
+msgid "files"
+msgstr "berkas"
+
+#: searx/webapp.py:165
+msgid "general"
+msgstr "umum"
+
+#: searx/webapp.py:166
+msgid "music"
+msgstr "musik"
+
+#: searx/webapp.py:167
+msgid "social media"
+msgstr "media sosial"
+
+#: searx/webapp.py:168
+msgid "images"
+msgstr "gambar"
+
+#: searx/webapp.py:169
+msgid "videos"
+msgstr "video"
+
+#: searx/webapp.py:170
+msgid "it"
+msgstr "teknologi"
+
+#: searx/webapp.py:171
+msgid "news"
+msgstr "berita"
+
+#: searx/webapp.py:172
+msgid "map"
+msgstr "peta"
+
+#: searx/webapp.py:173
+msgid "onions"
+msgstr "onion"
+
+#: searx/webapp.py:174
+msgid "science"
+msgstr "sains"
+
+#: searx/webapp.py:178
+msgid "auto"
+msgstr "otomatis"
+
+#: searx/webapp.py:179
+msgid "light"
+msgstr "terang"
+
+#: searx/webapp.py:180
+msgid "dark"
+msgstr "gelap"
+
+#: searx/webapp.py:184
+msgid "timeout"
+msgstr "waktu habis"
+
+#: searx/webapp.py:185
+msgid "parsing error"
+msgstr "kesalahan penguraian"
+
+#: searx/webapp.py:186
+msgid "HTTP protocol error"
+msgstr "kesalahan protokol HTTP"
+
+#: searx/webapp.py:187
+msgid "network error"
+msgstr "kesalahan jaringan"
+
+#: searx/webapp.py:189
+msgid "unexpected crash"
+msgstr "kegagalan yang tak terduga"
+
+#: searx/webapp.py:196
+msgid "HTTP error"
+msgstr "kesalahan HTTP"
+
+#: searx/webapp.py:197
+msgid "HTTP connection error"
+msgstr "kesalahan koneksi HTTP"
+
+#: searx/webapp.py:203
+msgid "proxy error"
+msgstr "kesalahan proksi"
+
+#: searx/webapp.py:204
+msgid "CAPTCHA"
+msgstr "CAPTCHA"
+
+#: searx/webapp.py:205
+msgid "too many requests"
+msgstr "terlalu banyak permintaan"
+
+#: searx/webapp.py:206
+msgid "access denied"
+msgstr "akses ditolak"
+
+#: searx/webapp.py:207
+msgid "server API error"
+msgstr "kesalahan server API"
+
+#: searx/webapp.py:399
+msgid "No item found"
+msgstr "Item tidak ditemukan"
+
+#: searx/engines/qwant.py:198
+#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:401
+msgid "Source"
+msgstr "Sumber"
+
+#: searx/webapp.py:523 searx/webapp.py:935
+msgid "Invalid settings, please edit your preferences"
+msgstr "Pengaturan tidak valid, mohon ubah preferensi Anda"
+
+#: searx/webapp.py:539
+msgid "Invalid settings"
+msgstr "Pengaturan tidak valid"
+
+#: searx/webapp.py:617 searx/webapp.py:688
+msgid "search error"
+msgstr "kesalahan pencarian"
+
+#: searx/webapp.py:731
+msgid "{minutes} minute(s) ago"
+msgstr "{minutes} menit yang lalu"
+
+#: searx/webapp.py:733
+msgid "{hours} hour(s), {minutes} minute(s) ago"
+msgstr "{hours} jam, {minutes} menit yang lalu"
+
+#: searx/webapp.py:856
+msgid "Suspended"
+msgstr "Ditangguhkan"
+
+#: searx/answerers/random/answerer.py:65
+msgid "Random value generator"
+msgstr "Penghasil nilai acak"
+
+#: searx/answerers/random/answerer.py:66
+msgid "Generate different random values"
+msgstr "Menghasilkan nilai-nilai acak yang berbeda"
+
+#: searx/answerers/statistics/answerer.py:50
+msgid "Statistics functions"
+msgstr "Fungsi-fungsi statistik"
+
+#: searx/answerers/statistics/answerer.py:51
+msgid "Compute {functions} of the arguments"
+msgstr "Menghitung {functions} dari argumen-argumen"
+
+#: searx/engines/openstreetmap.py:155
+msgid "Get directions"
+msgstr "Mendapatkan arah-arah"
+
+#: searx/engines/pdbe.py:90
+msgid "{title} (OBSOLETE)"
+msgstr "{title} (USANG)"
+
+#: searx/engines/pdbe.py:97
+msgid "This entry has been superseded by"
+msgstr "Masukan ini telah digantikan oleh"
+
+#: searx/engines/pubmed.py:78
+msgid "No abstract is available for this publication."
+msgstr "Tidak ada abstrak yang tersedia untuk publikasi ini."
+
+#: searx/engines/qwant.py:200
+msgid "Channel"
+msgstr "Saluran"
+
+#: searx/plugins/hash_plugin.py:24
+msgid "Converts strings to different hash digests."
+msgstr "Mengubah string-string menjadi intisari hash yang berbeda."
+
+#: searx/plugins/hash_plugin.py:52
+msgid "hash digest"
+msgstr "intisari hash"
+
+#: searx/plugins/hostname_replace.py:9
+msgid "Hostname replace"
+msgstr "Pengubah nama host"
+
+#: searx/plugins/hostname_replace.py:10
+msgid "Rewrite result hostnames or remove results based on the hostname"
+msgstr ""
+"Menulis ulang nama-nama host hasil atau menghapus hasil-hasil berdasarkan "
+"pada nama host"
+
+#: searx/plugins/infinite_scroll.py:3
+msgid "Infinite scroll"
+msgstr "Gulir tak terbatas"
+
+#: searx/plugins/infinite_scroll.py:4
+msgid "Automatically load next page when scrolling to bottom of current page"
+msgstr ""
+"Secara otomatis memuat halaman selanjutnya saat menggulir ke bawah halaman "
+"saat ini"
+
+#: searx/plugins/oa_doi_rewrite.py:9
+msgid "Open Access DOI rewrite"
+msgstr "Penulisan ulang Open Access DOI"
+
+#: searx/plugins/oa_doi_rewrite.py:10
+msgid ""
+"Avoid paywalls by redirecting to open-access versions of publications "
+"when available"
+msgstr ""
+"Hindari paywall dengan mengalihkan ke versi yang terbuka dari publikasi saat "
+"tersedia"
+
+#: searx/plugins/search_on_category_select.py:18
+msgid "Search on category select"
+msgstr "Cari berdasarkan pilihan kategori"
+
+#: searx/plugins/search_on_category_select.py:19
+msgid ""
+"Perform search immediately if a category selected. Disable to select "
+"multiple categories. (JavaScript required)"
+msgstr ""
+"Melakukan pencarian segera jika sebuah kategori terpilih. Matikan untuk "
+"memilih banyak kategori. (Membutuhkan JavaScript)"
+
+#: searx/plugins/self_info.py:19
+msgid "Self Informations"
+msgstr "Informasi Diri"
+
+#: searx/plugins/self_info.py:20
+msgid ""
+"Displays your IP if the query is \"ip\" and your user agent if the query "
+"contains \"user agent\"."
+msgstr ""
+"Menampilkan IP Anda jika pencariannya adalah \"ip\" dan agen pengguna Anda "
+"jika pencariannya mengandung \"user agent\"."
+
+#: searx/plugins/tracker_url_remover.py:27
+msgid "Tracker URL remover"
+msgstr "Penghapus URL pelacak"
+
+#: searx/plugins/tracker_url_remover.py:28
+msgid "Remove trackers arguments from the returned URL"
+msgstr "Menghilangkan argumen-argumen pelacak dari URL yang dikembalikan"
+
+#: searx/plugins/vim_hotkeys.py:3
+msgid "Vim-like hotkeys"
+msgstr "Tombol pintas mirip Vim"
+
+#: searx/plugins/vim_hotkeys.py:4
+msgid ""
+"Navigate search results with Vim-like hotkeys (JavaScript required). "
+"Press \"h\" key on main or result page to get help."
+msgstr ""
+"Navigasikan hasil-hasil pencarian dengan tombol pintas mirip Vim ("
+"Membutuhkan JavaScript). Tekan tombol \"h\" pada halaman utama atau halaman "
+"hasil untuk mendapatkan bantuan."
+
+#: searx/templates/oscar/404.html:4 searx/templates/simple/404.html:4
+msgid "Page not found"
+msgstr "Halaman tidak ditemukan"
+
+#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
+#, python-format
+msgid "Go to %(search_page)s."
+msgstr "Pergi ke %(search_page)s."
+
+#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
+msgid "search page"
+msgstr "halaman pencarian"
+
+#: searx/templates/oscar/about.html:2 searx/templates/oscar/navbar.html:6
+msgid "about"
+msgstr "tentang"
+
+#: searx/templates/oscar/advanced.html:4
+msgid "Advanced settings"
+msgstr "Pengaturan lanjut"
+
+#: searx/templates/oscar/base.html:55
+#: searx/templates/oscar/messages/first_time.html:4
+#: searx/templates/oscar/messages/save_settings_successfull.html:5
+#: searx/templates/oscar/messages/unknow_error.html:5
+msgid "Close"
+msgstr "Tutup"
+
+#: searx/templates/oscar/base.html:57
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:6
+#: searx/templates/simple/results.html:47
+msgid "Error!"
+msgstr "Kesalahan!"
+
+#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:54
+msgid "Powered by"
+msgstr "Diberdayakan oleh"
+
+#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:54
+msgid "a privacy-respecting, hackable metasearch engine"
+msgstr ""
+"sebuah mesin pencari meta yang menghormati privasi, dan dapat dimodifikasi"
+
+#: searx/templates/oscar/base.html:86 searx/templates/simple/base.html:55
+msgid "Source code"
+msgstr "Kode sumber"
+
+#: searx/templates/oscar/base.html:87 searx/templates/simple/base.html:56
+msgid "Issue tracker"
+msgstr "Pelacak masalah"
+
+#: searx/templates/oscar/base.html:88 searx/templates/oscar/stats.html:18
+#: searx/templates/simple/base.html:57 searx/templates/simple/stats.html:21
+msgid "Engine stats"
+msgstr "Statistik mesin"
+
+#: searx/templates/oscar/base.html:89
+#: searx/templates/oscar/messages/no_results.html:13
+#: searx/templates/simple/base.html:58
+#: searx/templates/simple/messages/no_results.html:15
+msgid "Public instances"
+msgstr "Instansi umum"
+
+#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:59
+msgid "Contact instance maintainer"
+msgstr "Hubungi pengelola instansi"
+
+#: searx/templates/oscar/languages.html:2
+msgid "Language"
+msgstr "Bahasa"
+
+#: searx/templates/oscar/languages.html:4
+#: searx/templates/simple/filters/languages.html:2
+#: searx/templates/simple/preferences.html:120
+msgid "Default language"
+msgstr "Bahasa bawaan"
+
+#: searx/templates/oscar/macros.html:23
+#: searx/templates/simple/result_templates/torrent.html:6
+msgid "magnet link"
+msgstr "tautan magnet"
+
+#: searx/templates/oscar/macros.html:24
+#: searx/templates/simple/result_templates/torrent.html:7
+msgid "torrent file"
+msgstr "berkas torrent"
+
+#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
+#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
+#: searx/templates/simple/macros.html:41
+msgid "cached"
+msgstr "di-cache"
+
+#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
+#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
+#: searx/templates/simple/macros.html:41
+msgid "proxied"
+msgstr "di-proksi"
+
+#: searx/templates/oscar/macros.html:133
+#: searx/templates/oscar/preferences.html:330
+#: searx/templates/oscar/preferences.html:348
+#: searx/templates/oscar/preferences.html:402
+#: searx/templates/simple/preferences.html:282
+#: searx/templates/simple/preferences.html:320
+msgid "Allow"
+msgstr "Izinkan"
+
+#: searx/templates/oscar/macros.html:139
+msgid "broken"
+msgstr "rusak"
+
+#: searx/templates/oscar/macros.html:141
+msgid "supported"
+msgstr "didukung"
+
+#: searx/templates/oscar/macros.html:143
+msgid "not supported"
+msgstr "tidak didukung"
+
+#: searx/templates/oscar/navbar.html:7
+#: searx/templates/oscar/preferences.html:90
+msgid "preferences"
+msgstr "preferensi"
+
+#: searx/templates/oscar/preferences.html:12
+#: searx/templates/simple/preferences.html:29
+msgid "No HTTPS"
+msgstr "Tanpa HTTPS"
+
+#: searx/templates/oscar/preferences.html:14
+#: searx/templates/oscar/results.html:27 searx/templates/simple/results.html:40
+msgid "Number of results"
+msgstr "Jumlah hasil"
+
+#: searx/templates/oscar/preferences.html:14
+msgid "Avg."
+msgstr "Rata-rata"
+
+#: searx/templates/oscar/messages/no_results.html:8
+#: searx/templates/oscar/preferences.html:17
+#: searx/templates/oscar/preferences.html:18
+#: searx/templates/oscar/results.html:36
+#: searx/templates/simple/messages/no_results.html:10
+#: searx/templates/simple/preferences.html:31
+#: searx/templates/simple/preferences.html:32
+#: searx/templates/simple/results.html:50
+msgid "View error logs and submit a bug report"
+msgstr "Lihat log kesalahan dan kirim sebuah laporan bug"
+
+#: searx/templates/oscar/preferences.html:38
+#: searx/templates/oscar/stats.html:70
+#: searx/templates/simple/preferences.html:53
+#: searx/templates/simple/stats.html:70
+msgid "Median"
+msgstr "Median"
+
+#: searx/templates/oscar/preferences.html:39
+#: searx/templates/oscar/stats.html:76
+#: searx/templates/simple/preferences.html:54
+#: searx/templates/simple/stats.html:76
+msgid "P80"
+msgstr "P80"
+
+#: searx/templates/oscar/preferences.html:40
+#: searx/templates/oscar/stats.html:82
+#: searx/templates/simple/preferences.html:55
+#: searx/templates/simple/stats.html:82
+msgid "P95"
+msgstr "P95"
+
+#: searx/templates/oscar/preferences.html:68
+#: searx/templates/simple/preferences.html:83
+msgid "Failed checker test(s): "
+msgstr "Tes pemeriksa gagal: "
+
+#: searx/templates/oscar/preferences.html:96
+#: searx/templates/simple/preferences.html:101
+msgid "Preferences"
+msgstr "Preferensi"
+
+#: searx/templates/oscar/preferences.html:101
+#: searx/templates/oscar/preferences.html:111
+#: searx/templates/simple/preferences.html:107
+msgid "General"
+msgstr "Umum"
+
+#: searx/templates/oscar/preferences.html:102
+#: searx/templates/oscar/preferences.html:193
+msgid "User Interface"
+msgstr "Antarmuka Pengguna"
+
+#: searx/templates/oscar/preferences.html:103
+#: searx/templates/oscar/preferences.html:257
+#: searx/templates/simple/preferences.html:234
+msgid "Privacy"
+msgstr "Privasi"
+
+#: searx/templates/oscar/preferences.html:104
+#: searx/templates/oscar/preferences.html:307
+#: searx/templates/simple/preferences.html:274
+msgid "Engines"
+msgstr "Mesin"
+
+#: searx/templates/oscar/preferences.html:105
+#: searx/templates/simple/preferences.html:315
+msgid "Special Queries"
+msgstr "Pencarian Khusus"
+
+#: searx/templates/oscar/preferences.html:106
+#: searx/templates/oscar/preferences.html:442
+#: searx/templates/simple/preferences.html:355
+msgid "Cookies"
+msgstr "Cookie"
+
+#: searx/templates/oscar/preferences.html:123
+#: searx/templates/oscar/preferences.html:125
+#: searx/templates/simple/preferences.html:110
+msgid "Default categories"
+msgstr "Kategori bawaan"
+
+#: searx/templates/oscar/preferences.html:133
+#: searx/templates/simple/preferences.html:117
+#: searx/templates/simple/preferences.html:244
+msgid "Search language"
+msgstr "Bahasa pencarian"
+
+#: searx/templates/oscar/preferences.html:134
+#: searx/templates/simple/preferences.html:126
+msgid "What language do you prefer for search?"
+msgstr "Bahasa apa yang Anda ingin pakai untuk pencarian?"
+
+#: searx/templates/oscar/preferences.html:141
+#: searx/templates/oscar/preferences.html:334
+#: searx/templates/oscar/preferences.html:344
+#: searx/templates/simple/filters/safesearch.html:2
+#: searx/templates/simple/filters/safesearch.html:3
+#: searx/templates/simple/filters/safesearch.html:4
+#: searx/templates/simple/preferences.html:145
+#: searx/templates/simple/preferences.html:286
+msgid "SafeSearch"
+msgstr "Pencarian Aman"
+
+#: searx/templates/oscar/preferences.html:142
+#: searx/templates/simple/preferences.html:153
+msgid "Filter content"
+msgstr "Saring konten"
+
+#: searx/templates/oscar/preferences.html:145
+#: searx/templates/simple/filters/safesearch.html:2
+#: searx/templates/simple/preferences.html:148
+msgid "Strict"
+msgstr "Ketat"
+
+#: searx/templates/oscar/preferences.html:146
+#: searx/templates/simple/filters/safesearch.html:3
+#: searx/templates/simple/preferences.html:149
+msgid "Moderate"
+msgstr "Menengah"
+
+#: searx/templates/oscar/preferences.html:147
+#: searx/templates/simple/filters/safesearch.html:4
+#: searx/templates/simple/preferences.html:150
+msgid "None"
+msgstr "Tidak ada"
+
+#: searx/templates/oscar/preferences.html:153
+#: searx/templates/simple/preferences.html:131
+msgid "Autocomplete"
+msgstr "Perlengkapan otomatis"
+
+#: searx/templates/oscar/preferences.html:154
+#: searx/templates/simple/preferences.html:140
+msgid "Find stuff as you type"
+msgstr "Cari hal-hal saat Anda mengetik"
+
+#: searx/templates/oscar/preferences.html:168
+#: searx/templates/simple/preferences.html:159
+msgid "Open Access DOI resolver"
+msgstr "Penyelesaian Open Access DOI"
+
+#: searx/templates/oscar/preferences.html:169
+#: searx/templates/simple/preferences.html:169
+msgid ""
+"Redirect to open-access versions of publications when available (plugin "
+"required)"
+msgstr ""
+"Mengalihkan ke versi terbuka dari publikasi jika tersedia (membutuhkan "
+"plugin)"
+
+#: searx/templates/oscar/preferences.html:183
+#: searx/templates/simple/preferences.html:173
+msgid "Engine tokens"
+msgstr "Token mesin"
+
+#: searx/templates/oscar/preferences.html:184
+#: searx/templates/simple/preferences.html:177
+msgid "Access tokens for private engines"
+msgstr "Akses token untuk mesin pribadi"
+
+#: searx/templates/oscar/preferences.html:198
+#: searx/templates/simple/preferences.html:184
+msgid "Interface language"
+msgstr "Bahasa antarmuka"
+
+#: searx/templates/oscar/preferences.html:199
+#: searx/templates/simple/preferences.html:192
+msgid "Change the language of the layout"
+msgstr "Ubah bahasa tata letak"
+
+#: searx/templates/oscar/preferences.html:210
+#: searx/templates/simple/preferences.html:197
+msgid "Theme"
+msgstr "Tema"
+
+#: searx/templates/oscar/preferences.html:211
+#: searx/templates/simple/preferences.html:205
+msgid "Change SearXNG layout"
+msgstr "Ubah tata letak SearXNG"
+
+#: searx/templates/oscar/preferences.html:222
+#: searx/templates/oscar/preferences.html:228
+msgid "Choose style for this theme"
+msgstr "Pilih gaya untuk tema ini"
+
+#: searx/templates/oscar/preferences.html:222
+#: searx/templates/oscar/preferences.html:228
+msgid "Style"
+msgstr "Gaya"
+
+#: searx/templates/oscar/preferences.html:231
+msgid "Show advanced settings"
+msgstr "Tampilkan pengaturan lanjut"
+
+#: searx/templates/oscar/preferences.html:232
+msgid "Show advanced settings panel in the home page by default"
+msgstr "Tampilkan panel pengaturan lanjut di halaman utama secara default"
+
+#: searx/templates/oscar/preferences.html:235
+#: searx/templates/oscar/preferences.html:245
+#: searx/templates/simple/preferences.html:224
+msgid "On"
+msgstr "Nyala"
+
+#: searx/templates/oscar/preferences.html:236
+#: searx/templates/oscar/preferences.html:246
+#: searx/templates/simple/preferences.html:225
+msgid "Off"
+msgstr "Mati"
+
+#: searx/templates/oscar/preferences.html:241
+#: searx/templates/simple/preferences.html:221
+msgid "Results on new tabs"
+msgstr "Hasil pada tab baru"
+
+#: searx/templates/oscar/preferences.html:242
+#: searx/templates/simple/preferences.html:228
+msgid "Open result links on new browser tabs"
+msgstr "Buka tautan hasil di tab browser baru"
+
+#: searx/templates/oscar/preferences.html:262
+#: searx/templates/simple/preferences.html:237
+msgid "Method"
+msgstr "Metode"
+
+#: searx/templates/oscar/preferences.html:263
+msgid ""
+"Change how forms are submited, <a "
+"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
+" rel=\"external\">learn more about request methods</a>"
+msgstr ""
+"Ubah bagaimana formulir dikirimkan, <a href=\"http://en.wikipedia.org/wiki/"
+"Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">pelajari "
+"lebih lanjut tentang metode permintaan</a>"
+
+#: searx/templates/oscar/preferences.html:273
+#: searx/templates/simple/preferences.html:249
+msgid "Image proxy"
+msgstr "Proksi gambar"
+
+#: searx/templates/oscar/preferences.html:274
+#: searx/templates/simple/preferences.html:256
+msgid "Proxying image results through SearXNG"
+msgstr "Memproksikan hasil gambar melalui SearXNG"
+
+#: searx/templates/oscar/preferences.html:277
+#: searx/templates/oscar/preferences.html:288
+#: searx/templates/simple/preferences.html:252
+#: searx/templates/simple/preferences.html:264
+msgid "Enabled"
+msgstr "Diaktifkan"
+
+#: searx/templates/oscar/preferences.html:278
+#: searx/templates/oscar/preferences.html:289
+#: searx/templates/simple/preferences.html:253
+#: searx/templates/simple/preferences.html:265
+msgid "Disabled"
+msgstr "Dinonaktifkan"
+
+#: searx/templates/oscar/preferences.html:284
+#: searx/templates/simple/preferences.html:261
+msgid "Query in the page's title"
+msgstr "Pencarian pada judul halaman"
+
+#: searx/templates/oscar/preferences.html:285
+#: searx/templates/simple/preferences.html:268
+msgid ""
+"When enabled, the result page's title contains your query. Your browser "
+"can record this title"
+msgstr ""
+"Ketika diaktifkan, judul halaman hasil mengandung pencarian Anda. Browser "
+"Anda dapat merekam judul ini"
+
+#: searx/templates/oscar/preferences.html:315
+msgid "Allow all"
+msgstr "Izinkan semua"
+
+#: searx/templates/oscar/preferences.html:316
+msgid "Disable all"
+msgstr "Matikan semua"
+
+#: searx/templates/oscar/preferences.html:331
+#: searx/templates/oscar/preferences.html:347
+#: searx/templates/oscar/stats.html:29
+#: searx/templates/simple/preferences.html:283
+#: searx/templates/simple/stats.html:28
+msgid "Engine name"
+msgstr "Nama mesin"
+
+#: searx/templates/oscar/preferences.html:332
+#: searx/templates/oscar/preferences.html:346
+#: searx/templates/simple/preferences.html:284
+msgid "Shortcut"
+msgstr "Jalan pintas"
+
+#: searx/templates/oscar/preferences.html:333
+#: searx/templates/oscar/preferences.html:345
+msgid "Selected language"
+msgstr "Bahasa yang dipilih"
+
+#: searx/templates/oscar/preferences.html:335
+#: searx/templates/oscar/preferences.html:343
+#: searx/templates/oscar/time-range.html:2
+#: searx/templates/simple/preferences.html:287
+msgid "Time range"
+msgstr "Rentang waktu"
+
+#: searx/templates/oscar/preferences.html:336
+#: searx/templates/oscar/preferences.html:342
+#: searx/templates/oscar/stats.html:32
+#: searx/templates/simple/preferences.html:288
+#: searx/templates/simple/stats.html:31
+msgid "Response time"
+msgstr "Waktu respons"
+
+#: searx/templates/oscar/preferences.html:337
+#: searx/templates/oscar/preferences.html:341
+#: searx/templates/simple/preferences.html:289
+msgid "Max time"
+msgstr "Waktu maksimum"
+
+#: searx/templates/oscar/preferences.html:338
+#: searx/templates/oscar/preferences.html:340
+#: searx/templates/oscar/stats.html:33
+#: searx/templates/simple/preferences.html:290
+#: searx/templates/simple/stats.html:32
+msgid "Reliability"
+msgstr "Keandalan"
+
+#: searx/templates/oscar/preferences.html:396
+msgid "Query"
+msgstr "Pencarian"
+
+#: searx/templates/oscar/preferences.html:403
+#: searx/templates/simple/preferences.html:321
+msgid "Keywords"
+msgstr "Kata kunci"
+
+#: searx/templates/oscar/preferences.html:404
+#: searx/templates/simple/preferences.html:322
+msgid "Name"
+msgstr "Nama"
+
+#: searx/templates/oscar/preferences.html:405
+#: searx/templates/simple/preferences.html:323
+msgid "Description"
+msgstr "Deskripsi"
+
+#: searx/templates/oscar/preferences.html:406
+#: searx/templates/simple/preferences.html:324
+msgid "Examples"
+msgstr "Contoh"
+
+#: searx/templates/oscar/preferences.html:411
+#: searx/templates/simple/preferences.html:327
+msgid "This is the list of SearXNG's instant answering modules."
+msgstr "Ini adalah daftar dari modul penjawab instan SearXNG."
+
+#: searx/templates/oscar/preferences.html:424
+#: searx/templates/simple/preferences.html:338
+msgid "This is the list of plugins."
+msgstr "Ini adalah daftar plugin."
+
+#: searx/templates/oscar/preferences.html:445
+#: searx/templates/simple/preferences.html:357
+msgid ""
+"This is the list of cookies and their values SearXNG is storing on your "
+"computer."
+msgstr ""
+"Ini adalah daftar cookie dan nilai-nilai mereka yang SearXNG simpan di "
+"komputer Anda."
+
+#: searx/templates/oscar/preferences.html:446
+#: searx/templates/simple/preferences.html:358
+msgid "With that list, you can assess SearXNG transparency."
+msgstr "Dengan daftar itu, Anda dapat menilai transparansi SearXNG."
+
+#: searx/templates/oscar/preferences.html:451
+#: searx/templates/simple/preferences.html:363
+msgid "Cookie name"
+msgstr "Nama cookie"
+
+#: searx/templates/oscar/preferences.html:452
+#: searx/templates/simple/preferences.html:364
+msgid "Value"
+msgstr "Nilai"
+
+#: searx/templates/oscar/preferences.html:469
+#: searx/templates/simple/preferences.html:385
+msgid ""
+"These settings are stored in your cookies, this allows us not to store "
+"this data about you."
+msgstr ""
+"Pengaturan ini disimpan di cookie Anda, ini memungkinkan kami untuk tidak "
+"menyimpan data ini tentang Anda."
+
+#: searx/templates/oscar/preferences.html:470
+#: searx/templates/simple/preferences.html:387
+msgid ""
+"These cookies serve your sole convenience, we don't use these cookies to "
+"track you."
+msgstr ""
+"Cookie ini hanya untuk kenyamanan Anda, kami tidak menggunakan cookie ini "
+"untuk melacak Anda."
+
+#: searx/templates/oscar/preferences.html:474
+#: searx/templates/simple/preferences.html:376
+msgid "Search URL of the currently saved preferences"
+msgstr "URL pencarian dari pengaturan yang tersimpan saat ini"
+
+#: searx/templates/oscar/preferences.html:475
+#: searx/templates/simple/preferences.html:380
+msgid ""
+"Note: specifying custom settings in the search URL can reduce privacy by "
+"leaking data to the clicked result sites."
+msgstr ""
+"Catatan: menampilkan pengaturan khusus pada URL pencarian dapat mengurangi "
+"privasi dengan membocorkan data kepada situs hasil yang diklik."
+
+#: searx/templates/oscar/preferences.html:480
+#: searx/templates/simple/preferences.html:390
+msgid "save"
+msgstr "simpan"
+
+#: searx/templates/oscar/preferences.html:481
+#: searx/templates/simple/preferences.html:392
+msgid "back"
+msgstr "kembali"
+
+#: searx/templates/oscar/preferences.html:482
+#: searx/templates/simple/preferences.html:391
+msgid "Reset defaults"
+msgstr "Atur ulang ke bawaan"
+
+#: searx/templates/oscar/results.html:32 searx/templates/simple/results.html:47
+msgid "Engines cannot retrieve results"
+msgstr "Mesin-mesin tidak dapat mendapatkan hasil"
+
+#: searx/templates/oscar/results.html:53 searx/templates/simple/results.html:69
+msgid "Suggestions"
+msgstr "Saran"
+
+#: searx/templates/oscar/results.html:74
+msgid "Links"
+msgstr "Tautan"
+
+#: searx/templates/oscar/results.html:79 searx/templates/simple/results.html:87
+msgid "Search URL"
+msgstr "URL pencarian"
+
+#: searx/templates/oscar/results.html:84 searx/templates/simple/results.html:92
+msgid "Download results"
+msgstr "Unduh hasil"
+
+#: searx/templates/oscar/results.html:95
+msgid "RSS subscription"
+msgstr "Langganan RSS"
+
+#: searx/templates/oscar/results.html:104
+msgid "Search results"
+msgstr "Hasil pencarian"
+
+#: searx/templates/oscar/results.html:109
+#: searx/templates/simple/results.html:116
+msgid "Try searching for:"
+msgstr "Coba cari:"
+
+#: searx/templates/oscar/results.html:162
+#: searx/templates/oscar/results.html:187
+#: searx/templates/simple/results.html:182
+msgid "next page"
+msgstr "halaman selanjutnya"
+
+#: searx/templates/oscar/results.html:169
+#: searx/templates/oscar/results.html:180
+#: searx/templates/simple/results.html:165
+msgid "previous page"
+msgstr "halaman sebelumnya"
+
+#: searx/templates/oscar/search.html:6 searx/templates/oscar/search_full.html:9
+#: searx/templates/simple/search.html:8
+#: searx/templates/simple/simple_search.html:4
+msgid "Search for..."
+msgstr "Cari untuk..."
+
+#: searx/templates/oscar/search.html:8
+#: searx/templates/oscar/search_full.html:11
+msgid "Start search"
+msgstr "Mulai mencari"
+
+#: searx/templates/oscar/search.html:9
+#: searx/templates/oscar/search_full.html:12
+msgid "Clear search"
+msgstr "Bersihkan pencarian"
+
+#: searx/templates/oscar/search_full.html:12
+msgid "Clear"
+msgstr "Bersihkan"
+
+#: searx/templates/oscar/stats.html:4
+msgid "stats"
+msgstr "statistik"
+
+#: searx/templates/oscar/stats.html:30 searx/templates/simple/stats.html:29
+msgid "Scores"
+msgstr "Skor"
+
+#: searx/templates/oscar/stats.html:31 searx/templates/simple/stats.html:30
+msgid "Result count"
+msgstr "Jumlah hasil"
+
+#: searx/templates/oscar/stats.html:42 searx/templates/simple/stats.html:41
+msgid "Scores per result"
+msgstr "Skor per hasil"
+
+#: searx/templates/oscar/stats.html:65 searx/templates/simple/stats.html:65
+msgid "Total"
+msgstr "Total"
+
+#: searx/templates/oscar/stats.html:66 searx/templates/simple/stats.html:66
+msgid "HTTP"
+msgstr "HTTP"
+
+#: searx/templates/oscar/stats.html:67 searx/templates/simple/stats.html:67
+msgid "Processing"
+msgstr "Memproses"
+
+#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
+msgid "Warnings"
+msgstr "Peringatan"
+
+#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
+msgid "Errors and exceptions"
+msgstr "Kesalahan dan pengecualian"
+
+#: searx/templates/oscar/stats.html:112 searx/templates/simple/stats.html:111
+msgid "Exception"
+msgstr "Pengecualian"
+
+#: searx/templates/oscar/stats.html:114 searx/templates/simple/stats.html:113
+msgid "Message"
+msgstr "Pesan"
+
+#: searx/templates/oscar/stats.html:116 searx/templates/simple/stats.html:115
+msgid "Percentage"
+msgstr "Persentase"
+
+#: searx/templates/oscar/stats.html:118 searx/templates/simple/stats.html:117
+msgid "Parameter"
+msgstr "Parameter"
+
+#: searx/templates/oscar/result_templates/files.html:35
+#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125
+msgid "Filename"
+msgstr "Nama berkas"
+
+#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126
+msgid "Function"
+msgstr "Fungsi"
+
+#: searx/templates/oscar/stats.html:128 searx/templates/simple/stats.html:127
+msgid "Code"
+msgstr "Kode"
+
+#: searx/templates/oscar/stats.html:135 searx/templates/simple/stats.html:134
+msgid "Checker"
+msgstr "Pemeriksa"
+
+#: searx/templates/oscar/stats.html:138 searx/templates/simple/stats.html:137
+msgid "Failed test"
+msgstr "Tes gagal"
+
+#: searx/templates/oscar/stats.html:139 searx/templates/simple/stats.html:138
+msgid "Comment(s)"
+msgstr "Komentar"
+
+#: searx/templates/oscar/time-range.html:5
+#: searx/templates/simple/filters/time_range.html:3
+msgid "Anytime"
+msgstr "Kapan saja"
+
+#: searx/templates/oscar/time-range.html:8
+#: searx/templates/simple/filters/time_range.html:6
+msgid "Last day"
+msgstr "Kemarin"
+
+#: searx/templates/oscar/time-range.html:11
+#: searx/templates/simple/filters/time_range.html:9
+msgid "Last week"
+msgstr "Minggu kemarin"
+
+#: searx/templates/oscar/time-range.html:14
+#: searx/templates/simple/filters/time_range.html:12
+msgid "Last month"
+msgstr "Bulan kemarin"
+
+#: searx/templates/oscar/time-range.html:17
+#: searx/templates/simple/filters/time_range.html:15
+msgid "Last year"
+msgstr "Tahun kemarin"
+
+#: searx/templates/oscar/messages/first_time.html:6
+#: searx/templates/oscar/messages/no_data_available.html:3
+msgid "Heads up!"
+msgstr "Perhatian!"
+
+#: searx/templates/oscar/messages/first_time.html:7
+msgid "It look like you are using SearXNG first time."
+msgstr "Sepertinya Anda menggunakan SearXNG untuk pertama kali."
+
+#: searx/templates/oscar/messages/no_cookies.html:3
+msgid "Information!"
+msgstr "Informasi!"
+
+#: searx/templates/oscar/messages/no_cookies.html:4
+msgid "currently, there are no cookies defined."
+msgstr "saat ini, tidak ada cookie yang didefinisikan"
+
+#: searx/templates/oscar/messages/no_data_available.html:4
+#: searx/templates/simple/stats.html:24
+msgid "There is currently no data available. "
+msgstr "Saat ini tidak ada data yang tersedia. "
+
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:6
+msgid "Engines cannot retrieve results."
+msgstr "Mesin-mesin tidak dapat mendapatkan hasil."
+
+#: searx/templates/oscar/messages/no_results.html:13
+#: searx/templates/simple/messages/no_results.html:15
+msgid "Please, try again later or find another SearXNG instance."
+msgstr "Mohon coba lagi nanti atau cari instansi SearXNG yang lain."
+
+#: searx/templates/oscar/messages/no_results.html:17
+#: searx/templates/simple/messages/no_results.html:20
+msgid "Sorry!"
+msgstr "Maaf!"
+
+#: searx/templates/oscar/messages/no_results.html:18
+#: searx/templates/simple/messages/no_results.html:21
+msgid ""
+"we didn't find any results. Please use another query or search in more "
+"categories."
+msgstr ""
+"kami tidak menemukan hasil apa pun. Mohon menggunakan pencarian lain atau "
+"cari dalam kategori lain."
+
+#: searx/templates/oscar/messages/save_settings_successfull.html:7
+msgid "Well done!"
+msgstr "Selamat!"
+
+#: searx/templates/oscar/messages/save_settings_successfull.html:8
+msgid "Settings saved successfully."
+msgstr "Pengaturan berhasil disimpan."
+
+#: searx/templates/oscar/messages/unknow_error.html:7
+msgid "Oh snap!"
+msgstr "Sial!"
+
+#: searx/templates/oscar/messages/unknow_error.html:8
+msgid "Something went wrong."
+msgstr "Ada yang salah."
+
+#: searx/templates/oscar/result_templates/default.html:7
+#: searx/templates/oscar/result_templates/files.html:7
+#: searx/templates/oscar/result_templates/files.html:10
+#: searx/templates/simple/result_templates/default.html:6
+msgid "show media"
+msgstr "tampilkan media"
+
+#: searx/templates/oscar/result_templates/default.html:7
+#: searx/templates/oscar/result_templates/files.html:7
+#: searx/templates/simple/result_templates/default.html:6
+msgid "hide media"
+msgstr "sembunyikan media"
+
+#: searx/templates/oscar/result_templates/files.html:33
+#: searx/templates/oscar/result_templates/videos.html:19
+#: searx/templates/simple/result_templates/images.html:21
+msgid "Author"
+msgstr "Penulis"
+
+#: searx/templates/oscar/result_templates/files.html:37
+#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/simple/result_templates/torrent.html:11
+msgid "Filesize"
+msgstr "Ukuran berkas"
+
+#: searx/templates/oscar/result_templates/files.html:38
+#: searx/templates/oscar/result_templates/torrent.html:9
+#: searx/templates/simple/result_templates/torrent.html:12
+msgid "Bytes"
+msgstr "Bita"
+
+#: searx/templates/oscar/result_templates/files.html:39
+#: searx/templates/oscar/result_templates/torrent.html:10
+#: searx/templates/simple/result_templates/torrent.html:13
+msgid "kiB"
+msgstr "kiB"
+
+#: searx/templates/oscar/result_templates/files.html:40
+#: searx/templates/oscar/result_templates/torrent.html:11
+#: searx/templates/simple/result_templates/torrent.html:14
+msgid "MiB"
+msgstr "MiB"
+
+#: searx/templates/oscar/result_templates/files.html:41
+#: searx/templates/oscar/result_templates/torrent.html:12
+#: searx/templates/simple/result_templates/torrent.html:15
+msgid "GiB"
+msgstr "GiB"
+
+#: searx/templates/oscar/result_templates/files.html:42
+#: searx/templates/oscar/result_templates/torrent.html:13
+#: searx/templates/simple/result_templates/torrent.html:16
+msgid "TiB"
+msgstr "TiB"
+
+#: searx/templates/oscar/result_templates/files.html:46
+msgid "Date"
+msgstr "Tanggal"
+
+#: searx/templates/oscar/result_templates/files.html:48
+msgid "Type"
+msgstr "Tipe"
+
+#: searx/templates/oscar/result_templates/images.html:27
+msgid "Get image"
+msgstr "Dapatkan gambar"
+
+#: searx/templates/oscar/result_templates/images.html:30
+#: searx/templates/simple/result_templates/images.html:25
+msgid "View source"
+msgstr "Tampilkan sumber"
+
+#: searx/templates/oscar/result_templates/map.html:26
+#: searx/templates/simple/result_templates/map.html:12
+msgid "address"
+msgstr "alamat"
+
+#: searx/templates/oscar/result_templates/map.html:59
+#: searx/templates/simple/result_templates/map.html:43
+msgid "show map"
+msgstr "tampilkan peta"
+
+#: searx/templates/oscar/result_templates/map.html:59
+#: searx/templates/simple/result_templates/map.html:43
+msgid "hide map"
+msgstr "sembunyikan peta"
+
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Seeder"
+msgstr "Seeder"
+
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Leecher"
+msgstr "Leecher"
+
+#: searx/templates/oscar/result_templates/torrent.html:15
+#: searx/templates/simple/result_templates/torrent.html:20
+msgid "Number of Files"
+msgstr "Jumlah Berkas"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "show video"
+msgstr "tampilkan video"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "hide video"
+msgstr "sembunyikan video"
+
+#: searx/templates/oscar/result_templates/videos.html:20
+msgid "Length"
+msgstr "Durasi"
+
+#: searx/templates/simple/categories.html:16
+msgid "Click on the magnifier to perform search"
+msgstr "Tekan pada kaca pembesar untuk melakukan pencarian"
+
+#: searx/templates/simple/preferences.html:85
+msgid "Errors:"
+msgstr "Kesalahan:"
+
+#: searx/templates/simple/preferences.html:181
+msgid "User interface"
+msgstr "Antarmuka pengguna"
+
+#: searx/templates/simple/preferences.html:208
+msgid "Theme style"
+msgstr "Gaya tema"
+
+#: searx/templates/simple/preferences.html:216
+msgid "Choose auto to follow your browser settings"
+msgstr "Pilih otomatis untuk mengikuti pengaturan browser Anda"
+
+#: searx/templates/simple/preferences.html:275
+msgid "Currently used search engines"
+msgstr "Mesin pencari yang saat ini digunakan"
+
+#: searx/templates/simple/preferences.html:285
+msgid "Supports selected language"
+msgstr "Mendukung bahasa yang dipilih"
+
+#: searx/templates/simple/results.html:24
+msgid "Answers"
+msgstr "Jawaban"
+
+#: searx/templates/simple/search.html:9
+#: searx/templates/simple/simple_search.html:5
+msgid "clear"
+msgstr "bersihkan"
+
+#: searx/templates/simple/search.html:10
+#: searx/templates/simple/simple_search.html:6
+msgid "search"
+msgstr "cari"
+
+#: searx/templates/simple/result_templates/default.html:14
+#: searx/templates/simple/result_templates/videos.html:14
+msgid "This site did not provide any description."
+msgstr "Situs ini tidak memberikan deskripsi apa pun."
+
+#: searx/templates/simple/result_templates/images.html:22
+msgid "Format"
+msgstr "Format"
+
+#: searx/templates/simple/result_templates/images.html:24
+msgid "Engine"
+msgstr "Mesin"
diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo
index 13e60398d..e26865eae 100644
--- a/searx/translations/it/LC_MESSAGES/messages.mo
+++ b/searx/translations/it/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/it/LC_MESSAGES/messages.po b/searx/translations/it/LC_MESSAGES/messages.po
index 8922fd794..078cb1a1d 100644
--- a/searx/translations/it/LC_MESSAGES/messages.po
+++ b/searx/translations/it/LC_MESSAGES/messages.po
@@ -14,18 +14,19 @@
# Random_R, 2018-2020
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-09-25 10:10+0000\n"
-"Last-Translator: Random_R\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Italian <https://weblate.bubu1.eu/projects/searxng/searxng/it/"
+">\n"
"Language: it\n"
-"Language-Team: Italian "
-"(http://www.transifex.com/asciimoo/searx/language/it/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -195,7 +196,7 @@ msgstr "Questa voce è stata sostituita da"
#: searx/engines/pubmed.py:78
msgid "No abstract is available for this publication."
-msgstr "Nessun sommario disponibile per questa pubblicazione"
+msgstr "Nessun sommario disponibile per questa pubblicazione."
#: searx/engines/qwant.py:200
msgid "Channel"
@@ -837,7 +838,7 @@ msgid ""
"leaking data to the clicked result sites."
msgstr ""
"Nota: specificare impostazioni personalizzate nell'URL di ricerca può "
-"ridurre la privacy facendo trapelare dati ai siti cliccati"
+"ridurre la privacy facendo trapelare dati ai siti cliccati."
#: searx/templates/oscar/preferences.html:480
#: searx/templates/simple/preferences.html:390
@@ -1046,7 +1047,7 @@ msgstr "Non ci sono dati attualmente disponibili."
#: searx/templates/oscar/messages/no_results.html:4
#: searx/templates/simple/messages/no_results.html:6
msgid "Engines cannot retrieve results."
-msgstr "I motori di ricerca non riescono a recuperare risultati"
+msgstr "I motori di ricerca non riescono a recuperare risultati."
#: searx/templates/oscar/messages/no_results.html:13
#: searx/templates/simple/messages/no_results.html:15
@@ -1368,4 +1369,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo
index e18ff8af8..80dd1f4fc 100644
--- a/searx/translations/ja/LC_MESSAGES/messages.mo
+++ b/searx/translations/ja/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/ja/LC_MESSAGES/messages.po b/searx/translations/ja/LC_MESSAGES/messages.po
index d02e9e64c..53ea0eb3c 100644
--- a/searx/translations/ja/LC_MESSAGES/messages.po
+++ b/searx/translations/ja/LC_MESSAGES/messages.po
@@ -17,8 +17,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-12-03 07:17+0000\n"
-"Last-Translator: Alexandre Flament <alex@al-f.net>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Japanese <https://weblate.bubu1.eu/projects/searxng/searxng/"
"ja/>\n"
"Language: ja\n"
@@ -67,7 +67,7 @@ msgstr "地図"
#: searx/webapp.py:173
msgid "onions"
-msgstr ""
+msgstr "オニオン"
#: searx/webapp.py:174
msgid "science"
@@ -79,7 +79,7 @@ msgstr "自動"
#: searx/webapp.py:179
msgid "light"
-msgstr ""
+msgstr "ライト"
#: searx/webapp.py:180
msgid "dark"
@@ -91,7 +91,7 @@ msgstr "タイムアウト"
#: searx/webapp.py:185
msgid "parsing error"
-msgstr ""
+msgstr "パースエラー"
#: searx/webapp.py:186
msgid "HTTP protocol error"
@@ -144,7 +144,7 @@ msgstr "ソース"
#: searx/webapp.py:523 searx/webapp.py:935
msgid "Invalid settings, please edit your preferences"
-msgstr "不正な設定です。設定を編集してください。"
+msgstr "不正な設定です。設定を編集してください"
#: searx/webapp.py:539
msgid "Invalid settings"
@@ -184,7 +184,7 @@ msgstr "変数の{functions}を計算する"
#: searx/engines/openstreetmap.py:155
msgid "Get directions"
-msgstr ""
+msgstr "経路を"
#: searx/engines/pdbe.py:90
msgid "{title} (OBSOLETE)"
@@ -645,9 +645,9 @@ msgid ""
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
" rel=\"external\">learn more about request methods</a>"
msgstr ""
-"フォームがどの方法で送信されるかを変更できます。<a "
-"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
-" rel=\"external\">リクエストメソッドについて詳しく知るにはここをクリック</a>。"
+"フォームがどの方法で送信されるかを変更できます。<a href=\"http://en.wikipedia.org/wiki/"
+"Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\""
+">リクエストメソッドについて詳しく知るにはここをクリック</a>"
#: searx/templates/oscar/preferences.html:273
#: searx/templates/simple/preferences.html:249
diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo
index 0407d7bb5..8777e7644 100644
--- a/searx/translations/lt/LC_MESSAGES/messages.mo
+++ b/searx/translations/lt/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/lt/LC_MESSAGES/messages.po b/searx/translations/lt/LC_MESSAGES/messages.po
index c5449d157..23727ae77 100644
--- a/searx/translations/lt/LC_MESSAGES/messages.po
+++ b/searx/translations/lt/LC_MESSAGES/messages.po
@@ -6,20 +6,21 @@
# Moo, 2019-2020
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-12 11:15+0000\n"
-"Last-Translator: Moo\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Lithuanian <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"lt/>\n"
"Language: lt\n"
-"Language-Team: Lithuanian "
-"(http://www.transifex.com/asciimoo/searx/language/lt/)\n"
-"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100"
-" < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < "
-"11) ? 1 : n % 1 != 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 % 10 == 1 && (n % 100 > 19 || n % 100 < "
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
+" n % 1 != 0 ? 2: 3);\n"
+"X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -149,11 +150,11 @@ msgstr "paieškos klaida"
#: searx/webapp.py:731
msgid "{minutes} minute(s) ago"
-msgstr "prieš {minutes} min."
+msgstr "prieš {minutes} min"
#: searx/webapp.py:733
msgid "{hours} hour(s), {minutes} minute(s) ago"
-msgstr "prieš {hours} val., {minutes} min."
+msgstr "prieš {hours} val., {minutes} min"
#: searx/webapp.py:856
msgid "Suspended"
@@ -1364,4 +1365,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo
index 147ac298f..09f2fd9b2 100644
--- a/searx/translations/nl/LC_MESSAGES/messages.mo
+++ b/searx/translations/nl/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/nl/LC_MESSAGES/messages.po b/searx/translations/nl/LC_MESSAGES/messages.po
index 3f1dea315..f0fe6cf07 100644
--- a/searx/translations/nl/LC_MESSAGES/messages.po
+++ b/searx/translations/nl/LC_MESSAGES/messages.po
@@ -9,18 +9,19 @@
# Rejo Zenger <rejo@zenger.nl>, 2016-2017
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-12-29 20:44+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Dutch <https://weblate.bubu1.eu/projects/searxng/searxng/nl/>"
+"\n"
"Language: nl\n"
-"Language-Team: Dutch "
-"(http://www.transifex.com/asciimoo/searx/language/nl/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -1368,4 +1369,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/nl_BE/LC_MESSAGES/messages.mo b/searx/translations/nl_BE/LC_MESSAGES/messages.mo
index 1f2158c67..48225dc75 100644
--- a/searx/translations/nl_BE/LC_MESSAGES/messages.mo
+++ b/searx/translations/nl_BE/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/nl_BE/LC_MESSAGES/messages.po b/searx/translations/nl_BE/LC_MESSAGES/messages.po
index 35756541a..0bc489e51 100644
--- a/searx/translations/nl_BE/LC_MESSAGES/messages.po
+++ b/searx/translations/nl_BE/LC_MESSAGES/messages.po
@@ -7,18 +7,19 @@
# Nathan Follens, 2018-2019
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 21:49+0000\n"
-"Last-Translator: Issa1552 <fairfull.playing@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Flemish <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"nl_BE/>\n"
"Language: nl_BE\n"
-"Language-Team: Dutch (Belgium) "
-"(http://www.transifex.com/asciimoo/searx/language/nl_BE/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -1366,4 +1367,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/oc/LC_MESSAGES/messages.mo b/searx/translations/oc/LC_MESSAGES/messages.mo
index ddb8a48bb..892047b08 100644
--- a/searx/translations/oc/LC_MESSAGES/messages.mo
+++ b/searx/translations/oc/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/oc/LC_MESSAGES/messages.po b/searx/translations/oc/LC_MESSAGES/messages.po
index b75868293..9175d5bab 100644
--- a/searx/translations/oc/LC_MESSAGES/messages.po
+++ b/searx/translations/oc/LC_MESSAGES/messages.po
@@ -7,17 +7,19 @@
# Marc Abonce Seguin, 2019
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: Quentin PAGÈS\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Occitan <https://weblate.bubu1.eu/projects/searxng/searxng/oc/"
+">\n"
"Language: oc\n"
-"Language-Team: Occitan (post 1500) "
-"(http://www.transifex.com/asciimoo/searx/language/oc/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -187,7 +189,7 @@ msgstr "Aqueste element es estat remplaçat per"
#: searx/engines/pubmed.py:78
msgid "No abstract is available for this publication."
-msgstr "Cap de resumit pas disponible per aquesta publicacion"
+msgstr "Cap de resumit pas disponible per aquesta publicacion."
#: searx/engines/qwant.py:200
msgid "Channel"
@@ -219,7 +221,7 @@ msgstr "Carga automaticament la pagina seguenta quand arribatz en fin de pagina"
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
-msgstr "Open Access DOI reescritura "
+msgstr "Open Access DOI reescritura"
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
@@ -238,8 +240,8 @@ msgid ""
"Perform search immediately if a category selected. Disable to select "
"multiple categories. (JavaScript required)"
msgstr ""
-"Lança la recèrca sul còp se una categoria es seleccionada. Desactivar per"
-" seleccionar mai d'una categoria (Javascript necessari)."
+"Lança la recèrca sul còp se una categoria es seleccionada. Desactivar per "
+"seleccionar mai d'una categoria (Javascript necessari)"
#: searx/plugins/self_info.py:19
msgid "Self Informations"
@@ -281,7 +283,7 @@ msgstr "Pagina pas trobada"
#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
#, python-format
msgid "Go to %(search_page)s."
-msgstr "Anar a %(search_page)s."
+msgstr "Anar a %(search_page)s."
#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
msgid "search page"
@@ -1362,4 +1364,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo
index 53c8900a6..16d56d04e 100644
--- a/searx/translations/pt/LC_MESSAGES/messages.mo
+++ b/searx/translations/pt/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/pt/LC_MESSAGES/messages.po b/searx/translations/pt/LC_MESSAGES/messages.po
index d8dfb5a78..dea10b3b2 100644
--- a/searx/translations/pt/LC_MESSAGES/messages.po
+++ b/searx/translations/pt/LC_MESSAGES/messages.po
@@ -7,18 +7,19 @@
# C. E., 2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-11-03 08:06+0000\n"
-"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Alexandre Flament <alex@al-f.net>\n"
+"Language-Team: Portuguese <https://weblate.bubu1.eu/projects/searxng/searxng/"
+"pt/>\n"
"Language: pt\n"
-"Language-Team: Portuguese "
-"<https://weblate.bubu1.eu/projects/searxng/searxng/pt/>\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -67,15 +68,15 @@ msgstr "ciência"
#: searx/webapp.py:178
msgid "auto"
-msgstr ""
+msgstr "automático"
#: searx/webapp.py:179
msgid "light"
-msgstr ""
+msgstr "claro"
#: searx/webapp.py:180
msgid "dark"
-msgstr ""
+msgstr "escuro"
#: searx/webapp.py:184
msgid "timeout"
@@ -344,7 +345,7 @@ msgstr "Instâncias públicas"
#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:59
msgid "Contact instance maintainer"
-msgstr ""
+msgstr "Contate o mantenedor da instância"
#: searx/templates/oscar/languages.html:2
msgid "Language"
@@ -389,7 +390,7 @@ msgstr "Permitir"
#: searx/templates/oscar/macros.html:139
msgid "broken"
-msgstr ""
+msgstr "quebrado"
#: searx/templates/oscar/macros.html:141
msgid "supported"
@@ -416,7 +417,7 @@ msgstr "Número de resultados"
#: searx/templates/oscar/preferences.html:14
msgid "Avg."
-msgstr ""
+msgstr "Média"
#: searx/templates/oscar/messages/no_results.html:8
#: searx/templates/oscar/preferences.html:17
@@ -427,14 +428,14 @@ msgstr ""
#: searx/templates/simple/preferences.html:32
#: searx/templates/simple/results.html:50
msgid "View error logs and submit a bug report"
-msgstr ""
+msgstr "Olhar os logs de erro e submeter um relatório de bug"
#: searx/templates/oscar/preferences.html:38
#: searx/templates/oscar/stats.html:70
#: searx/templates/simple/preferences.html:53
#: searx/templates/simple/stats.html:70
msgid "Median"
-msgstr ""
+msgstr "Mediana"
#: searx/templates/oscar/preferences.html:39
#: searx/templates/oscar/stats.html:76
@@ -469,7 +470,7 @@ msgstr "Geral"
#: searx/templates/oscar/preferences.html:102
#: searx/templates/oscar/preferences.html:193
msgid "User Interface"
-msgstr ""
+msgstr "Interface de usuário"
#: searx/templates/oscar/preferences.html:103
#: searx/templates/oscar/preferences.html:257
@@ -486,7 +487,7 @@ msgstr "Motores de pesquisa"
#: searx/templates/oscar/preferences.html:105
#: searx/templates/simple/preferences.html:315
msgid "Special Queries"
-msgstr ""
+msgstr "Consultas especiais"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:442
@@ -592,12 +593,12 @@ msgstr "Alterar o idioma do esquema"
#: searx/templates/oscar/preferences.html:210
#: searx/templates/simple/preferences.html:197
msgid "Theme"
-msgstr ""
+msgstr "Tema"
#: searx/templates/oscar/preferences.html:211
#: searx/templates/simple/preferences.html:205
msgid "Change SearXNG layout"
-msgstr ""
+msgstr "Mudar o layout do SearXNG"
#: searx/templates/oscar/preferences.html:222
#: searx/templates/oscar/preferences.html:228
@@ -611,7 +612,7 @@ msgstr "Estilo"
#: searx/templates/oscar/preferences.html:231
msgid "Show advanced settings"
-msgstr ""
+msgstr "Mostrar as configurações avançadas"
#: searx/templates/oscar/preferences.html:232
msgid "Show advanced settings panel in the home page by default"
@@ -1370,4 +1371,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/sk/LC_MESSAGES/messages.mo b/searx/translations/sk/LC_MESSAGES/messages.mo
index c2fe91722..b0311bdb7 100644
--- a/searx/translations/sk/LC_MESSAGES/messages.mo
+++ b/searx/translations/sk/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/sk/LC_MESSAGES/messages.po b/searx/translations/sk/LC_MESSAGES/messages.po
index 2d179a2d1..fa0b47465 100644
--- a/searx/translations/sk/LC_MESSAGES/messages.po
+++ b/searx/translations/sk/LC_MESSAGES/messages.po
@@ -6,19 +6,20 @@
# Jan Hovancik, 2017
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-11-03 08:06+0000\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Slovak <https://weblate.bubu1.eu/projects/searxng/searxng/sk/>"
+"\n"
"Language: sk\n"
-"Language-Team: Slovak "
-"<https://weblate.bubu1.eu/projects/searxng/searxng/sk/>\n"
-"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 "
-"&& n >= 2 && n <= 4 ? 1 : n % 1 != 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 == 1 ? 0 : n % 1 == 0 && n "
+">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+"X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -279,7 +280,7 @@ msgstr ""
#: searx/templates/oscar/404.html:4 searx/templates/simple/404.html:4
msgid "Page not found"
-msgstr "Stránka sa nenašla."
+msgstr "Stránka sa nenašla"
#: searx/templates/oscar/404.html:6 searx/templates/simple/404.html:6
#, python-format
@@ -1054,7 +1055,7 @@ msgid ""
"categories."
msgstr ""
"nepodarilo sa nájsť žiadne výsledky. Skúste použiť iné zadanie alebo "
-"vyhľadávajte vo viacerých kategóriach. "
+"vyhľadávajte vo viacerých kategóriach."
#: searx/templates/oscar/messages/save_settings_successfull.html:7
msgid "Well done!"
@@ -1357,4 +1358,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo
index ea4094bdb..63719e699 100644
--- a/searx/translations/sr/LC_MESSAGES/messages.mo
+++ b/searx/translations/sr/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/sr/LC_MESSAGES/messages.po b/searx/translations/sr/LC_MESSAGES/messages.po
index 6dd71a248..3d8610dd1 100644
--- a/searx/translations/sr/LC_MESSAGES/messages.po
+++ b/searx/translations/sr/LC_MESSAGES/messages.po
@@ -8,19 +8,20 @@
# jugi1, 2017
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 22:18+0000\n"
-"Last-Translator: Issa1552 <fairfull.playing@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Serbian <https://weblate.bubu1.eu/projects/searxng/searxng/sr/"
+">\n"
"Language: sr\n"
-"Language-Team: Serbian "
-"(http://www.transifex.com/asciimoo/searx/language/sr/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -564,8 +565,8 @@ msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
msgstr ""
-"Преусмери на верзије публикација отвореног приступа кад је доступно "
-"(потребан је плагин)"
+"Преусмери на верзије публикација отвореног приступа кад је доступно ("
+"потребан је плагин)"
#: searx/templates/oscar/preferences.html:183
#: searx/templates/simple/preferences.html:173
@@ -1361,4 +1362,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/sv/LC_MESSAGES/messages.mo b/searx/translations/sv/LC_MESSAGES/messages.mo
index f2c60d597..c379ab16a 100644
--- a/searx/translations/sv/LC_MESSAGES/messages.mo
+++ b/searx/translations/sv/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/sv/LC_MESSAGES/messages.po b/searx/translations/sv/LC_MESSAGES/messages.po
index b12f0ced4..98c7ae689 100644
--- a/searx/translations/sv/LC_MESSAGES/messages.po
+++ b/searx/translations/sv/LC_MESSAGES/messages.po
@@ -8,18 +8,19 @@
# efef6ec5b435a041fce803c7f8af77d2_2341d43, 2017-2018
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-08-29 08:47+0000\n"
-"Last-Translator: efef6ec5b435a041fce803c7f8af77d2_2341d43\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"Language-Team: Swedish <https://weblate.bubu1.eu/projects/searxng/searxng/sv/"
+">\n"
"Language: sv\n"
-"Language-Team: Swedish "
-"(http://www.transifex.com/asciimoo/searx/language/sv/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -1361,4 +1362,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/ta/LC_MESSAGES/messages.mo b/searx/translations/ta/LC_MESSAGES/messages.mo
index 43109f564..539ec06aa 100644
--- a/searx/translations/ta/LC_MESSAGES/messages.mo
+++ b/searx/translations/ta/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/ta/LC_MESSAGES/messages.po b/searx/translations/ta/LC_MESSAGES/messages.po
index 34278c75f..927d8396d 100644
--- a/searx/translations/ta/LC_MESSAGES/messages.po
+++ b/searx/translations/ta/LC_MESSAGES/messages.po
@@ -11,18 +11,19 @@
# Prasanna Venkadesh <prasmailme@gmail.com>, 2019
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2020-07-09 13:10+0000\n"
-"Last-Translator: Prasanna Venkadesh <prasmailme@gmail.com>\n"
+"PO-Revision-Date: 2021-12-10 07:17+0000\n"
+"Last-Translator: Naveen <naveen.translator@protonmail.com>\n"
+"Language-Team: Tamil <https://weblate.bubu1.eu/projects/searxng/searxng/ta/>"
+"\n"
"Language: ta\n"
-"Language-Team: Tamil "
-"(http://www.transifex.com/asciimoo/searx/language/ta/)\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -51,7 +52,7 @@ msgstr "காணொளிகள்"
#: searx/webapp.py:170
msgid "it"
-msgstr ""
+msgstr "அது"
#: searx/webapp.py:171
msgid "news"
@@ -63,71 +64,72 @@ msgstr "வரைப்படம்"
#: searx/webapp.py:173
msgid "onions"
-msgstr ""
+msgstr "வெங்காயம்"
#: searx/webapp.py:174
msgid "science"
msgstr "அறிவியல்"
#: searx/webapp.py:178
+#, fuzzy
msgid "auto"
-msgstr ""
+msgstr "ஆட்டோ"
#: searx/webapp.py:179
msgid "light"
-msgstr ""
+msgstr "ஒளி"
#: searx/webapp.py:180
msgid "dark"
-msgstr ""
+msgstr "இருள்"
#: searx/webapp.py:184
msgid "timeout"
-msgstr ""
+msgstr "நேரம் முடிந்தது"
#: searx/webapp.py:185
msgid "parsing error"
-msgstr ""
+msgstr "பாகுபடுத்தும் பிழை"
#: searx/webapp.py:186
msgid "HTTP protocol error"
-msgstr ""
+msgstr "HTTP நெறிமுறை பிழை"
#: searx/webapp.py:187
msgid "network error"
-msgstr ""
+msgstr "பிணைய பிழை"
#: searx/webapp.py:189
msgid "unexpected crash"
-msgstr ""
+msgstr "எதிர்பாராத விபத்து"
#: searx/webapp.py:196
msgid "HTTP error"
-msgstr ""
+msgstr "HTTP பிழை"
#: searx/webapp.py:197
msgid "HTTP connection error"
-msgstr ""
+msgstr "HTTP இணைப்பு பிழை"
#: searx/webapp.py:203
msgid "proxy error"
-msgstr ""
+msgstr "ப்ராக்ஸி பிழை"
#: searx/webapp.py:204
msgid "CAPTCHA"
-msgstr ""
+msgstr "கேப்ட்சா"
#: searx/webapp.py:205
msgid "too many requests"
-msgstr ""
+msgstr "பல கோரிக்கைகள்"
#: searx/webapp.py:206
msgid "access denied"
-msgstr ""
+msgstr "அணுகல் மறுக்கப்பட்டது"
#: searx/webapp.py:207
msgid "server API error"
-msgstr ""
+msgstr "சேவையக API பிழை"
#: searx/webapp.py:399
msgid "No item found"
@@ -136,7 +138,7 @@ msgstr "எதுவும் கிடைக்கவில்லை"
#: searx/engines/qwant.py:198
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:401
msgid "Source"
-msgstr ""
+msgstr "ஆதாரம்"
#: searx/webapp.py:523 searx/webapp.py:935
msgid "Invalid settings, please edit your preferences"
@@ -160,7 +162,7 @@ msgstr "{hours} மணிநேரம், {minutes} நிமிடங்கள
#: searx/webapp.py:856
msgid "Suspended"
-msgstr ""
+msgstr "இடைநிறுத்தப்பட்டது"
#: searx/answerers/random/answerer.py:65
msgid "Random value generator"
@@ -176,19 +178,20 @@ msgstr "புள்ளியியல் செயல்பாடுகள்"
#: searx/answerers/statistics/answerer.py:51
msgid "Compute {functions} of the arguments"
-msgstr ""
+msgstr "வாதங்களின் {செயல்பாடுகளை} கணக்கிடவும்"
#: searx/engines/openstreetmap.py:155
msgid "Get directions"
-msgstr ""
+msgstr "திசைகளைப் பெறுங்கள்"
#: searx/engines/pdbe.py:90
+#, fuzzy
msgid "{title} (OBSOLETE)"
-msgstr ""
+msgstr "{title} (காலாவதியானது)"
#: searx/engines/pdbe.py:97
msgid "This entry has been superseded by"
-msgstr ""
+msgstr "இந்த நுழைவு மாற்றப்பட்டது"
#: searx/engines/pubmed.py:78
msgid "No abstract is available for this publication."
@@ -196,23 +199,25 @@ msgstr "இந்த பிரசுரத்திற்கு சுருக
#: searx/engines/qwant.py:200
msgid "Channel"
-msgstr ""
+msgstr "சேனல்"
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
-msgstr ""
+msgstr "சரங்களை வெவ்வேறு ஹாஷ் டைஜெஸ்ட்களாக மாற்றுகிறது."
#: searx/plugins/hash_plugin.py:52
msgid "hash digest"
-msgstr ""
+msgstr "ஹாஷ் டைஜெஸ்ட்"
#: searx/plugins/hostname_replace.py:9
msgid "Hostname replace"
-msgstr ""
+msgstr "ஹோஸ்ட்பெயர் மாற்றீடு"
#: searx/plugins/hostname_replace.py:10
msgid "Rewrite result hostnames or remove results based on the hostname"
msgstr ""
+"முடிவு ஹோஸ்ட்பெயர்களை மீண்டும் எழுதவும் அல்லது ஹோஸ்ட்பெயரின் அடிப்படையில் "
+"முடிவுகளை அகற்றவும்"
#: searx/plugins/infinite_scroll.py:3
msgid "Infinite scroll"
@@ -248,7 +253,7 @@ msgstr ""
#: searx/plugins/self_info.py:19
msgid "Self Informations"
-msgstr ""
+msgstr "சுய தகவல்கள்"
#: searx/plugins/self_info.py:20
msgid ""
@@ -277,6 +282,9 @@ msgid ""
"Navigate search results with Vim-like hotkeys (JavaScript required). "
"Press \"h\" key on main or result page to get help."
msgstr ""
+"Vim போன்ற ஹாட்ஸ்கிகள் மூலம் தேடல் முடிவுகளை வழிசெலுத்தவும் (ஜாவாஸ்கிரிப்ட் "
+"தேவை). உதவியைப் பெற, பிரதான அல்லது முடிவுப் பக்கத்தில் \"h\" விசையை "
+"அழுத்தவும்."
#: searx/templates/oscar/404.html:4 searx/templates/simple/404.html:4
msgid "Page not found"
@@ -315,7 +323,7 @@ msgstr "பிழை!"
#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:54
msgid "Powered by"
-msgstr ""
+msgstr "மூலம் இயக்கப்படுகிறது"
#: searx/templates/oscar/base.html:85 searx/templates/simple/base.html:54
msgid "a privacy-respecting, hackable metasearch engine"
@@ -323,11 +331,11 @@ msgstr "உங்கள் அகவுரிமையை மதிக்கு
#: searx/templates/oscar/base.html:86 searx/templates/simple/base.html:55
msgid "Source code"
-msgstr ""
+msgstr "மூல குறியீடு"
#: searx/templates/oscar/base.html:87 searx/templates/simple/base.html:56
msgid "Issue tracker"
-msgstr ""
+msgstr "பிரச்சினை டிராக்கர்"
#: searx/templates/oscar/base.html:88 searx/templates/oscar/stats.html:18
#: searx/templates/simple/base.html:57 searx/templates/simple/stats.html:21
@@ -339,15 +347,15 @@ msgstr "எந்திரத்தின் புள்ளி விவரங
#: searx/templates/simple/base.html:58
#: searx/templates/simple/messages/no_results.html:15
msgid "Public instances"
-msgstr ""
+msgstr "பொது நிகழ்வுகள்"
#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:59
msgid "Contact instance maintainer"
-msgstr ""
+msgstr "நிகழ்வு பராமரிப்பாளரைத் தொடர்பு கொள்ளவும்"
#: searx/templates/oscar/languages.html:2
msgid "Language"
-msgstr ""
+msgstr "மொழி"
#: searx/templates/oscar/languages.html:4
#: searx/templates/simple/filters/languages.html:2
@@ -369,13 +377,13 @@ msgstr "டொரன்ட் கோப்பு"
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
#: searx/templates/simple/macros.html:41
msgid "cached"
-msgstr ""
+msgstr "தற்காலிக சேமிப்பு"
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
#: searx/templates/simple/macros.html:41
msgid "proxied"
-msgstr ""
+msgstr "ப்ராக்ஸி"
#: searx/templates/oscar/macros.html:133
#: searx/templates/oscar/preferences.html:330
@@ -388,7 +396,7 @@ msgstr "அனுமதி"
#: searx/templates/oscar/macros.html:139
msgid "broken"
-msgstr ""
+msgstr "உடைந்தது"
#: searx/templates/oscar/macros.html:141
msgid "supported"
@@ -406,7 +414,7 @@ msgstr "விருப்பத்தேர்வு"
#: searx/templates/oscar/preferences.html:12
#: searx/templates/simple/preferences.html:29
msgid "No HTTPS"
-msgstr ""
+msgstr "HTTPS இல்லை"
#: searx/templates/oscar/preferences.html:14
#: searx/templates/oscar/results.html:27 searx/templates/simple/results.html:40
@@ -415,7 +423,7 @@ msgstr "முடிவுகளின் எண்ணிக்கை"
#: searx/templates/oscar/preferences.html:14
msgid "Avg."
-msgstr ""
+msgstr "சராசரி"
#: searx/templates/oscar/messages/no_results.html:8
#: searx/templates/oscar/preferences.html:17
@@ -426,33 +434,33 @@ msgstr ""
#: searx/templates/simple/preferences.html:32
#: searx/templates/simple/results.html:50
msgid "View error logs and submit a bug report"
-msgstr ""
+msgstr "பிழைப் பதிவுகளைப் பார்த்து, பிழை அறிக்கையைச் சமர்ப்பிக்கவும்"
#: searx/templates/oscar/preferences.html:38
#: searx/templates/oscar/stats.html:70
#: searx/templates/simple/preferences.html:53
#: searx/templates/simple/stats.html:70
msgid "Median"
-msgstr ""
+msgstr "இடைநிலை"
#: searx/templates/oscar/preferences.html:39
#: searx/templates/oscar/stats.html:76
#: searx/templates/simple/preferences.html:54
#: searx/templates/simple/stats.html:76
msgid "P80"
-msgstr ""
+msgstr "P80"
#: searx/templates/oscar/preferences.html:40
#: searx/templates/oscar/stats.html:82
#: searx/templates/simple/preferences.html:55
#: searx/templates/simple/stats.html:82
msgid "P95"
-msgstr ""
+msgstr "P95"
#: searx/templates/oscar/preferences.html:68
#: searx/templates/simple/preferences.html:83
msgid "Failed checker test(s): "
-msgstr ""
+msgstr "தோல்வியடைந்த சரிபார்ப்பு சோதனை(கள்): "
#: searx/templates/oscar/preferences.html:96
#: searx/templates/simple/preferences.html:101
@@ -468,7 +476,7 @@ msgstr "பொது"
#: searx/templates/oscar/preferences.html:102
#: searx/templates/oscar/preferences.html:193
msgid "User Interface"
-msgstr ""
+msgstr "பயனர் இடைமுகம்"
#: searx/templates/oscar/preferences.html:103
#: searx/templates/oscar/preferences.html:257
@@ -485,7 +493,7 @@ msgstr "எந்திரங்கள்"
#: searx/templates/oscar/preferences.html:105
#: searx/templates/simple/preferences.html:315
msgid "Special Queries"
-msgstr ""
+msgstr "சிறப்பு வினாக்கள்"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:442
@@ -524,13 +532,13 @@ msgstr "பாதுகாப்பன தேடல்"
#: searx/templates/oscar/preferences.html:142
#: searx/templates/simple/preferences.html:153
msgid "Filter content"
-msgstr ""
+msgstr "வடிகட்டி உள்ளடக்கம்"
#: searx/templates/oscar/preferences.html:145
#: searx/templates/simple/filters/safesearch.html:2
#: searx/templates/simple/preferences.html:148
msgid "Strict"
-msgstr ""
+msgstr "கண்டிப்பான"
#: searx/templates/oscar/preferences.html:146
#: searx/templates/simple/filters/safesearch.html:3
@@ -557,7 +565,7 @@ msgstr "உள்ளிடும் போதே தேடு"
#: searx/templates/oscar/preferences.html:168
#: searx/templates/simple/preferences.html:159
msgid "Open Access DOI resolver"
-msgstr ""
+msgstr "அணுகல் DOI தீர்வைத் திறக்கவும்"
#: searx/templates/oscar/preferences.html:169
#: searx/templates/simple/preferences.html:169
@@ -565,16 +573,18 @@ msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
msgstr ""
+"கிடைக்கும் போது வெளியீடுகளின் திறந்த அணுகல் பதிப்புகளுக்குத் திருப்பிவிடவும் "
+"(சொருகி தேவை)"
#: searx/templates/oscar/preferences.html:183
#: searx/templates/simple/preferences.html:173
msgid "Engine tokens"
-msgstr ""
+msgstr "எஞ்சின் டோக்கன்கள்"
#: searx/templates/oscar/preferences.html:184
#: searx/templates/simple/preferences.html:177
msgid "Access tokens for private engines"
-msgstr ""
+msgstr "தனியார் இயந்திரங்களுக்கான அணுகல் டோக்கன்கள்"
#: searx/templates/oscar/preferences.html:198
#: searx/templates/simple/preferences.html:184
@@ -589,30 +599,30 @@ msgstr "வடிவமைப்பின் மொழியை மாற்ற
#: searx/templates/oscar/preferences.html:210
#: searx/templates/simple/preferences.html:197
msgid "Theme"
-msgstr ""
+msgstr "தீம்"
#: searx/templates/oscar/preferences.html:211
#: searx/templates/simple/preferences.html:205
msgid "Change SearXNG layout"
-msgstr ""
+msgstr "SearXNG தளவமைப்பை மாற்றவும்"
#: searx/templates/oscar/preferences.html:222
#: searx/templates/oscar/preferences.html:228
msgid "Choose style for this theme"
-msgstr ""
+msgstr "இந்த தீம் பாணியைத் தேர்வு செய்யவும்"
#: searx/templates/oscar/preferences.html:222
#: searx/templates/oscar/preferences.html:228
msgid "Style"
-msgstr ""
+msgstr "உடை"
#: searx/templates/oscar/preferences.html:231
msgid "Show advanced settings"
-msgstr ""
+msgstr "மேம்பட்ட அமைப்புகளைக் காட்டு"
#: searx/templates/oscar/preferences.html:232
msgid "Show advanced settings panel in the home page by default"
-msgstr ""
+msgstr "முன்னிருப்பாக முகப்புப் பக்கத்தில் மேம்பட்ட அமைப்புகள் பேனலைக் காட்டு"
#: searx/templates/oscar/preferences.html:235
#: searx/templates/oscar/preferences.html:245
@@ -647,6 +657,9 @@ msgid ""
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
" rel=\"external\">learn more about request methods</a>"
msgstr ""
+"படிவங்கள் எவ்வாறு சமர்ப்பிக்கப்படுகின்றன என்பதை மாற்றவும், <a href=\"http"
+"://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel="
+"\"external\">கோரிக்கை முறைகள் பற்றி மேலும் அறிக</a>"
#: searx/templates/oscar/preferences.html:273
#: searx/templates/simple/preferences.html:249
@@ -656,7 +669,7 @@ msgstr "பட நிகராளி"
#: searx/templates/oscar/preferences.html:274
#: searx/templates/simple/preferences.html:256
msgid "Proxying image results through SearXNG"
-msgstr ""
+msgstr "SearXNG மூலம் படத்தின் முடிவுகளைப் பதிலீடு செய்கிறது"
#: searx/templates/oscar/preferences.html:277
#: searx/templates/oscar/preferences.html:288
@@ -675,7 +688,7 @@ msgstr "நிறுத்தப்பட்டது"
#: searx/templates/oscar/preferences.html:284
#: searx/templates/simple/preferences.html:261
msgid "Query in the page's title"
-msgstr ""
+msgstr "பக்கத்தின் தலைப்பில் வினவல்"
#: searx/templates/oscar/preferences.html:285
#: searx/templates/simple/preferences.html:268
@@ -683,14 +696,16 @@ msgid ""
"When enabled, the result page's title contains your query. Your browser "
"can record this title"
msgstr ""
+"இயக்கப்பட்டால், முடிவுப் பக்கத்தின் தலைப்பில் உங்கள் வினவல் இருக்கும். உங்கள்"
+" உலாவி இந்தத் தலைப்பைப் பதிவுசெய்ய முடியும்"
#: searx/templates/oscar/preferences.html:315
msgid "Allow all"
-msgstr ""
+msgstr "அனைத்தையும் அனுமதிக்கவும்"
#: searx/templates/oscar/preferences.html:316
msgid "Disable all"
-msgstr ""
+msgstr "அனைத்தையும் முடக்கு"
#: searx/templates/oscar/preferences.html:331
#: searx/templates/oscar/preferences.html:347
@@ -704,7 +719,7 @@ msgstr "எந்திரத்தின் பெயர்"
#: searx/templates/oscar/preferences.html:346
#: searx/templates/simple/preferences.html:284
msgid "Shortcut"
-msgstr ""
+msgstr "குறுக்குவழி"
#: searx/templates/oscar/preferences.html:333
#: searx/templates/oscar/preferences.html:345
@@ -724,7 +739,7 @@ msgstr "நேர வரம்பு"
#: searx/templates/simple/preferences.html:288
#: searx/templates/simple/stats.html:31
msgid "Response time"
-msgstr ""
+msgstr "பதில் நேரம்"
#: searx/templates/oscar/preferences.html:337
#: searx/templates/oscar/preferences.html:341
@@ -738,11 +753,11 @@ msgstr "அதிகபட்ச நேரம்"
#: searx/templates/simple/preferences.html:290
#: searx/templates/simple/stats.html:32
msgid "Reliability"
-msgstr ""
+msgstr "நம்பகத்தன்மை"
#: searx/templates/oscar/preferences.html:396
msgid "Query"
-msgstr ""
+msgstr "வினவு"
#: searx/templates/oscar/preferences.html:403
#: searx/templates/simple/preferences.html:321
@@ -767,12 +782,12 @@ msgstr "எடுத்துக்காட்டுகள்"
#: searx/templates/oscar/preferences.html:411
#: searx/templates/simple/preferences.html:327
msgid "This is the list of SearXNG's instant answering modules."
-msgstr ""
+msgstr "இது SearXNG இன் உடனடி பதில் தொகுதிகளின் பட்டியல்."
#: searx/templates/oscar/preferences.html:424
#: searx/templates/simple/preferences.html:338
msgid "This is the list of plugins."
-msgstr ""
+msgstr "இது செருகுநிரல்களின் பட்டியல்."
#: searx/templates/oscar/preferences.html:445
#: searx/templates/simple/preferences.html:357
@@ -780,11 +795,13 @@ msgid ""
"This is the list of cookies and their values SearXNG is storing on your "
"computer."
msgstr ""
+"இது உங்கள் கணினியில் SearXNG சேமிக்கும் குக்கீகளின் பட்டியல் மற்றும் அவற்றின்"
+" மதிப்புகள்."
#: searx/templates/oscar/preferences.html:446
#: searx/templates/simple/preferences.html:358
msgid "With that list, you can assess SearXNG transparency."
-msgstr ""
+msgstr "அந்த பட்டியலின் மூலம், நீங்கள் SearXNG வெளிப்படைத்தன்மையை மதிப்பிடலாம்."
#: searx/templates/oscar/preferences.html:451
#: searx/templates/simple/preferences.html:363
@@ -802,6 +819,8 @@ msgid ""
"These settings are stored in your cookies, this allows us not to store "
"this data about you."
msgstr ""
+"இந்த அமைப்புகள் உங்கள் குக்கீகளில் சேமிக்கப்பட்டுள்ளன, இது உங்களைப் பற்றிய "
+"இந்தத் தரவைச் சேமிக்காமல் இருக்க அனுமதிக்கிறது."
#: searx/templates/oscar/preferences.html:470
#: searx/templates/simple/preferences.html:387
@@ -863,7 +882,7 @@ msgstr "தேடல் பதில்களை தரவிறக்கு"
#: searx/templates/oscar/results.html:95
msgid "RSS subscription"
-msgstr ""
+msgstr "ஆர்எஸ்எஸ் சந்தா"
#: searx/templates/oscar/results.html:104
msgid "Search results"
@@ -900,11 +919,11 @@ msgstr "தேடலை துவங்கு"
#: searx/templates/oscar/search.html:9
#: searx/templates/oscar/search_full.html:12
msgid "Clear search"
-msgstr ""
+msgstr "தெளிவான தேடல்"
#: searx/templates/oscar/search_full.html:12
msgid "Clear"
-msgstr ""
+msgstr "தெளிவு"
#: searx/templates/oscar/stats.html:4
msgid "stats"
@@ -916,7 +935,7 @@ msgstr "மதிப்புகள்"
#: searx/templates/oscar/stats.html:31 searx/templates/simple/stats.html:30
msgid "Result count"
-msgstr ""
+msgstr "முடிவு எண்ணிக்கை"
#: searx/templates/oscar/stats.html:42 searx/templates/simple/stats.html:41
msgid "Scores per result"
@@ -924,64 +943,64 @@ msgstr "தேடல் மதிப்பு"
#: searx/templates/oscar/stats.html:65 searx/templates/simple/stats.html:65
msgid "Total"
-msgstr ""
+msgstr "மொத்தம்"
#: searx/templates/oscar/stats.html:66 searx/templates/simple/stats.html:66
msgid "HTTP"
-msgstr ""
+msgstr "HTTP"
#: searx/templates/oscar/stats.html:67 searx/templates/simple/stats.html:67
msgid "Processing"
-msgstr ""
+msgstr "செயலாக்கம்"
#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
msgid "Warnings"
-msgstr ""
+msgstr "எச்சரிக்கைகள்"
#: searx/templates/oscar/stats.html:106 searx/templates/simple/stats.html:105
msgid "Errors and exceptions"
-msgstr ""
+msgstr "பிழைகள் மற்றும் விதிவிலக்குகள்"
#: searx/templates/oscar/stats.html:112 searx/templates/simple/stats.html:111
msgid "Exception"
-msgstr ""
+msgstr "விதிவிலக்கு"
#: searx/templates/oscar/stats.html:114 searx/templates/simple/stats.html:113
msgid "Message"
-msgstr ""
+msgstr "செய்தி"
#: searx/templates/oscar/stats.html:116 searx/templates/simple/stats.html:115
msgid "Percentage"
-msgstr ""
+msgstr "சதவிதம்"
#: searx/templates/oscar/stats.html:118 searx/templates/simple/stats.html:117
msgid "Parameter"
-msgstr ""
+msgstr "அளவுரு"
#: searx/templates/oscar/result_templates/files.html:35
#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125
msgid "Filename"
-msgstr ""
+msgstr "கோப்பு பெயர்"
#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126
msgid "Function"
-msgstr ""
+msgstr "செயல்பாடு"
#: searx/templates/oscar/stats.html:128 searx/templates/simple/stats.html:127
msgid "Code"
-msgstr ""
+msgstr "குறியீடு"
#: searx/templates/oscar/stats.html:135 searx/templates/simple/stats.html:134
msgid "Checker"
-msgstr ""
+msgstr "செக்கர்"
#: searx/templates/oscar/stats.html:138 searx/templates/simple/stats.html:137
msgid "Failed test"
-msgstr ""
+msgstr "சோதனை தோல்வி"
#: searx/templates/oscar/stats.html:139 searx/templates/simple/stats.html:138
msgid "Comment(s)"
-msgstr ""
+msgstr "கருத்து(கள்)"
#: searx/templates/oscar/time-range.html:5
#: searx/templates/simple/filters/time_range.html:3
@@ -1015,7 +1034,7 @@ msgstr "வாழ்த்துக்கள்!"
#: searx/templates/oscar/messages/first_time.html:7
msgid "It look like you are using SearXNG first time."
-msgstr ""
+msgstr "நீங்கள் முதல் முறையாக SearXNG ஐப் பயன்படுத்துகிறீர்கள் போல் தெரிகிறது."
#: searx/templates/oscar/messages/no_cookies.html:3
msgid "Information!"
@@ -1039,6 +1058,8 @@ msgstr "எந்திரத்தால் பதில்களை மீட
#: searx/templates/simple/messages/no_results.html:15
msgid "Please, try again later or find another SearXNG instance."
msgstr ""
+"தயவுசெய்து, பிறகு முயற்சிக்கவும் அல்லது மற்றொரு SearXNG நிகழ்வைக் "
+"கண்டறியவும்."
#: searx/templates/oscar/messages/no_results.html:17
#: searx/templates/simple/messages/no_results.html:20
@@ -1087,7 +1108,7 @@ msgstr "ஊடகத்தை மறை"
#: searx/templates/oscar/result_templates/videos.html:19
#: searx/templates/simple/result_templates/images.html:21
msgid "Author"
-msgstr ""
+msgstr "நூலாசிரியர்"
#: searx/templates/oscar/result_templates/files.html:37
#: searx/templates/oscar/result_templates/torrent.html:7
@@ -1127,11 +1148,11 @@ msgstr "TiB"
#: searx/templates/oscar/result_templates/files.html:46
msgid "Date"
-msgstr ""
+msgstr "தேதி"
#: searx/templates/oscar/result_templates/files.html:48
msgid "Type"
-msgstr ""
+msgstr "வகை"
#: searx/templates/oscar/result_templates/images.html:27
msgid "Get image"
@@ -1145,7 +1166,7 @@ msgstr "மூலத்தைப் பார்"
#: searx/templates/oscar/result_templates/map.html:26
#: searx/templates/simple/result_templates/map.html:12
msgid "address"
-msgstr ""
+msgstr "முகவரி"
#: searx/templates/oscar/result_templates/map.html:59
#: searx/templates/simple/result_templates/map.html:43
@@ -1184,7 +1205,7 @@ msgstr "காணொளிகளை மறை"
#: searx/templates/oscar/result_templates/videos.html:20
msgid "Length"
-msgstr ""
+msgstr "நீளம்"
#: searx/templates/simple/categories.html:16
msgid "Click on the magnifier to perform search"
@@ -1192,7 +1213,7 @@ msgstr "உருப்பெருக்கியைச் சொடுக்
#: searx/templates/simple/preferences.html:85
msgid "Errors:"
-msgstr ""
+msgstr "பிழைகள்:"
#: searx/templates/simple/preferences.html:181
msgid "User interface"
@@ -1200,11 +1221,11 @@ msgstr "பயனர் இடைமுகப்பு"
#: searx/templates/simple/preferences.html:208
msgid "Theme style"
-msgstr ""
+msgstr "தீம் பாணி"
#: searx/templates/simple/preferences.html:216
msgid "Choose auto to follow your browser settings"
-msgstr ""
+msgstr "உங்கள் உலாவி அமைப்புகளைப் பின்பற்ற தானாகத் தேர்ந்தெடுக்கவும்"
#: searx/templates/simple/preferences.html:275
msgid "Currently used search engines"
@@ -1221,25 +1242,25 @@ msgstr "பதில்கள்"
#: searx/templates/simple/search.html:9
#: searx/templates/simple/simple_search.html:5
msgid "clear"
-msgstr ""
+msgstr "தெளிவானது"
#: searx/templates/simple/search.html:10
#: searx/templates/simple/simple_search.html:6
msgid "search"
-msgstr ""
+msgstr "தேடுக"
#: searx/templates/simple/result_templates/default.html:14
#: searx/templates/simple/result_templates/videos.html:14
msgid "This site did not provide any description."
-msgstr ""
+msgstr "இந்த தளம் எந்த விளக்கத்தையும் வழங்கவில்லை."
#: searx/templates/simple/result_templates/images.html:22
msgid "Format"
-msgstr ""
+msgstr "வடிவம்"
#: searx/templates/simple/result_templates/images.html:24
msgid "Engine"
-msgstr ""
+msgstr "இயந்திரம்"
#~ msgid "Engine time (sec)"
#~ msgstr "எந்திர நேரம் (நொடிகளில்)"
@@ -1353,4 +1374,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-
diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
index 6b3171712..510f89a3b 100644
--- a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
+++ b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo
Binary files differ
diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po
index e993b7b32..058ee32aa 100644
--- a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po
+++ b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.po
@@ -13,18 +13,19 @@
# WhiredPlanck <fungdaat31@outlook.com>, 2020
msgid ""
msgstr ""
-"Project-Id-Version: searx\n"
+"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-11-24 19:24+0000\n"
-"PO-Revision-Date: 2021-11-23 10:08+0000\n"
-"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
+"PO-Revision-Date: 2021-12-11 18:11+0000\n"
+"Last-Translator: Alexandre Flament <alex@al-f.net>\n"
+"Language-Team: Chinese (Simplified) <https://weblate.bubu1.eu/projects/"
+"searxng/searxng/zh_Hans/>\n"
"Language: zh_Hans_CN\n"
-"Language-Team: Chinese (Simplified) "
-"<https://weblate.bubu1.eu/projects/searxng/searxng/zh_Hans/>\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 4.8.1\n"
"Generated-By: Babel 2.9.1\n"
#: searx/webapp.py:164
@@ -73,15 +74,15 @@ msgstr "学术"
#: searx/webapp.py:178
msgid "auto"
-msgstr ""
+msgstr "自动"
#: searx/webapp.py:179
msgid "light"
-msgstr ""
+msgstr "明亮"
#: searx/webapp.py:180
msgid "dark"
-msgstr ""
+msgstr "黑暗"
#: searx/webapp.py:184
msgid "timeout"
@@ -1340,4 +1341,3 @@ msgstr ""
#~ " contains your query. Your browser "
#~ "can record this title."
#~ msgstr ""
-