Add search form for /nojs endpoint

Adds an html form to search books by the q= parameter
This commit is contained in:
Nikhil Tanwar 2023-02-16 02:19:15 +05:30
parent 0f7e11bd86
commit a48e2e6f06
4 changed files with 16 additions and 6 deletions

View File

@ -42,7 +42,7 @@ class HTMLDumper : public LibraryDumper
* *
* @return HTML content * @return HTML content
*/ */
std::string dumpPlainHTML() const; std::string dumpPlainHTML(kiwix::Filter filter) const;
}; };
} }

View File

@ -33,10 +33,13 @@ kainjow::mustache::list getTagList(std::string tags)
} // unnamed namespace } // unnamed namespace
std::string HTMLDumper::dumpPlainHTML() const std::string HTMLDumper::dumpPlainHTML(kiwix::Filter filter) const
{ {
kainjow::mustache::list booksData; kainjow::mustache::list booksData;
for ( const auto& bookId : library->getBooksIds() ) { const auto filteredBooks = library->filter(filter);
const auto searchQuery = filter.getQuery();
for ( const auto& bookId : filteredBooks ) {
const auto bookObj = library->getBookById(bookId); const auto bookObj = library->getBookById(bookId);
const auto bookTitle = bookObj.getTitle(); const auto bookTitle = bookObj.getTitle();
std::string contentId = ""; std::string contentId = "";
@ -65,7 +68,8 @@ std::string HTMLDumper::dumpPlainHTML() const
RESOURCE::templates::no_js_library_page_html, RESOURCE::templates::no_js_library_page_html,
kainjow::mustache::object{ kainjow::mustache::object{
{"root", rootLocation}, {"root", rootLocation},
{"books", booksData } {"books", booksData },
{"searchQuery", searchQuery}
} }
); );
} }

View File

@ -783,7 +783,8 @@ std::unique_ptr<Response> InternalServer::handle_no_js(const RequestContext& req
std::string content; std::string content;
if (urlParts.size() == 1) { if (urlParts.size() == 1) {
content = htmlDumper.dumpPlainHTML(); const auto filter = get_search_filter(request);
content = htmlDumper.dumpPlainHTML(filter);
} else if ((urlParts.size() == 3) && (urlParts[1] == "download")) { } else if ((urlParts.size() == 3) && (urlParts[1] == "download")) {
try { try {
const auto bookId = mp_nameMapper->getIdForName(urlParts[2]); const auto bookId = mp_nameMapper->getIdForName(urlParts[2]);
@ -797,7 +798,6 @@ std::unique_ptr<Response> InternalServer::handle_no_js(const RequestContext& req
+ urlNotFoundMsg; + urlNotFoundMsg;
} }
return ContentResponse::build( return ContentResponse::build(
*this, *this,
content, content,

View File

@ -61,6 +61,12 @@
</style> </style>
</head> </head>
<body> <body>
<div class='kiwixNav'>
<form id='kiwixSearchForm' class='kiwixNav__SearchForm' action="{{root}}/nojs">
<input type="text" name="q" placeholder="Search" id="searchFilter" class='kiwixSearch filter' value="{{searchQuery}}">
<input type="submit" class="kiwixButton kiwixButtonHover" value="Search"/>
</form>
</div>
<div class="kiwixHomeBody"> <div class="kiwixHomeBody">
<div class="book__list"> <div class="book__list">
{{#books}} {{#books}}