|  | @@ -68,6 +68,43 @@
 | 
	
		
			
				|  |  |          }, "#" + qinput_id);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +      /*
 | 
	
		
			
				|  |  | +        Monkey patch autocomplete.js to fix a bug
 | 
	
		
			
				|  |  | +        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.
 | 
	
		
			
				|  |  | +        See HTML specifications:
 | 
	
		
			
				|  |  | +        * HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer
 | 
	
		
			
				|  |  | +        * HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        autocomplete.js does not URL encode the name and values:
 | 
	
		
			
				|  |  | +        https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        The monkey patch overrides the compiled version of the ajax function.
 | 
	
		
			
				|  |  | +        See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158
 | 
	
		
			
				|  |  | +        The patch changes only the line 156 from
 | 
	
		
			
				|  |  | +          params.Request.send(params._QueryArg() + "=" + params._Pre());
 | 
	
		
			
				|  |  | +        to
 | 
	
		
			
				|  |  | +          params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre()));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Related to:
 | 
	
		
			
				|  |  | +        * https://github.com/autocompletejs/autocomplete.js/issues/78
 | 
	
		
			
				|  |  | +        * https://github.com/searxng/searxng/issues/1695
 | 
	
		
			
				|  |  | +       */
 | 
	
		
			
				|  |  | +      AutoComplete.prototype.ajax = function (params, request, timeout) {
 | 
	
		
			
				|  |  | +        if (timeout === void 0) { timeout = true; }
 | 
	
		
			
				|  |  | +        if (params.$AjaxTimer) {
 | 
	
		
			
				|  |  | +          window.clearTimeout(params.$AjaxTimer);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (timeout === true) {
 | 
	
		
			
				|  |  | +          params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          if (params.Request) {
 | 
	
		
			
				|  |  | +            params.Request.abort();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          params.Request = request;
 | 
	
		
			
				|  |  | +          params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre()));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |        if (!isMobile && document.querySelector('.index_endpoint')) {
 | 
	
		
			
				|  |  |          qinput.focus();
 | 
	
		
			
				|  |  |        }
 |