Add widget endpoint

Adds an endpoint /widget to provide kiwix serve widget.
This commit is contained in:
Nikhil Tanwar 2022-07-10 14:59:40 +05:30
parent 489dfc1123
commit efe42c9bbe
5 changed files with 76 additions and 0 deletions

View File

@ -577,6 +577,9 @@ std::unique_ptr<Response> InternalServer::handle_request(const RequestContext& r
if (isEndpointUrl(url, "catch")) if (isEndpointUrl(url, "catch"))
return handle_catch(request); return handle_catch(request);
if (isEndpointUrl(url, "widget"))
return handle_widget(request);
std::string contentUrl = m_root + "/content" + url; std::string contentUrl = m_root + "/content" + url;
const std::string query = request.get_query(); const std::string query = request.get_query();
if ( ! query.empty() ) if ( ! query.empty() )
@ -866,6 +869,11 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
} }
} }
std::unique_ptr<Response> InternalServer::handle_widget(const RequestContext& request)
{
return ContentResponse::build(*this, RESOURCE::templates::widget_html, get_default_data(), "text/html; charset=utf-8", true);
}
std::unique_ptr<Response> InternalServer::handle_captured_external(const RequestContext& request) std::unique_ptr<Response> InternalServer::handle_captured_external(const RequestContext& request)
{ {
std::string source = ""; std::string source = "";

View File

@ -143,6 +143,7 @@ class InternalServer {
std::unique_ptr<Response> handle_content(const RequestContext& request); std::unique_ptr<Response> handle_content(const RequestContext& request);
std::unique_ptr<Response> handle_raw(const RequestContext& request); std::unique_ptr<Response> handle_raw(const RequestContext& request);
std::unique_ptr<Response> handle_locally_customized_resource(const RequestContext& request); std::unique_ptr<Response> handle_locally_customized_resource(const RequestContext& request);
std::unique_ptr<Response> handle_widget(const RequestContext& request);
std::vector<std::string> search_catalog(const RequestContext& request, std::vector<std::string> search_catalog(const RequestContext& request,
kiwix::OPDSDumper& opdsDumper); kiwix::OPDSDumper& opdsDumper);

View File

@ -9,6 +9,7 @@ skin/iso6391To3.js
skin/isotope.pkgd.min.js skin/isotope.pkgd.min.js
skin/index.js skin/index.js
skin/autoComplete.min.js skin/autoComplete.min.js
skin/widget.js
skin/taskbar.css skin/taskbar.css
skin/index.css skin/index.css
skin/fonts/Poppins.ttf skin/fonts/Poppins.ttf
@ -20,6 +21,7 @@ templates/search_result.xml
templates/error.html templates/error.html
templates/error.xml templates/error.xml
templates/index.html templates/index.html
templates/widget.html
templates/suggestion.json templates/suggestion.json
templates/head_taskbar.html templates/head_taskbar.html
templates/taskbar_part.html templates/taskbar_part.html

1
static/skin/widget.js Normal file
View File

@ -0,0 +1 @@
// To be updated

View File

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Welcome to Kiwix Server</title>
<link
type="text/css"
href="{{root}}/skin/index.css?KIWIXCACHEID"
rel="Stylesheet"
/>
<style>
@font-face {
font-family: "poppins";
src: url("{{root}}/skin/fonts/Poppins.ttf?KIWIXCACHEID") format("truetype");
}
@font-face {
font-family: "roboto";
src: url("{{root}}/skin/fonts/Roboto.ttf?KIWIXCACHEID") format("truetype");
}
</style>
<script src="{{root}}/skin/isotope.pkgd.min.js?KIWIXCACHEID" defer></script>
<script src="{{root}}/skin/iso6391To3.js?KIWIXCACHEID"></script>
<script type="text/javascript" src="{{root}}/skin/index.js?KIWIXCACHEID" defer></script>
<script type="text/javascript" src="{{root}}/skin/widget.js?KIWIXCACHEID" defer></script>
</head>
<body>
<div class='kiwixNav'>
<div class="kiwixNav__filters">
<div class="kiwixNav__select">
<select name="lang" id="languageFilter" class='kiwixNav__kiwixFilter filter'>
<option value="" selected>All languages</option>
</select>
</div>
<div class="kiwixNav__select">
<select name="category" id="categoryFilter" class='kiwixNav__kiwixFilter filter'>
<option value="" selected>All categories</option>
</select>
</div>
</div>
<form id='kiwixSearchForm' class='kiwixNav__SearchForm'>
<input type="text" name="q" placeholder="Search" id="searchFilter" class='kiwixSearch filter'>
<span class="kiwixButton tagFilterLabel"></span>
<input type="submit" class="kiwixButton kiwixButtonHover" value="Search"/>
</form>
</div>
<div class="kiwixHomeBody">
<div class="book__list">
<h3 class="kiwixHomeBody__results"></h3>
</div>
<div id="fadeOut" class="fadeOut"></div>
</div>
<div class="loader" style="position: absolute; top: 50%"><div class="loader-spinner"></div></div>
<div id="kiwixfooter" class="kiwixfooter">Powered by&nbsp;<a href="https://kiwix.org">Kiwix</a></div>
</body>
<script>
function closeModal() {
for(modal of document.getElementsByClassName('modal-wrapper')) {
modal.remove();
}
}
</script>
</html>