window . searx = function ( t , o ) { "use strict" ; if ( t . Element ) { ( function ( e ) { e . matches = e . matches || e . matchesSelector || e . webkitMatchesSelector || e . msMatchesSelector || function ( e ) { var t = this , n = ( t . parentNode || t . document ) . querySelectorAll ( e ) , i = - 1 ; while ( n [ ++ i ] && n [ i ] != t ) ; return ! ! n [ i ] } } ) ( Element . prototype ) } function a ( e , t , n ) { try { e . call ( t , n ) } catch ( e ) { console . log ( e ) } } var s = window . searx || { } ; s . on = function ( i , e , r , t ) { t = t || false ; if ( typeof i !== "string" ) { i . addEventListener ( e , r , t ) } else { o . addEventListener ( e , function ( e ) { var t = e . target || e . srcElement , n = false ; while ( t && t . matches && t !== o && ! ( n = t . matches ( i ) ) ) t = t . parentElement ; if ( n ) a ( r , t , e ) } , t ) } } ; s . ready = function ( e ) { if ( document . readyState != "loading" ) { e . call ( t ) } else { t . addEventListener ( "DOMContentLoaded" , e . bind ( t ) ) } } ; s . http = function ( e , t , n ) { var i = new XMLHttpRequest , r = function ( ) { } , o = function ( ) { } , a = { then : function ( e ) { r = e ; return a } , catch : function ( e ) { o = e ; return a } } ; try { i . open ( e , t , true ) ; i . onload = function ( ) { if ( i . status == 200 ) { r ( i . response , i . responseType ) } else { o ( Error ( i . statusText ) ) } } ; i . onerror = function ( ) { o ( Error ( "Network Error" ) ) } ; i . onabort = function ( ) { o ( Error ( "Transaction is aborted" ) ) } ; i . send ( ) } catch ( e ) { o ( e ) } return a } ; s . loadStyle = function ( e ) { var t = s . static _path + e , n = "style_" + e . replace ( "." , "_" ) , i = o . getElementById ( n ) ; if ( i === null ) { i = o . createElement ( "link" ) ; i . setAttribute ( "id" , n ) ; i . setAttribute ( "rel" , "stylesheet" ) ; i . setAttribute ( "type" , "text/css" ) ; i . setAttribute ( "href" , t ) ; o . body . appendChild ( i ) } } ; s . loadScript = function ( e , t ) { var n = s . static _path + e , i = "script_" + e . replace ( "." , "_" ) , r = o . getElementById ( i ) ; if ( r === null ) { r = o . createElement ( "script" ) ; r . setAttribute ( "id" , i ) ; r . setAttribute ( "src" , n ) ; r . onload = t ; r . onerror = function ( ) { r . setAttribute ( "error" , "1" ) } ; o . body . appendChild ( r ) } else if ( ! r . hasAttribute ( "error" ) ) { try { t . apply ( r , [ ] ) } catch ( e ) { console . log ( e ) } } else { console . log ( "callback not executed : script '" + n + "' not loaded." ) } } ; s . insertBefore = function ( e , t ) { element . parentNode . insertBefore ( e , t ) } ; s . insertAfter = function ( e , t ) { t . parentNode . insertBefore ( e , t . nextSibling ) } ; s . on ( ".close" , "click" , function ( e ) { var t = e . target || e . srcElement ; this . parentNode . classList . add ( "invisible" ) } ) ; return s } ( window , document ) ; ( function ( e ) { if ( typeof exports === "object" && typeof module !== "undefined" ) { module . exports = e ( ) } else if ( typeof define === "function" && define . amd ) { define ( [ ] , e ) } else { var t ; if ( typeof window !== "undefined" ) { t = window } else if ( typeof global !== "undefined" ) { t = global } else if ( typeof self !== "undefined" ) { t = self } else { t = this } t . AutoComplete = e ( ) } } ) ( function ( ) { var e , t , n ; return function o ( a , s , l ) { function u ( n , e ) { if ( ! s [ n ] ) { if ( ! a [ n ] ) { var t = typeof require == "function" && require ; if ( ! e && t ) return t ( n , ! 0 ) ; if ( c ) return c ( n , ! 0 ) ; var i = new Error ( "Cannot find module '" + n + "'" ) ; throw i . code = "MODULE_NOT_FOUND" , i } var r = s [ n ] = { exports : { } } ; a [ n ] [ 0 ] . call ( r . exports , function ( e ) { var t = a [ n ] [ 1 ] [ e ] ; return u ( t ? t : e ) } , r , r . exports , o , a , s , l ) } return s [ n ] . exports } var c = typeof require == "function" && require ; for ( var e = 0 ; e < l . length ; e ++ ) u ( l [ e ] ) ; return u } ( { 1 : [ function ( e , t , n ) {
"use strict" ; var l ; ( function ( e ) { e [ e [ "AND" ] = 0 ] = "AND" ; e [ e [ "OR" ] = 1 ] = "OR" } ) ( l || ( l = { } ) ) ; var o ; ( function ( e ) { e [ e [ "KEYDOWN" ] = 0 ] = "KEYDOWN" ; e [ e [ "KEYUP" ] = 1 ] = "KEYUP" } ) ( o || ( o = { } ) ) ; var i = function ( ) { function s ( t , e ) { if ( t === void 0 ) { t = { } } if ( e === void 0 ) { e = "[data-autocomplete]" } if ( Array . isArray ( e ) ) { e . forEach ( function ( e ) { new s ( t , e ) } ) } else if ( typeof e == "string" ) { var n = document . querySelectorAll ( e ) ; Array . prototype . forEach . call ( n , function ( e ) { new s ( t , e ) } ) } else { var i = s . merge ( s . defaults , t , { DOMResults : document . createElement ( "div" ) } ) ; s . prototype . create ( i , e ) ; return i } } s . prototype . create = function ( e , t ) { e . Input = t ; if ( e . Input . nodeName . match ( /^INPUT$/i ) && ( e . Input . hasAttribute ( "type" ) === false || e . Input . getAttribute ( "type" ) . match ( /^TEXT|SEARCH$/i ) ) ) { e . Input . setAttribute ( "autocomplete" , "off" ) ; e . _Position ( e ) ; e . Input . parentNode . appendChild ( e . DOMResults ) ; e . $Listeners = { blur : e . _Blur . bind ( e ) , destroy : s . prototype . destroy . bind ( null , e ) , focus : e . _Focus . bind ( e ) , keyup : s . prototype . event . bind ( null , e , o . KEYUP ) , keydown : s . prototype . event . bind ( null , e , o . KEYDOWN ) , position : e . _Position . bind ( e ) } ; for ( var n in e . $Listeners ) { e . Input . addEventListener ( n , e . $Listeners [ n ] ) } } } ; s . prototype . getEventsByType = function ( e , t ) { var n = { } ; for ( var i in e . KeyboardMappings ) { var r = o . KEYUP ; if ( e . KeyboardMappings [ i ] . Event !== undefined ) { r = e . KeyboardMappings [ i ] . Event } if ( r == t ) { n [ i ] = e . KeyboardMappings [ i ] } } return n } ; s . prototype . event = function ( e , t , n ) { var i = function ( e ) { if ( a === true && o . Operator == l . AND || a === false && o . Operator == l . OR ) { e = s . merge ( { Not : false } , e ) ; if ( e . hasOwnProperty ( "Is" ) ) { if ( e . Is == n . keyCode ) { a = ! e . Not } else { a = e . Not } } else if ( e . hasOwnProperty ( "From" ) && e . hasOwnProperty ( "To" ) ) { if ( n . keyCode >= e . From && n . keyCode <= e . To ) { a = ! e . Not } else { a = e . Not } } } } ; for ( var r in s . prototype . getEventsByType ( e , t ) ) { var o = s . merge ( { Operator : l . AND } , e . KeyboardMappings [ r ] ) , a = l . AND == o . Operator ; o . Conditions . forEach ( i ) ; if ( a === true ) { o . Callback . call ( e , n ) } } } ; s . prototype . makeRequest = function ( e , t ) { var n = Object . getOwnPropertyNames ( e . HttpHeaders ) , i = new XMLHttpRequest , r = e . _HttpMethod ( ) , o = e . _Url ( ) , a = e . _Pre ( ) , s = encodeURIComponent ( e . _QueryArg ( ) ) + "=" + encodeURIComponent ( a ) ; if ( r . match ( /^GET$/i ) ) { if ( o . indexOf ( "?" ) !== - 1 ) { o += "&" + s } else { o += "?" + s } } i . open ( r , o , true ) ; for ( var l = n . length - 1 ; l >= 0 ; l -- ) { i . setRequestHeader ( n [ l ] , e . HttpHeaders [ n [ l ] ] ) } i . onreadystatechange = function ( ) { if ( i . readyState == 4 && i . status == 200 ) { e . $Cache [ a ] = i . response ; t ( i . response ) } } ; return i } ; s . prototype . ajax = function ( e , t , n ) { if ( n === void 0 ) { n = true } if ( e . $AjaxTimer ) { window . clearTimeout ( e . $AjaxTimer ) } if ( n === true ) { e . $AjaxTimer = window . setTimeout ( s . prototype . ajax . bind ( null , e , t , false ) , e . Delay ) } else { if ( e . Request ) { e . Request . abort ( ) } e . Request = t ; e . Request . send ( e . _QueryArg ( ) + "=" + e . _Pre ( ) ) } } ; s . prototype . cache = function ( e , t ) { var n = e . _Cache ( e . _Pre ( ) ) ; if ( n === undefined ) { var i = s . prototype . makeRequest ( e , t ) ; s . prototype . ajax ( e , i ) } else { t ( n ) } } ; s . prototype . destroy = function ( e ) { for ( var t in e . $Listeners ) { e . Input . removeEventListener ( t , e . $Listeners [ t ] ) } e . DOMResults . parentNode . removeChild ( e . DOMResults ) } ; return s } ( ) ; i . merge = function ( ) { var e = { } , t ; for ( var n = 0 ; n < arguments . length ; n ++ ) { for ( t in arguments [ n ] ) { e [ t ] = arguments [ n ] [ t ] } } return e } ; i . defaults = { Delay : 150 , EmptyMessage : "No result here" , Highlight : { getRegex : function ( e ) { return new RegExp ( e , "ig" ) } , transform : function ( e ) { return "<strong>" + e + "</strong>" } } , HttpHeaders : { "Content-type" : "application/x-www-form-urlencoded" } , Limit : 0 , MinChars : 0 , HttpMethod : "GET" , QueryArg : "q" , Url : null , KeyboardMappings : { Enter : { Conditions : [ { Is : 13 , Not : false } ] , Callback : function ( e ) { if ( this . DOMResults . getAttribute ( "class" ) . indexOf ( "open" ) != - 1 ) { var t = this . DOMResults . querySelector ( "li.active" ) ; if ( t !== null ) { e . preventDefault ( ) ; this . _Select ( t ) ; this . DOMResults . setAttribute ( "class" , "autocomplete" ) } } } , Operator : l . AND , Event : o . KEYDOWN } , KeyUpAndDown _down : { Conditions : [ { Is : 38 , Not : false } , { Is : 40 , Not : false } ] , Callback : function ( e ) { e . preventDefault ( ) } , Operator : l . OR , Event : o . KEYDOWN } , KeyUpAndDown _up : { Conditions : [ { Is : 38 , Not : false } , { Is : 40 , Not : false } ] , Callback : function ( e ) { e . preventDefault ( ) ; var t = this . DOMResults . querySelector ( "li:first-child:not(.locked)" ) , n = this . DOMResults . querySelector ( "li:last-child:not(.locked)" ) , i = this . DOMResults . querySelector ( "li.active" ) ; if ( i ) { var r = Array . prototype . indexOf . call ( i . parentNode . children , i ) , o = r + ( e . keyCode - 39 ) , a = this . DOMResults . getElementsByTagName ( "li" ) . length ; if ( o < 0 ) { o = a - 1 } else if ( o >= a ) { o = 0 } i . classList . remove ( "active" ) ; i . parentElement . children . item ( o ) . classList . add ( "active" ) } else if ( n && e . keyCode == 38 ) { n . classList . add ( "active" ) } else if ( t ) { t . classList . add ( "active" ) } } , Operator : l . OR , Event : o . KEYUP } , AlphaNum : { Conditions : [ { Is : 13 , Not : true } , { From : 35 , To : 40 , Not : true } ] , Callback : function ( ) { var e = this . Input . getAttribute ( "data-autocomplete-old-value" ) , t = this . _Pre ( ) ; if ( t !== "" && t . length >= this . _MinChars ( ) ) { if ( ! e || t != e ) { this . DOMResults . setAttribute ( "class" , "autocomplete open" ) } i . prototype . cache ( this , function ( e ) { this . _Render ( this . _Post ( e ) ) ; this . _Open ( ) } . bind ( this ) ) } } , Operator : l . AND , Event : o . KEYUP } } , DOMResults : null , Request : null , Input : null , _EmptyMessage : function ( ) { var e = "" ; if ( this . Input . hasAttribute ( "data-autocomplete-empty-message" ) ) { e = this . Input . getAttribute ( "data-autocomplete-empty-message" ) } else if ( this . EmptyMessage !== false ) { e = this . EmptyMessage } else { e = "" } return e } , _Limit : function ( ) { var e = this . Input . getAttribute ( "data-autocomplete-limit" ) ; if ( isNaN ( e ) || e === null ) { return this . Limit } return parseInt ( e , 10 ) } , _MinChars : function ( ) { var e = this . Input . getAttribute ( "data-autocomplete-minchars" ) ; if ( isNaN ( e ) || e === null ) { return this . MinChars } return parseInt ( e , 10 ) } , _Highlight : function ( e ) { return e . replace ( this . Highlight . getRegex ( this . _Pre ( ) ) , this . Highlight . transform ) } , _HttpMethod : function ( ) { if ( this . Input . hasAttribute ( "data-autocomplete-method" ) ) { return this . Input . getAttribute ( "data-autocomplete-method" ) } return this . HttpMethod } , _QueryArg : function ( ) { if ( this . Input . hasAttribute ( "data-autocomplete-param-name" ) ) { return this . Input . getAttribute ( "data-autocomplete-param-name" ) } return this . QueryArg } , _Url : function ( ) { if ( this . Input . hasAttribute ( "data-autocomplete" ) ) { return this . Input . getAttribute ( "data-autocomplete" ) } return this . Url } , _Blur : function ( e ) { if ( e === true ) { this . DOMResults . setAttribute ( "class" , "autocomplete" ) ; this . Input . setAttribute ( "data-autocomplete-old-value" , this . Input . value ) } else { var t = this ; setTimeout ( function ( ) { t . _Blur ( true ) } , 150 ) } } , _Cache : function ( e ) { return this . $Cache [ e ] } , _Focus : function ( ) { var e = this . Input . getAttribute ( "data-autocomplete-old-value" ) ; if ( ( ! e || this . Input . value != e ) && this . _MinChars ( ) <= this . Input . value . length ) { this . DOMResults . setAttribute ( "class" , "autocomplete open" ) } } , _Open : function ( ) { var n = this ; Array . prototype . forEach . call ( this . DOMResults . getElementsByTagName ( "li" ) , function ( t ) { if ( t . getAttribute ( "class" ) != "locked" ) { t . onclick = function ( e ) { n . _Select ( t ) } ; t . onmouseenter = function ( ) { var e = n . DOMResults . querySelector ( "li.active" ) ; if ( e !== t ) { if ( e !== null ) { e . classList . remove ( "active" ) } t . classList . add ( "active" ) } } } } ) } , _Position : function ( ) { this . DOMResults . setAttribute ( "class" , "autocomplete" ) ; this . DOMResults . setAttribute ( "style" , "top:" + ( this . Input . offsetTop + this . Input . offsetHeight ) + "px;left:" + this . Input . offsetLeft + "px;width:" + this . Input . clientWidth + "px;" ) } , _Render : function ( e ) { var t ; if ( typeof e == "string" ) { t = this . _RenderRaw ( e ) } else { t = this . _RenderResponseItems ( e ) } if ( this . DOMResults . hasChildNodes ( ) ) { this . DOMResults . removeChild ( this . DOMResults . childNodes [ 0 ] ) } this . DOMResults . appendChild ( t ) } , _RenderResponseItems : function ( e ) { var t = document . createElement ( "ul" ) , n = document . createElement ( "li" ) , i = this . _Limit ( ) ; if ( i < 0 ) { e = e . reverse ( ) } else if ( i === 0 ) { i = e . length } for ( var r = 0 ; r < Math . min ( Math . abs ( i ) , e . length ) ; r ++ ) { n . innerHTML = e [ r ] . Label ; n . setAttribute ( "data-autocomplete-value" , e [ r ] . Value ) ; t . appendChild ( n ) ; n = document . createElement ( "li" ) } return t } , _RenderRaw : function ( e ) { var t = document . createElement ( "ul" ) , n = document . createElement ( "li" ) ; if ( e . length > 0 ) { this . DOMResults . innerHTML = e } else { var i = this . _EmptyMessage ( ) ; if ( i !== "" ) { n . innerHTML = i ; n . setAttribute ( "class" , "locked" ) ; t . appendChild ( n ) } } return t } , _Post : function ( t ) { try { var e = [ ] ; var n = JSON . parse ( t ) ; if ( Object . keys ( n ) . length === 0 ) { return "" } if ( Array . isArray ( n ) ) { for ( var i = 0 ; i < Object . keys ( n ) . length ; i ++ ) { e [ e . length ] = { Value : n [ i ] , Label : this . _Highlight ( n [ i ] ) } } } else { for ( var r in n ) { e . push ( { Value : r , Label : this . _Highlight ( n [ r ] ) } ) } } return e } catch ( e ) { return t } } , _Pre : function ( ) { return this . Input . value } , _Select : function ( e ) { console . log ( "test test test" ) ; if ( e . hasAttribute ( "data-autocomplete-value" ) ) { this . Input . value = e . getAttribute ( "data-autocomplete-value" ) } else { this . Input . value = e . innerHTML } this . Input . setAttribute ( "data-autocomplete-old-value" , this . Input . value ) } , $AjaxTimer : null , $Cache : { } , $Listeners : { } } ; t . exports = i } , { } ] } , { } , [ 1 ] ) ( 1 ) } ) ; searx . ready ( function ( ) { searx . on ( ".result" , "click" , function ( ) { n ( this ) ( true ) } ) ; searx . on ( ".result a" , "focus" , function ( e ) { var t = e . target ; while ( t !== undefined ) { if ( t . classList . contains ( "result" ) ) { if ( t . getAttribute ( "data-vim-selected" ) === null ) { n ( t ) ( true ) } break } t = t . parentNode } } , true ) ; var d = { 27 : { key : "Escape" , fun : t , des : "remove focus from the focused input" , cat : "Control" } , 73 : { key : "i" , fun : a , des : "focus on the search input" , cat : "Control" } , 66 : { key : "b" , fun : r ( - window . innerHeight ) , des : "scroll one page up" , cat : "Navigation" } , 70 : { key : "f" , fun : r ( window . innerHeight ) , des : "scroll one page down" , cat : "Navigation" } , 85 : { key : "u" , fun : r ( - window . innerHeight / 2 ) , des : "scroll half a page up" , cat : "Navigation" } , 68 : { key : "d" , fun : r ( window . innerHeight / 2 ) , des : "scroll half a page down" , cat : "Navigation" } , 71 : { key : "g" , fun : o ( - document . body . scrollHeight , "top" ) , des : "scroll to the top of the page" , cat : "Navigation" } , 86 : { key : "v" , fun : o ( document . body . scrollHeight , "bottom" ) , des : "scroll to the bottom of the page" , cat : "Navigation" } , 75 : { key : "k" , fun : n ( "up" ) , des : "select previous search result" , cat : "Results" } , 74 : { key : "j" , fun : n ( "down" ) , des : "select next search result" , cat : "Results" } , 80 : { key : "p" , fun : i ( 0 ) , des : "go to previous page" , cat : "Results" } , 78 : { key : "n" , fun : i ( 1 ) , des : "go to next page" , cat : "Results" } , 79 : { key : "o" , fun : s ( false ) , des : "open search result" , cat : "Results" } , 84 : { key : "t" , fun : s ( true ) , des : "open the result in a new tab" , cat : "Results" } , 82 : { key : "r" , fun : e , des : "reload page from the server" , cat : "Control" } , 72 : { key : "h" , fun : u , des : "toggle help window" , cat : "Other" } } ; searx . on ( document , "keydown" , function ( e ) { if ( d . hasOwnProperty ( e . keyCode ) && ! e . ctrlKey && ! e . altKey && ! e . shiftKey && ! e . metaKey ) { var t = e . target . tagName . toLowerCase ( ) ; if ( e . keyCode === 27 ) { if ( t === "input" || t === "select" || t === "textarea" ) { d [ e . keyCode ] . fun ( ) } } else { if ( e . target === document . body || t === "a" || t === "button" ) { e . preventDefault ( ) ; d [ e . keyCode ] . fun ( ) } } } } ) ; function n ( d ) { return function ( e ) { var t = document . querySelector ( ".result[data-vim-selected]" ) , n = d ; if ( t === null ) { t = document . querySelector ( ".result" ) ; if ( t === null ) { return } if ( d === "down" || d === "up" ) { n = t } } var i , r = document . querySelectorAll ( ".result" ) ; if ( typeof n !== "string" ) { i = n } else { switch ( n ) { case "visible" : var o = document . documentElement . scrollTop || document . body . scrollTop ; var a = o + document . documentElement . clientHeight ; for ( var s = 0 ; s < r . length ; s ++ ) { i = r [ s ] ; var l = i . offsetTop ; var u = l + i . clientHeight ; if ( u <= a && l > o ) { break } } break ; case "down" : i = t . nextElementSibling ; if ( i === null ) { i = r [ 0 ] } break ; case "up" : i = t . previousElementSibling ; if ( i === null ) { i = r [ r . length - 1 ] } break ; case "bottom" : i = r [ r . length - 1 ] ; break ; case "top" : default : i = r [ 0 ] } } if ( i ) { t . removeAttribute ( "data-vim-selected" ) ; i . setAttribute ( "data-vim-selected" , "true" ) ; var c = i . querySelector ( "h3 a" ) || i . querySelector ( "a" ) ; if ( c !== null ) { c . focus ( ) } if ( ! e ) { f ( ) } } } } function e ( ) { document . location . reload ( true ) } function t ( ) { if ( document . activeElement ) { document . activeElement . blur ( ) } } function i ( t ) { return function ( ) { var e = $ ( 'div#pagination button[type="submit"]' ) ; if ( e . length !== 2 ) { console . log ( "page navigation with this theme is not supported" ) ; return } if ( t >= 0 && t < e . length ) { e [ t ] . click ( ) } else { console . log ( "pageButtonClick(): invalid argument" ) } } } function f ( ) { var e = document . querySelector ( ".result[data-vim-selected]" ) ; if ( e === null ) { return } var t = document . documentElement . scrollTop || document . body . scrollTop , n = document . documentElement . clientHeight , i = e . offsetTop , r = i + e . clientHeight , o = 120 ; if ( e . previousElementSibling === null && r < n ) { window . scroll ( window . scrollX , 0 ) ; return } if ( t > i - o ) { window . scroll ( window . scrollX , i - o ) } else { var a = t + n ; if ( a < r + o ) { window . scroll ( window . scrollX , r - n + o ) } } } function r ( e ) { return function ( ) { window . scrollBy ( 0 , e ) ; n ( "visible" ) ( ) } } function o ( e , t ) { return function ( ) { window . scrollTo ( 0 , e ) ; n ( t ) ( ) } } function a ( ) { window . scrollTo ( 0 , 0 ) ; document . querySelector ( "#q" ) . focus ( ) } function s ( n ) { return function ( ) { var e = document . querySelector ( ".result[data-vim-selected] h3 a" ) ; if ( e !== null ) { var t = e . getAttribute ( "href" ) ; if ( n ) { window . open ( t ) } else { window . location . href = t } } } } function l ( e ) { var n = { } ; for ( var t in d ) { var i = d [ t ] ; n [ i . cat ] = n [ i . cat ] || [ ] ; n [ i . cat ] . push ( i ) } var r = Object . keys ( n ) . sort ( function ( e , t ) { return n [ t ] . length - n [ e ] . length } ) ; if ( r . length === 0 ) { return } var o = '<a href="#" class="close" aria-label="close" title="close">× </a>' ; o += "<h3>How to navigate searx with Vim-like hotkeys</h3>" ; o += "<table>" ; for ( var a = 0 ; a < r . length ; a ++ ) { var s = n [ r [ a ] ] ; var l = a === r . length - 1 ; var u = a % 2 === 0 ; if ( u ) { o += "<tr>" } o += "<td>" ; o += "<h4>" + s [ 0 ] . cat + "</h4>" ; o += '<ul class="list-unstyled">' ; for ( var c in s ) { o += "<li><kbd>" + s [ c ] . key + "</kbd> " + s [ c ] . des + "</li>" } o += "</ul>" ; o += "</td>" ; if ( ! u || l ) { o += "</tr>" } } o += "</table>" ; e . innerHTML = o } function u ( ) { var e = document . querySelector ( "#vim-hotkeys-help" ) ; console . log ( e ) ; if ( e === undefined || e === null ) { e = document . createElement ( "div" ) ; e . id = "vim-hotkeys-help" ; e . className = "dialog-modal" ; e . style = "width: 40%" ; l ( e ) ; var t = document . getElementsByTagName ( "body" ) [ 0 ] ; t . appendChild ( e ) } else { e . classList . toggle ( "invisible" ) ; return } } } ) ; ( function ( e , t , n ) { "use strict" ; n . ready ( function ( ) { n . on ( ".searx_init_map" , "click" , function ( e ) { this . classList . remove ( "searx_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 ( "leaflet/leaflet.css" ) ; n . loadScript ( "leaflet/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 i = L . map ( d ) ; var r = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" ; var o = 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors' ; var a = new L . TileLayer ( r , { minZoom : 1 , maxZoom : 19 , attribution : o } ) ; var s = "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png" ; var l = 'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors' ; var u = new L . TileLayer ( s , { minZoom : 1 , maxZoom : 19 , attribution : l } ) ; if ( e ) { setTimeout ( function ( ) { i . fitBounds ( e , { maxZoom : 17 } ) } , 0 ) } else if ( f && p ) { if ( h ) { i . setView ( new L . latLng ( p , f ) , h ) } else { i . setView ( new L . latLng ( p , f ) , 8 ) } } i . addLayer ( a ) ; var c = { "OSM Mapnik" : a } ; L . control . layers ( c ) . addTo ( i ) ; if ( g ) { L . geoJson ( g ) . addTo ( i ) } } ) ; e . preventDefault ( ) } ) } ) } ) ( window , document , window . searx ) ; ( function ( e , a , t ) { "use strict" ; t . ready ( function ( ) { t . image _thumbnail _layout = new t . ImageLayout ( "#urls" , "#urls .result-images" , "img.image_thumbnail" , 10 , 200 ) ; t . image _thumbnail _layout . watch ( ) ; t . on ( ".btn-collapse" , "click" , function ( e ) { var t = this . getAttribute ( "data-btn-text-collapsed" ) ; var n = this . getAttribute ( "data-btn-text-not-collapsed" ) ; var i = this . getAttribute ( "data-target" ) ; var r = a . querySelector ( i ) ; var o = this . innerHTML ; if ( this . classList . contains ( "collapsed" ) ) { o = o . replace ( t , n ) } else { o = o . replace ( n , t ) } this . innerHTML = o ; this . classList . toggle ( "collapsed" ) ; r . classList . toggle ( "invisible" ) } ) ; t . on ( ".media-loader" , "click" , function ( e ) { var t = this . getAttribute ( "data-target" ) ; var n = a . querySelector ( t + " > iframe" ) ; var i = n . getAttribute ( "src" ) ; if ( i === null || i === undefined || i === false ) { n . setAttribute ( "src" , n . getAttribute ( "data-src" ) ) } } ) ; e . addEventListener ( "scroll" , function ( ) { var e = a . getElementById ( "backToTop" ) , t = document . documentElement . scrollTop || document . body . scrollTop ; if ( e !== null ) { if ( t >= 200 ) { e . style . opacity = 1 } else { e . style . opacity = 0 } } } ) } ) } ) ( window , document , window . searx ) ; ( function ( t , i , n ) { "use strict" ; var r = true , o = "q" , a ; function s ( e ) { if ( e . setSelectionRange ) { var t = e . value . length ; e . setSelectionRange ( t , t ) } } function l ( ) { if ( a . value . length > 0 ) { var e = document . getElementById ( "search" ) ; setTimeout ( e . submit . bind ( e ) , 0 ) } } function u ( e ) { var t = document . getElementById ( "clear_search" ) ; var n = function ( ) { if ( e . value . length === 0 ) { t . classList . add ( "empty" ) } else { t . classList . remove ( "empty" ) } } ; n ( ) ; t . addEventListener ( "click" , function ( ) { e . value = "" ; e . focus ( ) ; n ( ) } ) ; e . addEventListener ( "keyup" , n , false ) } n . ready ( function ( ) { a = i . getElementById ( o ) ; function e ( e ) { if ( r ) { s ( a ) ; r = false } else { } } if ( a !== null ) { u ( a ) ; if ( n . autocompleter ) { n . autocomplete = AutoComplete . call ( t , { Url : "./autocompleter" , EmptyMessage : n . translations . no _item _found , HttpMethod : n . method , HttpHeaders : { "Content-type" : "application/x-www-form-urlencoded" , "X-Requested-With" : "XMLHttpRequest" } , MinChars : 4 , Delay : 300 } , "#" + o ) ; t . addEventListener ( "resize" , function ( ) { var e = new CustomEvent ( "position" ) ; a . dispatchEvent ( e ) } ) } a . addEventListener ( "focus" , e , false ) ; a . focus ( ) } if ( a !== null && n . search _on _category _select ) { i . querySelector ( ".help" ) . className = "invisible" ; n . on ( "#categories input" , "change" , function ( e ) { var t , n = i . querySelectorAll ( '#categories input[type="checkbox"]' ) ; for ( t = 0 ; t < n . length ; t ++ ) { if ( n [ t ] !== this && n [ t ] . checked ) { n [ t ] . click ( ) } } if ( ! this . checked ) { this . click ( ) } l ( ) ; return false } ) ; n . on ( i . getElementById ( "time_range" ) , "change" , l ) ; n . on ( i . getElementById ( "language" ) , "change" , l ) } } ) } ) ( window , document , window . searx ) ;