diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index c2ccfd742..3e48ad118 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -415,7 +415,7 @@ std::unique_ptr InternalServer::handle_suggest(const RequestContext& r for(auto& suggestion:suggestions) { MustacheData result; result.set("label", suggestion[0]); - result.set("value", suggestion[0]); + result.set("url", bookName + "/" + suggestion[1]); result.set("first", first); first = false; results.push_back(result); @@ -427,7 +427,7 @@ std::unique_ptr InternalServer::handle_suggest(const RequestContext& r if (reader->hasFulltextIndex()) { MustacheData result; result.set("label", "containing '" + term + "'..."); - result.set("value", term + " "); + result.set("url", "search?content=" + bookName + "&pattern=" + kiwix::urlEncode(term, true) + "+"); result.set("first", first); results.push_back(result); } diff --git a/static/skin/taskbar.js b/static/skin/taskbar.js index edc01b7f2..d88b53584 100644 --- a/static/skin/taskbar.js +++ b/static/skin/taskbar.js @@ -20,9 +20,15 @@ function htmlDecode(input) { } }, + focus: function(event, ui) { + $( "#kiwixsearchbox" ).val(ui.item.label); + return false; + }, + select: function(event, ui) { - $( "#kiwixsearchbox" ).val(ui.item.value); - $( "#kiwixsearchform" ).submit(); + window.location.href = `${root}/${ui.item.value}`; + $( "#kiwixsearchbox" ).val(ui.item.label); + return false; }, }); diff --git a/static/templates/suggestion.json b/static/templates/suggestion.json index cedb609a3..76254dba6 100644 --- a/static/templates/suggestion.json +++ b/static/templates/suggestion.json @@ -1,7 +1,9 @@ [ {{#suggestions}}{{^first}},{{/first}} { - "value" : "{{value}}", + {{! HTML escaping is not disabled for the URL on purpose - otherwise invalid JSON may be produced for a URL containing a double quote. + HTML decoding is performed in the front-end by ../skin/taskbar.js }} + "value" : "{{url}}", "label" : "{{label}}" }{{/suggestions}} ]