mirror of https://github.com/kiwix/libkiwix.git
Merge pull request #490 from soumyankar/404ContentHomeButton
404 content home button
This commit is contained in:
commit
a92e9d8756
|
@ -253,7 +253,7 @@ std::unique_ptr<Response> InternalServer::handle_request(const RequestContext& r
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (! request.is_valid_url())
|
if (! request.is_valid_url())
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
|
|
||||||
const ETag etag = get_matching_if_none_match_etag(request);
|
const ETag etag = get_matching_if_none_match_etag(request);
|
||||||
if ( etag )
|
if ( etag )
|
||||||
|
@ -335,11 +335,11 @@ std::unique_ptr<Response> InternalServer::handle_meta(const RequestContext& requ
|
||||||
meta_name = request.get_argument("name");
|
meta_name = request.get_argument("name");
|
||||||
reader = mp_library->getReaderById(bookId);
|
reader = mp_library->getReaderById(bookId);
|
||||||
} catch (const std::out_of_range& e) {
|
} catch (const std::out_of_range& e) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader == nullptr) {
|
if (reader == nullptr) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string content;
|
std::string content;
|
||||||
|
@ -364,7 +364,7 @@ std::unique_ptr<Response> InternalServer::handle_meta(const RequestContext& requ
|
||||||
} else if (meta_name == "favicon") {
|
} else if (meta_name == "favicon") {
|
||||||
reader->getFavicon(content, mimeType);
|
reader->getFavicon(content, mimeType);
|
||||||
} else {
|
} else {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto response = ContentResponse::build(*this, content, mimeType);
|
auto response = ContentResponse::build(*this, content, mimeType);
|
||||||
|
@ -393,7 +393,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
|
||||||
term = request.get_argument("term");
|
term = request.get_argument("term");
|
||||||
reader = mp_library->getReaderById(bookId);
|
reader = mp_library->getReaderById(bookId);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_verbose.load()) {
|
if (m_verbose.load()) {
|
||||||
|
@ -457,7 +457,7 @@ std::unique_ptr<Response> InternalServer::handle_skin(const RequestContext& requ
|
||||||
response->set_cacheable();
|
response->set_cacheable();
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
} catch (const ResourceNotFound& e) {
|
} catch (const ResourceNotFound& e) {
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,18 +577,18 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
|
||||||
bookId = mp_nameMapper->getIdForName(bookName);
|
bookId = mp_nameMapper->getIdForName(bookName);
|
||||||
reader = mp_library->getReaderById(bookId);
|
reader = mp_library->getReaderById(bookId);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reader == nullptr) {
|
if (reader == nullptr) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto entry = reader->getRandomPage();
|
auto entry = reader->getRandomPage();
|
||||||
return build_redirect(bookName, entry.getFinalEntry());
|
return build_redirect(bookName, entry.getFinalEntry());
|
||||||
} catch(kiwix::NoEntry& e) {
|
} catch(kiwix::NoEntry& e) {
|
||||||
return Response::build_404(*this, request, bookName);
|
return Response::build_404(*this, request, bookName, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,7 +600,7 @@ std::unique_ptr<Response> InternalServer::handle_captured_external(const Request
|
||||||
} catch (const std::out_of_range& e) {}
|
} catch (const std::out_of_range& e) {}
|
||||||
|
|
||||||
if (source.empty())
|
if (source.empty())
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
|
|
||||||
auto data = get_default_data();
|
auto data = get_default_data();
|
||||||
data.set("source", source);
|
data.set("source", source);
|
||||||
|
@ -619,7 +619,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
host = request.get_header("Host");
|
host = request.get_header("Host");
|
||||||
url = request.get_url_part(1);
|
url = request.get_url_part(1);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "v2") {
|
if (url == "v2") {
|
||||||
|
@ -627,7 +627,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url != "searchdescription.xml" && url != "root.xml" && url != "search") {
|
if (url != "searchdescription.xml" && url != "root.xml" && url != "search") {
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "searchdescription.xml") {
|
if (url == "searchdescription.xml") {
|
||||||
|
@ -770,7 +770,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
|
||||||
std::string searchURL = m_root+"/search?pattern="+pattern; // Make a full search on the entire library.
|
std::string searchURL = m_root+"/search?pattern="+pattern; // Make a full search on the entire library.
|
||||||
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
|
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
|
||||||
|
|
||||||
return Response::build_404(*this, request, bookName, details);
|
return Response::build_404(*this, request, bookName, "", details);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto urlStr = request.get_url().substr(bookName.size()+1);
|
auto urlStr = request.get_url().substr(bookName.size()+1);
|
||||||
|
@ -803,7 +803,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
|
||||||
std::string searchURL = m_root+"/search?content="+bookName+"&pattern="+pattern; // Make a search on this specific book only.
|
std::string searchURL = m_root+"/search?content="+bookName+"&pattern="+pattern; // Make a search on this specific book only.
|
||||||
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
|
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
|
||||||
|
|
||||||
return Response::build_404(*this, request, bookName, details);
|
return Response::build_404(*this, request, bookName, reader->getTitle(), details);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
|
||||||
try {
|
try {
|
||||||
url = request.get_url_part(2);
|
url = request.get_url_part(2);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "root.xml") {
|
if (url == "root.xml") {
|
||||||
|
@ -60,7 +60,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
|
||||||
} else if (url == "categories") {
|
} else if (url == "categories") {
|
||||||
return handle_catalog_v2_categories(request);
|
return handle_catalog_v2_categories(request);
|
||||||
} else {
|
} else {
|
||||||
return Response::build_404(*this, request, "");
|
return Response::build_404(*this, request, "", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ std::unique_ptr<Response> Response::build_304(const InternalServer& server, cons
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Response> Response::build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& details)
|
std::unique_ptr<Response> Response::build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details)
|
||||||
{
|
{
|
||||||
MustacheData results;
|
MustacheData results;
|
||||||
results.set("url", request.get_full_url());
|
results.set("url", request.get_full_url());
|
||||||
|
@ -91,7 +91,7 @@ std::unique_ptr<Response> Response::build_404(const InternalServer& server, cons
|
||||||
|
|
||||||
auto response = ContentResponse::build(server, RESOURCE::templates::_404_html, results, "text/html");
|
auto response = ContentResponse::build(server, RESOURCE::templates::_404_html, results, "text/html");
|
||||||
response->set_code(MHD_HTTP_NOT_FOUND);
|
response->set_code(MHD_HTTP_NOT_FOUND);
|
||||||
response->set_taskbar(bookName, "");
|
response->set_taskbar(bookName, bookTitle);
|
||||||
|
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ void ContentResponse::introduce_taskbar()
|
||||||
kainjow::mustache::data data;
|
kainjow::mustache::data data;
|
||||||
data.set("root", m_root);
|
data.set("root", m_root);
|
||||||
data.set("content", m_bookName);
|
data.set("content", m_bookName);
|
||||||
data.set("hascontent", !m_bookName.empty());
|
data.set("hascontent", (!m_bookName.empty() && !m_bookTitle.empty()));
|
||||||
data.set("title", m_bookTitle);
|
data.set("title", m_bookTitle);
|
||||||
data.set("withlibrarybutton", m_withLibraryButton);
|
data.set("withlibrarybutton", m_withLibraryButton);
|
||||||
auto head_content = render_template(RESOURCE::templates::head_taskbar_html, data);
|
auto head_content = render_template(RESOURCE::templates::head_taskbar_html, data);
|
||||||
|
|
|
@ -47,7 +47,7 @@ class Response {
|
||||||
|
|
||||||
static std::unique_ptr<Response> build(const InternalServer& server);
|
static std::unique_ptr<Response> build(const InternalServer& server);
|
||||||
static std::unique_ptr<Response> build_304(const InternalServer& server, const ETag& etag);
|
static std::unique_ptr<Response> build_304(const InternalServer& server, const ETag& etag);
|
||||||
static std::unique_ptr<Response> build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& details="");
|
static std::unique_ptr<Response> build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details="");
|
||||||
static std::unique_ptr<Response> build_416(const InternalServer& server, size_t resourceLength);
|
static std::unique_ptr<Response> build_416(const InternalServer& server, size_t resourceLength);
|
||||||
static std::unique_ptr<Response> build_500(const InternalServer& server, const std::string& msg);
|
static std::unique_ptr<Response> build_500(const InternalServer& server, const std::string& msg);
|
||||||
static std::unique_ptr<Response> build_redirect(const InternalServer& server, const std::string& redirectUrl);
|
static std::unique_ptr<Response> build_redirect(const InternalServer& server, const std::string& redirectUrl);
|
||||||
|
|
|
@ -8,18 +8,18 @@
|
||||||
<input autocomplete="off" class="ui-autocomplete-input" id="kiwixsearchbox" name="pattern" type="text">
|
<input autocomplete="off" class="ui-autocomplete-input" id="kiwixsearchbox" name="pattern" type="text">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{{#hascontent}}
|
|
||||||
<input type="checkbox" id="kiwix_button_show_toggle">
|
<input type="checkbox" id="kiwix_button_show_toggle">
|
||||||
<label for="kiwix_button_show_toggle"><img src="{{root}}/skin/caret.png" alt=""></label>
|
<label for="kiwix_button_show_toggle"><img src="{{root}}/skin/caret.png" alt=""></label>
|
||||||
<div class="kiwix_button_cont">
|
<div class="kiwix_button_cont">
|
||||||
{{#withlibrarybutton}}
|
{{#withlibrarybutton}}
|
||||||
<a id="kiwix_serve_taskbar_library_button" href="{{root}}/"><button>🏠</button></a>
|
<a id="kiwix_serve_taskbar_library_button" href="{{root}}/"><button>🏠</button></a>
|
||||||
{{/withlibrarybutton}}
|
{{/withlibrarybutton}}
|
||||||
|
{{#hascontent}}
|
||||||
<a id="kiwix_serve_taskbar_home_button" href="{{root}}/{{content}}/"><button>{{title}}</button></a>
|
<a id="kiwix_serve_taskbar_home_button" href="{{root}}/{{content}}/"><button>{{title}}</button></a>
|
||||||
<a id="kiwix_serve_taskbar_random_button"
|
<a id="kiwix_serve_taskbar_random_button"
|
||||||
href="{{root}}/random?content={{#urlencoded}}{{{content}}}{{/urlencoded}}"><button>🎲</button></a>
|
href="{{root}}/random?content={{#urlencoded}}{{{content}}}{{/urlencoded}}"><button>🎲</button></a>
|
||||||
|
{{/hascontent}}
|
||||||
</div>
|
</div>
|
||||||
{{/hascontent}}
|
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
Loading…
Reference in New Issue