mirror of https://github.com/kiwix/libkiwix.git
Introduce buildQueryData helper in SearchRenderer
This commit is contained in:
parent
bbdde93f49
commit
f0dd34b6db
|
@ -75,6 +75,9 @@ class SearchRenderer
|
|||
|
||||
~SearchRenderer();
|
||||
|
||||
/**
|
||||
* Set the search pattern used to do the search
|
||||
*/
|
||||
void setSearchPattern(const std::string& pattern);
|
||||
|
||||
/**
|
||||
|
|
|
@ -58,7 +58,7 @@ SearchRenderer::SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, Lib
|
|||
mp_nameMapper(mapper),
|
||||
mp_library(library),
|
||||
protocolPrefix("zim://"),
|
||||
searchProtocolPrefix("search://?"),
|
||||
searchProtocolPrefix("search://"),
|
||||
estimatedResultCount(estimatedResultCount),
|
||||
resultStart(start)
|
||||
{}
|
||||
|
@ -68,12 +68,12 @@ SearchRenderer::~SearchRenderer() = default;
|
|||
|
||||
void SearchRenderer::setSearchPattern(const std::string& pattern)
|
||||
{
|
||||
this->searchPattern = pattern;
|
||||
searchPattern = pattern;
|
||||
}
|
||||
|
||||
void SearchRenderer::setSearchContent(const std::string& name)
|
||||
void SearchRenderer::setSearchContent(const std::string& content)
|
||||
{
|
||||
this->searchContent = name;
|
||||
searchContent = content;
|
||||
}
|
||||
|
||||
void SearchRenderer::setProtocolPrefix(const std::string& prefix)
|
||||
|
@ -86,6 +86,21 @@ void SearchRenderer::setSearchProtocolPrefix(const std::string& prefix)
|
|||
this->searchProtocolPrefix = prefix;
|
||||
}
|
||||
|
||||
kainjow::mustache::data buildQueryData
|
||||
(
|
||||
const std::string& searchProtocolPrefix,
|
||||
const std::string& pattern,
|
||||
const std::string& searchContent
|
||||
) {
|
||||
kainjow::mustache::data query;
|
||||
query.set("pattern", kiwix::encodeDiples(pattern));
|
||||
std::ostringstream ss;
|
||||
ss << searchProtocolPrefix << "?pattern=" << urlEncode(pattern, true);
|
||||
ss << "&content=" << urlEncode(searchContent, true);
|
||||
query.set("unpaginatedQuery", ss.str());
|
||||
return query;
|
||||
}
|
||||
|
||||
kainjow::mustache::data buildPagination(
|
||||
unsigned int pageLength,
|
||||
unsigned int resultsCount,
|
||||
|
@ -181,6 +196,14 @@ std::string SearchRenderer::getHtml()
|
|||
|
||||
auto resultEnd = min(resultStart+pageLength, estimatedResultCount);
|
||||
|
||||
kainjow::mustache::data query = buildQueryData(
|
||||
searchProtocolPrefix,
|
||||
searchPattern,
|
||||
searchContent
|
||||
);
|
||||
|
||||
|
||||
|
||||
std::string template_str = RESOURCE::templates::search_result_html;
|
||||
kainjow::mustache::mustache tmpl(template_str);
|
||||
|
||||
|
@ -188,14 +211,11 @@ std::string SearchRenderer::getHtml()
|
|||
allData.set("results", results);
|
||||
allData.set("hasResults", estimatedResultCount != 0);
|
||||
allData.set("count", kiwix::beautifyInteger(estimatedResultCount));
|
||||
allData.set("searchPattern", kiwix::encodeDiples(this->searchPattern));
|
||||
allData.set("searchPatternEncoded", urlEncode(this->searchPattern));
|
||||
allData.set("resultStart", to_string(resultStart + 1));
|
||||
allData.set("resultEnd", to_string(resultEnd));
|
||||
allData.set("protocolPrefix", this->protocolPrefix);
|
||||
allData.set("searchProtocolPrefix", this->searchProtocolPrefix);
|
||||
allData.set("contentId", this->searchContent);
|
||||
allData.set("pagination", pagination);
|
||||
allData.set("query", query);
|
||||
|
||||
std::stringstream ss;
|
||||
tmpl.render(allData, [&ss](const std::string& str) { ss << str; });
|
||||
|
|
|
@ -665,7 +665,7 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
|||
renderer.setSearchPattern(searchInfo.pattern);
|
||||
renderer.setSearchContent(searchInfo.bookName);
|
||||
renderer.setProtocolPrefix(m_root + "/");
|
||||
renderer.setSearchProtocolPrefix(m_root + "/search?");
|
||||
renderer.setSearchProtocolPrefix(m_root + "/search");
|
||||
renderer.setPageLength(pageLength);
|
||||
auto response = ContentResponse::build(*this, renderer.getHtml(), "text/html; charset=utf-8");
|
||||
response->set_taskbar(searchInfo.bookName, archive.get());
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
}
|
||||
|
||||
</style>
|
||||
<title>Search: {{searchPattern}}</title>
|
||||
<title>Search: {{query.pattern}}</title>
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<div class="header">
|
||||
|
@ -113,11 +113,11 @@
|
|||
</b> of <b>
|
||||
{{count}}
|
||||
</b> for <b>
|
||||
"{{{searchPattern}}}"
|
||||
"{{{query.pattern}}}"
|
||||
</b>
|
||||
{{/hasResults}}
|
||||
{{^hasResults}}
|
||||
No results were found for <b>"{{{searchPattern}}}"</b>
|
||||
No results were found for <b>"{{{query.pattern}}}"</b>
|
||||
{{/hasResults}}
|
||||
</div>
|
||||
|
||||
|
@ -148,7 +148,7 @@
|
|||
{{#pagination.pages}}
|
||||
<li>
|
||||
<a {{#current}}class="selected"{{/current}}
|
||||
href="{{searchProtocolPrefix}}pattern={{searchPatternEncoded}}{{#contentId}}&content={{.}}{{/contentId}}&start={{start}}&pageLength={{pagination.itemsPerPage}}">
|
||||
href="{{{query.unpaginatedQuery}}}&start={{start}}&pageLength={{pagination.itemsPerPage}}">
|
||||
{{label}}
|
||||
</a>
|
||||
</li>
|
||||
|
|
Loading…
Reference in New Issue