mirror of
https://github.com/kiwix/libkiwix.git
synced 2025-09-12 16:47:20 -04:00
Enabled smart mode of suggestions
This commit is contained in:
parent
222e4396c7
commit
f8fc60ed2f
@ -775,6 +775,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto queryString = request.get_optional_param("term", std::string());
|
const auto queryString = request.get_optional_param("term", std::string());
|
||||||
|
const auto mode = request.get_optional_param("mode", std::string());
|
||||||
const auto start = request.get_optional_param<unsigned int>("start", 0);
|
const auto start = request.get_optional_param<unsigned int>("start", 0);
|
||||||
unsigned int count = request.get_optional_param<unsigned int>("count", 10);
|
unsigned int count = request.get_optional_param<unsigned int>("count", 10);
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
@ -793,12 +794,16 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
|
|||||||
);
|
);
|
||||||
const auto lock(searcher->getLock());
|
const auto lock(searcher->getLock());
|
||||||
auto search = searcher->suggest(queryString);
|
auto search = searcher->suggest(queryString);
|
||||||
auto srs = search.getResults(start, count);
|
|
||||||
|
|
||||||
for(auto& suggestion: srs) {
|
if ( start == 0 && mode == "smart") {
|
||||||
|
for(const auto& suggestion: search.getSmartSuggestions(count)) {
|
||||||
results.add(suggestion);
|
results.add(suggestion);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for(const auto& suggestion: search.getResults(start, count)) {
|
||||||
|
results.add(suggestion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Propose the fulltext search if possible */
|
/* Propose the fulltext search if possible */
|
||||||
if (archive->hasFulltextIndex()) {
|
if (archive->hasFulltextIndex()) {
|
||||||
|
@ -384,9 +384,13 @@ void kiwix::Suggestions::add(const zim::SuggestionItem& suggestion)
|
|||||||
: suggestion.getTitle();
|
: suggestion.getTitle();
|
||||||
|
|
||||||
result.set("label", escapeForJSON(label, DONT_ESCAPE_QUOTE));
|
result.set("label", escapeForJSON(label, DONT_ESCAPE_QUOTE));
|
||||||
result.set("value", escapeForJSON(suggestion.getTitle(), DONT_ESCAPE_QUOTE));
|
if ( suggestion.getPath().empty() ) {
|
||||||
|
result.set("kind", "modifiedquery");
|
||||||
|
} else {
|
||||||
result.set("kind", "path");
|
result.set("kind", "path");
|
||||||
|
result.set("value", escapeForJSON(suggestion.getTitle(), DONT_ESCAPE_QUOTE));
|
||||||
result.set("path", escapeForJSON(suggestion.getPath(), DONT_ESCAPE_QUOTE));
|
result.set("path", escapeForJSON(suggestion.getPath(), DONT_ESCAPE_QUOTE));
|
||||||
|
}
|
||||||
result.set("first", m_data.is_empty_list());
|
result.set("first", m_data.is_empty_list());
|
||||||
m_data.push_back(result);
|
m_data.push_back(result);
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ function suggestionsApiURL()
|
|||||||
{
|
{
|
||||||
const uriEncodedBookName = encodeURIComponent(currentBook);
|
const uriEncodedBookName = encodeURIComponent(currentBook);
|
||||||
const userLang = viewerState.uiLanguage;
|
const userLang = viewerState.uiLanguage;
|
||||||
return `${root}/suggest?userlang=${userLang}&content=${uriEncodedBookName}`;
|
return `${root}/suggest?userlang=${userLang}&mode=smart&content=${uriEncodedBookName}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTitle(element, text) {
|
function setTitle(element, text) {
|
||||||
@ -186,9 +186,13 @@ function closeSuggestions() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setSearchQuery(text) {
|
||||||
|
document.getElementById("kiwixsearchbox").value = text;
|
||||||
|
}
|
||||||
|
|
||||||
function updateSearchBoxForLocationChange() {
|
function updateSearchBoxForLocationChange() {
|
||||||
closeSuggestions();
|
closeSuggestions();
|
||||||
document.getElementById("kiwixsearchbox").value = getSearchPattern();
|
setSearchQuery(getSearchPattern());
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateSearchBoxForBookChange() {
|
function updateSearchBoxForBookChange() {
|
||||||
@ -464,7 +468,8 @@ function setupSuggestions() {
|
|||||||
resultItem: {
|
resultItem: {
|
||||||
element: (item, data) => {
|
element: (item, data) => {
|
||||||
const uriEncodedBookName = encodeURIComponent(currentBook);
|
const uriEncodedBookName = encodeURIComponent(currentBook);
|
||||||
let url;
|
const linkText = htmlDecode(data.value.label);
|
||||||
|
let url, modifiedQuery;
|
||||||
if (data.value.kind == "path") {
|
if (data.value.kind == "path") {
|
||||||
// The double quote and backslash symbols are included in the list
|
// The double quote and backslash symbols are included in the list
|
||||||
// of special symbols to URI-encode so that the resulting URL can
|
// of special symbols to URI-encode so that the resulting URL can
|
||||||
@ -473,15 +478,18 @@ function setupSuggestions() {
|
|||||||
const path = htmlDecode(data.value.path);
|
const path = htmlDecode(data.value.path);
|
||||||
const quasiUriEncodedPath = quasiUriEncode(path, '#?"\\');
|
const quasiUriEncodedPath = quasiUriEncode(path, '#?"\\');
|
||||||
url = `/content/${uriEncodedBookName}/${quasiUriEncodedPath}`;
|
url = `/content/${uriEncodedBookName}/${quasiUriEncodedPath}`;
|
||||||
} else {
|
} else if (data.value.kind == "pattern") {
|
||||||
const pattern = encodeURIComponent(htmlDecode(data.value.value));
|
const pattern = encodeURIComponent(htmlDecode(data.value.value));
|
||||||
url = `/search?content=${uriEncodedBookName}&pattern=${pattern}`;
|
url = `/search?content=${uriEncodedBookName}&pattern=${pattern}`;
|
||||||
|
} else { // data.value.kind == "modifiedquery"
|
||||||
|
modifiedQuery = htmlDecode(linkText);
|
||||||
}
|
}
|
||||||
// url can't contain any double quote and/or backslash symbols
|
// url can't contain any double quote and/or backslash symbols
|
||||||
// since they should have been URI-encoded. Therefore putting it
|
// since they should have been URI-encoded. Therefore putting it
|
||||||
// inside double quotes should result in valid javascript.
|
// inside double quotes should result in valid javascript.
|
||||||
const jsAction = `gotoUrl("${url}")`;
|
const jsAction = url
|
||||||
const linkText = htmlDecode(data.value.label);
|
? `gotoUrl("${url}")`
|
||||||
|
: `setSearchQuery("${modifiedQuery}")`;
|
||||||
item.innerHTML = makeJSLink(jsAction, linkText, 'class="suggest"');
|
item.innerHTML = makeJSLink(jsAction, linkText, 'class="suggest"');
|
||||||
},
|
},
|
||||||
highlight: "autoComplete_highlight",
|
highlight: "autoComplete_highlight",
|
||||||
|
@ -77,7 +77,7 @@ const ResourceCollection resources200Compressible{
|
|||||||
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css" },
|
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css" },
|
||||||
{ STATIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css?cacheid=80d56607" },
|
{ STATIC_CONTENT, "/ROOT%23%3F/skin/taskbar.css?cacheid=80d56607" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/viewer.js" },
|
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/viewer.js" },
|
||||||
{ STATIC_CONTENT, "/ROOT%23%3F/skin/viewer.js?cacheid=7f05bf6c" },
|
{ STATIC_CONTENT, "/ROOT%23%3F/skin/viewer.js?cacheid=f8c5f4bf" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf" },
|
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf" },
|
||||||
{ STATIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf?cacheid=af705837" },
|
{ STATIC_CONTENT, "/ROOT%23%3F/skin/fonts/Poppins.ttf?cacheid=af705837" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Roboto.ttf" },
|
{ DYNAMIC_CONTENT, "/ROOT%23%3F/skin/fonts/Roboto.ttf" },
|
||||||
@ -333,7 +333,7 @@ R"EXPECTEDRESULT( <link type="text/css" href="./skin/kiwix.css?cacheid=3948b8
|
|||||||
<script type="text/javascript" src="./skin/polyfills.js?cacheid=a0e0343d"></script>
|
<script type="text/javascript" src="./skin/polyfills.js?cacheid=a0e0343d"></script>
|
||||||
<script type="module" src="./skin/i18n.js?cacheid=e9a10ac1" defer></script>
|
<script type="module" src="./skin/i18n.js?cacheid=e9a10ac1" defer></script>
|
||||||
<script type="text/javascript" src="./skin/languages.js?cacheid=a83f0e13" defer></script>
|
<script type="text/javascript" src="./skin/languages.js?cacheid=a83f0e13" defer></script>
|
||||||
<script type="text/javascript" src="./skin/viewer.js?cacheid=7f05bf6c" defer></script>
|
<script type="text/javascript" src="./skin/viewer.js?cacheid=f8c5f4bf" defer></script>
|
||||||
<script type="text/javascript" src="./skin/autoComplete/autoComplete.min.js?cacheid=1191aaaf"></script>
|
<script type="text/javascript" src="./skin/autoComplete/autoComplete.min.js?cacheid=1191aaaf"></script>
|
||||||
const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032";
|
const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032";
|
||||||
<label for="kiwix_button_show_toggle"><img src="./skin/caret.png?cacheid=22b942b4" alt=""></label>
|
<label for="kiwix_button_show_toggle"><img src="./skin/caret.png?cacheid=22b942b4" alt=""></label>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user