From a48e2e6f065137b5a614b6c850a6b1ac1ae24b26 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Thu, 16 Feb 2023 02:19:15 +0530 Subject: [PATCH] Add search form for /nojs endpoint Adds an html form to search books by the q= parameter --- include/html_dumper.h | 2 +- src/html_dumper.cpp | 10 +++++++--- src/server/internalServer.cpp | 4 ++-- static/templates/no_js_library_page.html | 6 ++++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/html_dumper.h b/include/html_dumper.h index fd09659db..80eebd8e1 100644 --- a/include/html_dumper.h +++ b/include/html_dumper.h @@ -42,7 +42,7 @@ class HTMLDumper : public LibraryDumper * * @return HTML content */ - std::string dumpPlainHTML() const; + std::string dumpPlainHTML(kiwix::Filter filter) const; }; } diff --git a/src/html_dumper.cpp b/src/html_dumper.cpp index 27be874ab..6cef6b6b9 100644 --- a/src/html_dumper.cpp +++ b/src/html_dumper.cpp @@ -33,10 +33,13 @@ kainjow::mustache::list getTagList(std::string tags) } // unnamed namespace -std::string HTMLDumper::dumpPlainHTML() const +std::string HTMLDumper::dumpPlainHTML(kiwix::Filter filter) const { 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 bookTitle = bookObj.getTitle(); std::string contentId = ""; @@ -65,7 +68,8 @@ std::string HTMLDumper::dumpPlainHTML() const RESOURCE::templates::no_js_library_page_html, kainjow::mustache::object{ {"root", rootLocation}, - {"books", booksData } + {"books", booksData }, + {"searchQuery", searchQuery} } ); } diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index 32aa7752f..060d41860 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -783,7 +783,8 @@ std::unique_ptr InternalServer::handle_no_js(const RequestContext& req std::string content; 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")) { try { const auto bookId = mp_nameMapper->getIdForName(urlParts[2]); @@ -797,7 +798,6 @@ std::unique_ptr InternalServer::handle_no_js(const RequestContext& req + urlNotFoundMsg; } - return ContentResponse::build( *this, content, diff --git a/static/templates/no_js_library_page.html b/static/templates/no_js_library_page.html index 21671cc83..6a43185e5 100644 --- a/static/templates/no_js_library_page.html +++ b/static/templates/no_js_library_page.html @@ -61,6 +61,12 @@ +
+
+ + +
+
{{#books}}