forked from zaclys/searxng
		
	Merge pull request #1706 from dalf/fix-autocomplete-post
Fix: autocomplete with the POST method: url encode the user query
This commit is contained in:
		
						commit
						8bdc6986a1
					
				
					 3 changed files with 40 additions and 3 deletions
				
			
		
							
								
								
									
										4
									
								
								searx/static/themes/simple/js/searxng.min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								searx/static/themes/simple/js/searxng.min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -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(); | ||||
|       } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Markus Heiser
						Markus Heiser