From aa1453db0c704b1222acb4761c86cd288f7a46f8 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Tue, 12 Sep 2023 11:41:22 +0200 Subject: [PATCH] [build] /static --- searx/static/themes/simple/js/searxng.min.js | 2 +- searx/static/themes/simple/js/searxng.min.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index 60280a835..91dd56647 100644 --- a/searx/static/themes/simple/js/searxng.min.js +++ b/searx/static/themes/simple/js/searxng.min.js @@ -4,7 +4,7 @@ * (C) Copyright Contributors to the searx project (2014 - 2021). * SPDX-License-Identifier: AGPL-3.0-or-later */ -window.searxng=function(t,i){"use strict";if(t.Element){(function(e){e.matches=e.matches||e.matchesSelector||e.webkitMatchesSelector||e.msMatchesSelector||function(e){var t=this,n=(t.parentNode||t.document).querySelectorAll(e),r=-1;while(n[++r]&&n[r]!=t);return!!n[r]}})(Element.prototype)}function s(e,t,n){try{e.call(t,n)}catch(e){console.log(e)}}var a=window.searxng||{};a.on=function(r,e,o,t){t=t||false;if(typeof r!=="string"){r.addEventListener(e,o,t)}else{i.addEventListener(e,function(e){var t=e.target||e.srcElement,n=false;while(t&&t.matches&&t!==i&&!(n=t.matches(r)))t=t.parentElement;if(n)s(o,t,e)},t)}};a.ready=function(e){if(document.readyState!="loading"){e.call(t)}else{t.addEventListener("DOMContentLoaded",e.bind(t))}};a.http=function(r,o,i=null){return new Promise(function(e,t){try{var n=new XMLHttpRequest;n.open(r,o,true);n.timeout=2e4;n.onload=function(){if(n.status==200){e(n.response,n.responseType)}else{t(Error(n.statusText))}};n.onerror=function(){t(Error("Network Error"))};n.onabort=function(){t(Error("Transaction is aborted"))};n.ontimeout=function(){t(Error("Timeout"))};if(i){n.send(i)}else{n.send()}}catch(e){t(e)}})};a.loadStyle=function(e){var t=a.settings.theme_static_path+"/"+e,n="style_"+e.replace(".","_"),r=i.getElementById(n);if(r===null){r=i.createElement("link");r.setAttribute("id",n);r.setAttribute("rel","stylesheet");r.setAttribute("type","text/css");r.setAttribute("href",t);i.body.appendChild(r)}};a.loadScript=function(e,t){var n=a.settings.theme_static_path+"/"+e,r="script_"+e.replace(".","_"),o=i.getElementById(r);if(o===null){o=i.createElement("script");o.setAttribute("id",r);o.setAttribute("src",n);o.onload=t;o.onerror=function(){o.setAttribute("error","1")};i.body.appendChild(o)}else if(!o.hasAttribute("error")){try{t.apply(o,[])}catch(e){console.log(e)}}else{console.log("callback not executed : script '"+n+"' not loaded.")}};a.insertBefore=function(e,t){t.parentNode.insertBefore(e,t)};a.insertAfter=function(e,t){t.parentNode.insertAfter(e,t.nextSibling)};a.on(".close","click",function(){this.parentNode.classList.add("invisible")});function e(){for(var e of i.getElementsByTagName("body")[0].classList.values()){if(e.endsWith("_endpoint")){return e.split("_")[0]}}return""}a.endpoint=e();return a}(window,document);searxng.ready(function(){"use strict";searxng.infinite_scroll_supported="IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype;if(searxng.endpoint!=="results"){return}if(!searxng.infinite_scroll_supported){console.log("IntersectionObserver not supported");return}let i=document;var s=i.getElementById("results").classList.contains("only_template_images");function n(){var e=i.createElement("div");e.classList.add("loader");return e}function r(t,e){t.textContent="";e.forEach(e=>t.appendChild(e))}function o(o){var e=i.querySelector("#pagination form.next_page");if(!e){return}r(i.querySelector("#pagination"),[n()]);var t=new FormData(e);searxng.http("POST",i.querySelector("#search").getAttribute("action"),t).then(function(e){var t=(new DOMParser).parseFromString(e,"text/html");var n=t.querySelectorAll("#urls article");var r=t.querySelector("#pagination");i.querySelector("#pagination").remove();if(n.length>0&&!s){i.querySelector("#urls").appendChild(i.createElement("hr"))}n.forEach(e=>{i.querySelector("#urls").appendChild(e)});if(r){i.querySelector("#results").appendChild(r);o()}}).catch(function(e){console.log(e);var t=i.createElement("div");t.textContent=searxng.settings.translations.error_loading_next_page;t.classList.add("dialog-error");t.setAttribute("role","alert");r(i.querySelector("#pagination"),[t])})}if(searxng.settings.infinite_scroll&&searxng.infinite_scroll_supported){const a={rootMargin:"20rem"};const l="article.result:last-child";const u=new IntersectionObserver(e=>{const t=e[0];if(t.isIntersecting){u.unobserve(t.target);o(()=>u.observe(i.querySelector(l),a))}});u.observe(i.querySelector(l),a)}});searxng.ready(function(){function e(e){while(e!==undefined){if(e.classList.contains("detail")){return true}if(e.classList.contains("result")){return false}e=e.parentNode}return false}function n(e){while(e!==undefined){if(e.classList.contains("result")){return e}e=e.parentNode}return undefined}function r(e){return e&&e.classList.contains("result-images")}searxng.on(".result","click",function(t){if(!e(t.target)){o(this)(true,true);let e=n(t.target);if(r(e)){t.preventDefault();searxng.selectImage(e)}}});searxng.on(".result a","focus",function(t){if(!e(t.target)){let e=n(t.target);if(e&&e.getAttribute("data-vim-selected")===null){o(e)(true)}if(r(e)){searxng.selectImage(e)}}},true);var d={27:{key:"Escape",fun:i,des:"remove focus from the focused input",cat:"Control"},73:{key:"i",fun:f,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:o("up"),des:"select previous search result",cat:"Results"},74:{key:"j",fun:o("down"),des:"select next search result",cat:"Results"},80:{key:"p",fun:l(),des:"go to previous page",cat:"Results"},78:{key:"n",fun:a(),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:g,des:"toggle help window",cat:"Other"}};if(searxng.settings.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 o(f){return function(e,t){var n=document.querySelector(".result[data-vim-selected]"),r=f;if(n===null){n=document.querySelector(".result");if(n===null){return}if(f==="down"||f==="up"){r=n}}var o,i=document.querySelectorAll(".result");if(typeof r!=="string"){o=r}else{switch(r){case"visible":var s=document.documentElement.scrollTop||document.body.scrollTop;var a=s+document.documentElement.clientHeight;for(var l=0;ls){break}}break;case"down":o=n.nextElementSibling;if(o===null){o=i[0]}break;case"up":o=n.previousElementSibling;if(o===null){o=i[i.length-1]}break;case"bottom":o=i[i.length-1];break;case"top":default:o=i[0]}}if(o){n.removeAttribute("data-vim-selected");o.setAttribute("data-vim-selected","true");if(!t){var d=o.querySelector("h3 a")||o.querySelector("a");if(d!==null){d.focus()}}if(!e){p()}}}}function t(){document.location.reload(true)}function i(e){const t=e.target.tagName.toLowerCase();if(document.activeElement&&(t==="input"||t==="select"||t==="textarea")){document.activeElement.blur()}else{searxng.closeDetail()}}function s(t){return function(){var e=document.querySelector(t);if(e){e.click()}}}function a(){return s('nav#pagination .next_page button[type="submit"]')}function l(){return s('nav#pagination .previous_page button[type="submit"]')}function p(){var e=document.querySelector(".result[data-vim-selected]");if(e===null){return}var t=document.documentElement.scrollTop||document.body.scrollTop,n=document.documentElement.clientHeight,r=e.offsetTop,o=r+e.clientHeight,i=120;if(e.previousElementSibling===null&&or-i){window.scroll(window.scrollX,r-i)}else{var s=t+n;if(s a")}if(e!==null){var t=e.getAttribute("href");if(n){window.open(t)}else{window.location.href=t}}}}function m(e){var n={};for(var t in d){var r=d[t];n[r.cat]=n[r.cat]||[];n[r.cat].push(r)}var o=Object.keys(n).sort(function(e,t){return n[t].length-n[e].length});if(o.length===0){return}var i='×';i+="

How to navigate searx with Vim-like hotkeys

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

"+a[0].cat+"

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

How to navigate SearXNG with hotkeys

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

"+a[0].cat+"

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

How to navigate searx with Vim-like hotkeys

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

' + cat[0].cat + '

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

How to navigate SearXNG with hotkeys

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

' + cat[0].cat + '

';\n html += '
    ';\n\n for (var cj in cat) {\n html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • ';\n }\n\n html += '
';\n html += '
';\n\n divElement.innerHTML = html;\n }\n\n function toggleHelp () {\n var helpPanel = document.querySelector('#vim-hotkeys-help');\n if (helpPanel === undefined || helpPanel === null) {\n // first call\n helpPanel = document.createElement('div');\n helpPanel.id = 'vim-hotkeys-help';\n helpPanel.className = 'dialog-modal';\n initHelpContent(helpPanel);\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(helpPanel);\n } else {\n // togggle hidden\n helpPanel.classList.toggle('invisible');\n return;\n }\n }\n\n searxng.scrollPageToSelected = scrollPageToSelected;\n searxng.selectNext = highlightResult('down');\n searxng.selectPrevious = highlightResult('up');\n});\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* global L */\n(function (w, d, searxng) {\n 'use strict';\n\n searxng.ready(function () {\n searxng.on('.searxng_init_map', 'click', function (event) {\n // no more request\n this.classList.remove(\"searxng_init_map\");\n\n //\n var leaflet_target = this.dataset.leafletTarget;\n var map_lon = parseFloat(this.dataset.mapLon);\n var map_lat = parseFloat(this.dataset.mapLat);\n var map_zoom = parseFloat(this.dataset.mapZoom);\n var map_boundingbox = JSON.parse(this.dataset.mapBoundingbox);\n var map_geojson = JSON.parse(this.dataset.mapGeojson);\n\n searxng.loadStyle('css/leaflet.css');\n searxng.loadScript('js/leaflet.js', function () {\n var map_bounds = null;\n if (map_boundingbox) {\n var southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);\n var northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);\n map_bounds = L.latLngBounds(southWest, northEast);\n }\n\n // init map\n var map = L.map(leaflet_target);\n // create the tile layer with correct attribution\n var osmMapnikUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';\n var osmMapnikAttrib = 'Map data © OpenStreetMap contributors';\n var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});\n var osmWikimediaUrl = 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';\n var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors';\n var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});\n // init map view\n if (map_bounds) {\n // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021\n // Still useful ?\n setTimeout(function () {\n map.fitBounds(map_bounds, {\n maxZoom: 17\n });\n }, 0);\n } else if (map_lon && map_lat) {\n if (map_zoom) {\n map.setView(new L.latLng(map_lat, map_lon), map_zoom);\n } else {\n map.setView(new L.latLng(map_lat, map_lon), 8);\n }\n }\n\n map.addLayer(osmMapnik);\n\n var baseLayers = {\n \"OSM Mapnik\": osmMapnik,\n \"OSM Wikimedia\": osmWikimedia,\n };\n\n L.control.layers(baseLayers).addTo(map);\n\n if (map_geojson) {\n L.geoJson(map_geojson).addTo(map);\n } /* else if(map_bounds) {\n L.rectangle(map_bounds, {color: \"#ff7800\", weight: 3, fill:false}).addTo(map);\n } */\n });\n\n // this event occour only once per element\n event.preventDefault();\n });\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'preferences') {\n return;\n }\n\n searxng.ready(function () {\n let engine_descriptions = null;\n function load_engine_descriptions () {\n if (engine_descriptions == null) {\n searxng.http(\"GET\", \"engine_descriptions.json\").then(function (content) {\n engine_descriptions = JSON.parse(content);\n for (const [engine_name, description] of Object.entries(engine_descriptions)) {\n let elements = d.querySelectorAll('[data-engine-name=\"' + engine_name + '\"] .engine-description');\n for (const element of elements) {\n let source = ' (' + searxng.settings.translations.Source + ': ' + description[1] + ')';\n element.innerHTML = description[0] + source;\n }\n }\n });\n }\n }\n\n for (const el of d.querySelectorAll('[data-engine-name]')) {\n searxng.on(el, 'mouseenter', load_engine_descriptions);\n }\n });\n})(window, document, window.searxng);\n","/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d, searxng) {\n 'use strict';\n\n if (searxng.endpoint !== 'results') {\n return;\n }\n\n searxng.ready(function () {\n d.querySelectorAll('#urls img.image').forEach(\n img =>\n img.addEventListener(\n 'error', () => {\n img.style.display = 'none';\n img.error = null;\n }\n ));\n\n 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.scrollPageToSelected();\n }\n\n searxng.closeDetail = function (e) {\n d.getElementById('results').classList.remove('image-detail-open');\n searxng.scrollPageToSelected();\n }\n searxng.on('.result-detail-close', 'click', e => {\n e.preventDefault();\n searxng.closeDetail();\n });\n searxng.on('.result-detail-previous', 'click', e => 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 qinput_id = \"q\", qinput;\n\n const isMobile = window.matchMedia(\"only screen and (max-width: 50em)\").matches;\n\n function submitIfQuery () {\n if (qinput.value.length > 0) {\n var search = document.getElementById('search');\n setTimeout(search.submit.bind(search), 0);\n }\n }\n\n function createClearButton (qinput) {\n var cs = document.getElementById('clear_search');\n var updateClearButton = function () {\n if (qinput.value.length === 0) {\n cs.classList.add(\"empty\");\n } else {\n cs.classList.remove(\"empty\");\n }\n };\n\n // update status, event listener\n updateClearButton();\n cs.addEventListener('click', function (ev) {\n qinput.value = '';\n qinput.focus();\n updateClearButton();\n ev.preventDefault();\n });\n qinput.addEventListener('keyup', updateClearButton, false);\n }\n\n searxng.ready(function () {\n qinput = d.getElementById(qinput_id);\n\n if (qinput !== null) {\n // clear button\n createClearButton(qinput);\n\n // autocompleter\n if (searxng.settings.autocomplete_provider) {\n searxng.autocomplete = AutoComplete.call(w, {\n Url: \"./autocompleter\",\n EmptyMessage: searxng.settings.translations.no_item_found,\n HttpMethod: searxng.settings.http_method,\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n },\n MinChars: searxng.settings.autocomplete_min,\n Delay: 300,\n _Position: function () {},\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onmousedown = function () {\n params._Select(li);\n };\n }\n });\n },\n _Select: function (item) {\n AutoComplete.defaults._Select.call(this, item);\n var form = item.closest('form');\n if (form) {\n form.submit();\n }\n },\n _MinChars: function () {\n if (this.Input.value.indexOf('!') > -1) {\n return 0;\n } else {\n return AutoComplete.defaults._MinChars.call(this);\n }\n },\n KeyboardMappings: Object.assign({}, AutoComplete.defaults.KeyboardMappings, {\n \"KeyUpAndDown_up\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up, {\n Callback: function (event) {\n AutoComplete.defaults.KeyboardMappings.KeyUpAndDown_up.Callback.call(this, event);\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive) {\n AutoComplete.defaults._Select.call(this, liActive);\n }\n },\n }),\n \"Tab\": Object.assign({}, AutoComplete.defaults.KeyboardMappings.Enter, {\n Conditions: [{\n Is: 9,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n AutoComplete.defaults._Select.call(this, liActive);\n event.preventDefault();\n }\n }\n },\n })\n }),\n }, \"#\" + qinput_id);\n }\n\n /*\n Monkey patch autocomplete.js to fix a bug\n With the POST method, the values are not URL encoded: query like \"1 + 1\" are sent as \"1 1\" since space are URL encoded as plus.\n See HTML specifications:\n * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer\n * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n\n autocomplete.js does not URL encode the name and values:\n https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665\n\n The monkey patch overrides the compiled version of the ajax function.\n See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158\n The patch changes only the line 156 from\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n to\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n\n Related to:\n * https://github.com/autocompletejs/autocomplete.js/issues/78\n * https://github.com/searxng/searxng/issues/1695\n */\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n } else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(params._Pre()));\n }\n };\n\n if (!isMobile && document.querySelector('.index_endpoint')) {\n qinput.focus();\n }\n }\n\n // vanilla js version of search_on_category_select.js\n if (qinput !== null && d.querySelector('.help') != null && searxng.settings.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","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i @baptistedonaux\n */\nvar AutoComplete = /** @class */ (function () {\n // Constructor\n function AutoComplete(params, selector) {\n if (params === void 0) { params = {}; }\n if (selector === void 0) { selector = \"[data-autocomplete]\"; }\n if (Array.isArray(selector)) {\n selector.forEach(function (s) {\n new AutoComplete(params, s);\n });\n }\n else if (typeof selector == \"string\") {\n var elements = document.querySelectorAll(selector);\n Array.prototype.forEach.call(elements, function (input) {\n new AutoComplete(params, input);\n });\n }\n else {\n var specificParams = AutoComplete.merge(AutoComplete.defaults, params, {\n DOMResults: document.createElement(\"div\")\n });\n AutoComplete.prototype.create(specificParams, selector);\n return specificParams;\n }\n }\n AutoComplete.prototype.create = function (params, element) {\n params.Input = element;\n if (params.Input.nodeName.match(/^INPUT$/i) && (params.Input.hasAttribute(\"type\") === false || params.Input.getAttribute(\"type\").match(/^TEXT|SEARCH$/i))) {\n params.Input.setAttribute(\"autocomplete\", \"off\");\n params._Position(params);\n params.Input.parentNode.appendChild(params.DOMResults);\n params.$Listeners = {\n blur: params._Blur.bind(params),\n destroy: AutoComplete.prototype.destroy.bind(null, params),\n focus: params._Focus.bind(params),\n keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),\n keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),\n position: params._Position.bind(params)\n };\n for (var event in params.$Listeners) {\n params.Input.addEventListener(event, params.$Listeners[event]);\n }\n }\n };\n AutoComplete.prototype.getEventsByType = function (params, type) {\n var mappings = {};\n for (var key in params.KeyboardMappings) {\n var event = EventType.KEYUP;\n if (params.KeyboardMappings[key].Event !== undefined) {\n event = params.KeyboardMappings[key].Event;\n }\n if (event == type) {\n mappings[key] = params.KeyboardMappings[key];\n }\n }\n return mappings;\n };\n AutoComplete.prototype.event = function (params, type, event) {\n var eventIdentifier = function (condition) {\n if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {\n condition = AutoComplete.merge({\n Not: false\n }, condition);\n if (condition.hasOwnProperty(\"Is\")) {\n if (condition.Is == event.keyCode) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n else if (condition.hasOwnProperty(\"From\") && condition.hasOwnProperty(\"To\")) {\n if (event.keyCode >= condition.From && event.keyCode <= condition.To) {\n match = !condition.Not;\n }\n else {\n match = condition.Not;\n }\n }\n }\n };\n for (var name in AutoComplete.prototype.getEventsByType(params, type)) {\n var mapping = AutoComplete.merge({\n Operator: ConditionOperator.AND\n }, params.KeyboardMappings[name]), match = ConditionOperator.AND == mapping.Operator;\n mapping.Conditions.forEach(eventIdentifier);\n if (match === true) {\n mapping.Callback.call(params, event);\n }\n }\n };\n AutoComplete.prototype.makeRequest = function (params, callback, callbackErr) {\n var propertyHttpHeaders = Object.getOwnPropertyNames(params.HttpHeaders), request = new XMLHttpRequest(), method = params._HttpMethod(), url = params._Url(), queryParams = params._Pre(), queryParamsStringify = encodeURIComponent(params._QueryArg()) + \"=\" + encodeURIComponent(queryParams);\n if (method.match(/^GET$/i)) {\n if (url.indexOf(\"?\") !== -1) {\n url += \"&\" + queryParamsStringify;\n }\n else {\n url += \"?\" + queryParamsStringify;\n }\n }\n request.open(method, url, true);\n for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {\n request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4 && request.status == 200) {\n params.$Cache[queryParams] = request.response;\n callback(request.response);\n }\n else if (request.status >= 400) {\n callbackErr();\n }\n };\n return request;\n };\n AutoComplete.prototype.ajax = function (params, request, timeout) {\n if (timeout === void 0) { timeout = true; }\n if (params.$AjaxTimer) {\n window.clearTimeout(params.$AjaxTimer);\n }\n if (timeout === true) {\n params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);\n }\n else {\n if (params.Request) {\n params.Request.abort();\n }\n params.Request = request;\n params.Request.send(params._QueryArg() + \"=\" + params._Pre());\n }\n };\n AutoComplete.prototype.cache = function (params, callback, callbackErr) {\n var response = params._Cache(params._Pre());\n if (response === undefined) {\n var request = AutoComplete.prototype.makeRequest(params, callback, callbackErr);\n AutoComplete.prototype.ajax(params, request);\n }\n else {\n callback(response);\n }\n };\n AutoComplete.prototype.destroy = function (params) {\n for (var event in params.$Listeners) {\n params.Input.removeEventListener(event, params.$Listeners[event]);\n }\n params.DOMResults.parentNode.removeChild(params.DOMResults);\n };\n AutoComplete.merge = function () {\n var merge = {}, tmp;\n for (var i = 0; i < arguments.length; i++) {\n for (tmp in arguments[i]) {\n merge[tmp] = arguments[i][tmp];\n }\n }\n return merge;\n };\n AutoComplete.defaults = {\n Delay: 150,\n EmptyMessage: \"No result here\",\n Highlight: {\n getRegex: function (value) {\n return new RegExp(value, \"ig\");\n },\n transform: function (value) {\n return \"\" + value + \"\";\n }\n },\n HttpHeaders: {\n \"Content-type\": \"application/x-www-form-urlencoded\"\n },\n Limit: 0,\n MinChars: 0,\n HttpMethod: \"GET\",\n QueryArg: \"q\",\n Url: null,\n KeyboardMappings: {\n \"Enter\": {\n Conditions: [{\n Is: 13,\n Not: false\n }],\n Callback: function (event) {\n if (this.DOMResults.getAttribute(\"class\").indexOf(\"open\") != -1) {\n var liActive = this.DOMResults.querySelector(\"li.active\");\n if (liActive !== null) {\n event.preventDefault();\n this._Select(liActive);\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n }\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_down\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYDOWN\n },\n \"KeyUpAndDown_up\": {\n Conditions: [{\n Is: 38,\n Not: false\n },\n {\n Is: 40,\n Not: false\n }],\n Callback: function (event) {\n event.preventDefault();\n var first = this.DOMResults.querySelector(\"li:first-child:not(.locked)\"), last = this.DOMResults.querySelector(\"li:last-child:not(.locked)\"), active = this.DOMResults.querySelector(\"li.active\");\n if (active) {\n var currentIndex = Array.prototype.indexOf.call(active.parentNode.children, active), position = currentIndex + (event.keyCode - 39), lisCount = this.DOMResults.getElementsByTagName(\"li\").length;\n if (position < 0) {\n position = lisCount - 1;\n }\n else if (position >= lisCount) {\n position = 0;\n }\n active.classList.remove(\"active\");\n active.parentElement.children.item(position).classList.add(\"active\");\n }\n else if (last && event.keyCode == 38) {\n last.classList.add(\"active\");\n }\n else if (first) {\n first.classList.add(\"active\");\n }\n },\n Operator: ConditionOperator.OR,\n Event: EventType.KEYUP\n },\n \"AlphaNum\": {\n Conditions: [{\n Is: 13,\n Not: true\n }, {\n From: 35,\n To: 40,\n Not: true\n }],\n Callback: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\"), currentValue = this._Pre();\n if (currentValue !== \"\" && currentValue.length >= this._MinChars()) {\n if (!oldValue || currentValue != oldValue) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n AutoComplete.prototype.cache(this, function (response) {\n this._Render(this._Post(response));\n this._Open();\n }.bind(this), this._Error);\n }\n else {\n this._Close();\n }\n },\n Operator: ConditionOperator.AND,\n Event: EventType.KEYUP\n }\n },\n DOMResults: null,\n Request: null,\n Input: null,\n /**\n * Return the message when no result returns\n */\n _EmptyMessage: function () {\n var emptyMessage = \"\";\n if (this.Input.hasAttribute(\"data-autocomplete-empty-message\")) {\n emptyMessage = this.Input.getAttribute(\"data-autocomplete-empty-message\");\n }\n else if (this.EmptyMessage !== false) {\n emptyMessage = this.EmptyMessage;\n }\n else {\n emptyMessage = \"\";\n }\n return emptyMessage;\n },\n /**\n * Returns the maximum number of results\n */\n _Limit: function () {\n var limit = this.Input.getAttribute(\"data-autocomplete-limit\");\n if (isNaN(limit) || limit === null) {\n return this.Limit;\n }\n return parseInt(limit, 10);\n },\n /**\n * Returns the minimum number of characters entered before firing ajax\n */\n _MinChars: function () {\n var minchars = this.Input.getAttribute(\"data-autocomplete-minchars\");\n if (isNaN(minchars) || minchars === null) {\n return this.MinChars;\n }\n return parseInt(minchars, 10);\n },\n /**\n * Apply transformation on labels response\n */\n _Highlight: function (label) {\n return label.replace(this.Highlight.getRegex(this._Pre()), this.Highlight.transform);\n },\n /**\n * Returns the HHTP method to use\n */\n _HttpMethod: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-method\")) {\n return this.Input.getAttribute(\"data-autocomplete-method\");\n }\n return this.HttpMethod;\n },\n /**\n * Returns the query param to use\n */\n _QueryArg: function () {\n if (this.Input.hasAttribute(\"data-autocomplete-param-name\")) {\n return this.Input.getAttribute(\"data-autocomplete-param-name\");\n }\n return this.QueryArg;\n },\n /**\n * Returns the URL to use for AJAX request\n */\n _Url: function () {\n if (this.Input.hasAttribute(\"data-autocomplete\")) {\n return this.Input.getAttribute(\"data-autocomplete\");\n }\n return this.Url;\n },\n /**\n * Manage the close\n */\n _Blur: function (now) {\n if (now === void 0) { now = false; }\n if (now) {\n this._Close();\n }\n else {\n var params = this;\n setTimeout(function () {\n params._Blur(true);\n }, 150);\n }\n },\n /**\n * Manage the cache\n */\n _Cache: function (value) {\n return this.$Cache[value];\n },\n /**\n * Manage the open\n */\n _Focus: function () {\n var oldValue = this.Input.getAttribute(\"data-autocomplete-old-value\");\n if ((!oldValue || this.Input.value != oldValue) && this._MinChars() <= this.Input.value.length) {\n this.DOMResults.setAttribute(\"class\", \"autocomplete open\");\n }\n },\n /**\n * Bind all results item if one result is opened\n */\n _Open: function () {\n var params = this;\n Array.prototype.forEach.call(this.DOMResults.getElementsByTagName(\"li\"), function (li) {\n if (li.getAttribute(\"class\") != \"locked\") {\n li.onclick = function () {\n params._Select(li);\n };\n }\n });\n },\n _Close: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n },\n /**\n * Position the results HTML element\n */\n _Position: function () {\n this.DOMResults.setAttribute(\"class\", \"autocomplete\");\n this.DOMResults.setAttribute(\"style\", \"top:\" + (this.Input.offsetTop + this.Input.offsetHeight) + \"px;left:\" + this.Input.offsetLeft + \"px;width:\" + this.Input.clientWidth + \"px;\");\n },\n /**\n * Execute the render of results DOM element\n */\n _Render: function (response) {\n var ul;\n if (typeof response == \"string\") {\n ul = this._RenderRaw(response);\n }\n else {\n ul = this._RenderResponseItems(response);\n }\n if (this.DOMResults.hasChildNodes()) {\n this.DOMResults.removeChild(this.DOMResults.childNodes[0]);\n }\n this.DOMResults.appendChild(ul);\n },\n /**\n * ResponseItems[] rendering\n */\n _RenderResponseItems: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\"), limit = this._Limit();\n // Order\n if (limit < 0) {\n response = response.reverse();\n }\n else if (limit === 0) {\n limit = response.length;\n }\n for (var item = 0; item < Math.min(Math.abs(limit), response.length); item++) {\n li.innerHTML = response[item].Label;\n li.setAttribute(\"data-autocomplete-value\", response[item].Value);\n ul.appendChild(li);\n li = document.createElement(\"li\");\n }\n return ul;\n },\n /**\n * string response rendering (RAW HTML)\n */\n _RenderRaw: function (response) {\n var ul = document.createElement(\"ul\"), li = document.createElement(\"li\");\n if (response.length > 0) {\n this.DOMResults.innerHTML = response;\n }\n else {\n var emptyMessage = this._EmptyMessage();\n if (emptyMessage !== \"\") {\n li.innerHTML = emptyMessage;\n li.setAttribute(\"class\", \"locked\");\n ul.appendChild(li);\n }\n }\n return ul;\n },\n /**\n * Deal with request response\n */\n _Post: function (response) {\n try {\n var returnResponse = [];\n //JSON return\n var json = JSON.parse(response);\n if (Object.keys(json).length === 0) {\n return \"\";\n }\n if (Array.isArray(json)) {\n for (var i = 0; i < Object.keys(json).length; i++) {\n returnResponse[returnResponse.length] = { \"Value\": json[i], \"Label\": this._Highlight(json[i]) };\n }\n }\n else {\n for (var value in json) {\n returnResponse.push({\n \"Value\": value,\n \"Label\": this._Highlight(json[value])\n });\n }\n }\n return returnResponse;\n }\n catch (event) {\n //HTML return\n return response;\n }\n },\n /**\n * Return the autocomplete value to send (before request)\n */\n _Pre: function () {\n return this.Input.value;\n },\n /**\n * Choice one result item\n */\n _Select: function (item) {\n if (item.hasAttribute(\"data-autocomplete-value\")) {\n this.Input.value = item.getAttribute(\"data-autocomplete-value\");\n }\n else {\n this.Input.value = item.innerHTML;\n }\n this.Input.setAttribute(\"data-autocomplete-old-value\", this.Input.value);\n },\n /**\n * Handle HTTP error on the request\n */\n _Error: function () {\n },\n $AjaxTimer: null,\n $Cache: {},\n $Listeners: {}\n };\n return AutoComplete;\n}());\nmodule.exports = AutoComplete;\n\n},{}]},{},[1])(1)\n});\n"],"names":["window","searxng","w","d","Element","ElementPrototype","matches","matchesSelector","webkitMatchesSelector","msMatchesSelector","selector","node","this","nodes","parentNode","document","querySelectorAll","i","prototype","callbackSafe","callback","el","e","call","exception","console","log","on","obj","eventType","useCapture","addEventListener","target","srcElement","found","parentElement","ready","readyState","bind","http","method","url","data","Promise","resolve","reject","req","XMLHttpRequest","open","timeout","onload","status","response","responseType","Error","statusText","onerror","onabort","ontimeout","send","ex","loadStyle","src","path","settings","theme_static_path","id","replace","s","getElementById","createElement","setAttribute","body","appendChild","loadScript","hasAttribute","apply","insertBefore","newNode","referenceNode","insertAfter","nextSibling","classList","add","getEndpoint","className","getElementsByTagName","values","endsWith","split","endpoint","infinite_scroll_supported","IntersectionObserverEntry","let","onlyImages","contains","newLoadSpinner","loader","replaceChildrenWith","element","children","textContent","forEach","child","loadNextPage","form","querySelector","formData","FormData","getAttribute","then","nextPageDoc","DOMParser","parseFromString","articleList","paginationElement","remove","length","articleElement","catch","err","translations","error_loading_next_page","infinite_scroll","intersectionObserveOptions","rootMargin","observedSelector","observer","IntersectionObserver","entries","paginationEntry","isIntersecting","unobserve","observe","isElementInDetail","undefined","getResultElement","isImageResult","resultElement","highlightResult","preventDefault","selectImage","keyBindings","Escape","key","fun","removeFocus","des","cat","ArrowLeft","ArrowRight","h","toggleHelp","searchInputFocus","n","GoToNextPage","o","openResult","p","GoToPreviousPage","r","reloadPage","t","vimKeys","b","scrollPage","innerHeight","f","u","g","scrollPageTo","scrollHeight","v","k","j","hotkeys","Object","assign","hasOwnProperty","ctrlKey","altKey","shiftKey","metaKey","tagName","toLowerCase","which","noScroll","keepFocus","current","effectiveWhich","next","results","top","documentElement","scrollTop","bot","clientHeight","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","q","setSelectionRange","len","value","newTab","href","initHelpContent","divElement","categories","push","sorted","keys","sort","a","html","lastCategory","first","cj","innerHTML","helpPanel","toggle","selectNext","selectPrevious","event","leaflet_target","dataset","leafletTarget","map_lon","parseFloat","mapLon","map_lat","mapLat","map_zoom","mapZoom","map_boundingbox","JSON","parse","mapBoundingbox","map_geojson","mapGeojson","map_bounds","southWest","L","latLng","northEast","latLngBounds","map","osmMapnikUrl","osmMapnikAttrib","osmMapnik","TileLayer","minZoom","maxZoom","attribution","osmWikimediaUrl","osmWikimediaAttrib","osmWikimedia","setTimeout","fitBounds","setView","addLayer","baseLayers","OSM Mapnik","OSM Wikimedia","control","layers","addTo","geoJson","engine_descriptions","load_engine_descriptions","content","engine_name","description","elements","source","Source","img","style","display","error","btnLabelCollapsed","btnLabelNotCollapsed","targetElement","iframe_load","srctest","imgElement","thumbnailElement","detailElement","imgSrc","imgLoader","Image","qinput_id","qinput","isMobile","matchMedia","submitIfQuery","search","submit","createClearButton","cs","updateClearButton","ev","autocomplete_provider","autocomplete","AutoComplete","Url","EmptyMessage","no_item_found","HttpMethod","http_method","HttpHeaders","Content-type","X-Requested-With","MinChars","autocomplete_min","Delay","_Position","_Open","params","Array","DOMResults","li","onmousedown","_Select","item","defaults","closest","_MinChars","Input","indexOf","KeyboardMappings","KeyUpAndDown_up","Callback","liActive","Tab","Enter","Conditions","Is","Not","ajax","request","$AjaxTimer","clearTimeout","Request","abort","encodeURIComponent","_QueryArg","_Pre","search_on_category_select","checked","exports","module","define","amd","global","self","c","require","code","1","ConditionOperator","EventType","isArray","input","specificParams","merge","create","nodeName","match","$Listeners","_Blur","destroy","_Focus","keyup","KEYUP","keydown","KEYDOWN","getEventsByType","type","mappings","Event","eventIdentifier","condition","mapping","Operator","AND","OR","keyCode","From","To","name","makeRequest","callbackErr","propertyHttpHeaders","getOwnPropertyNames","_HttpMethod","_Url","queryParams","queryParamsStringify","setRequestHeader","onreadystatechange","$Cache","cache","_Cache","removeEventListener","removeChild","tmp","arguments","Highlight","getRegex","RegExp","transform","Limit","QueryArg","KeyUpAndDown_down","last","active","currentIndex","lisCount","AlphaNum","oldValue","currentValue","_Render","_Post","_Error","_Close","_EmptyMessage","emptyMessage","_Limit","limit","isNaN","parseInt","minchars","_Highlight","label","now","onclick","offsetHeight","offsetLeft","clientWidth","ul","_RenderRaw","_RenderResponseItems","hasChildNodes","childNodes","reverse","Math","min","abs","Label","Value","returnResponse","json"],"mappings":"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"} \ No newline at end of file