32 Commits
2.0.0 ... 2.1.0

Author SHA1 Message Date
Matthieu Gautier
d82f9e7d5e Merge pull request #312 from kiwix/new_version
New version 2.1.0
2019-07-31 14:33:54 +02:00
Matthieu Gautier
720a319d53 New version 2.1.0 2019-07-30 17:46:38 +02:00
Matthieu Gautier
2426c35547 Merge pull request #306 from kiwix/multiple-tags-api
search api accept multiple tags parameter
2019-07-30 17:32:27 +02:00
luddens
794f63e22b search api accept multiple tags parameter 2019-07-30 16:56:48 +02:00
Matthieu Gautier
79a64d5af3 Merge pull request #305 from kiwix/notag-parameter
add notag parameter to the api
2019-07-29 14:51:31 +02:00
luddens
2ef160bcad add notag parameter to the api
this parameter get a string that contains all tags to exclude separated by
a ";". The kiwix::Filter() is set with this rejected tags.
2019-07-25 15:17:42 +02:00
Kelson
817a5d4847 Merge pull request #311 from kiwix/tools-details
Infos about the tools
2019-07-21 15:58:08 +02:00
Kelson
2c3882671b Infos about the tools 2019-07-21 15:36:27 +02:00
Kelson
7e2c5bda03 Merge pull request #310 from kiwix/better-taskbar-padding
Increase a bit the taskbar padding
2019-07-13 07:19:40 +02:00
Kelson
59281bf496 Increase a bit the taskbar padding 2019-07-12 21:33:37 +02:00
Kelson
ee9ae0e81f Merge pull request #309 from kiwix/better-taskbar-padding
Better kiwix-serve content (because of taskbar) top-padding
2019-07-12 20:18:25 +02:00
Kelson
2dbe0a0016 Better kiwix-serve content (because of taskbar) top-padding 2019-07-12 20:14:00 +02:00
Kelson
64717c2124 Merge pull request #300 from kiwix/ISNIT0/server-toolbar
Make server toolbar auto-hide and collapse buttons into dropdown on small screens
2019-07-09 12:36:23 +02:00
Kelson
fc1eb3c282 Bump-up kiwix-tools version to 2.1.0 2019-07-09 12:31:25 +02:00
Kelson
e31c1cd9a3 Update Changelog 2019-07-09 12:31:22 +02:00
Joe Reeve
e897dd4e59 Update classes and ids to have Kiwix namespace 2019-07-09 12:24:57 +02:00
Joe Reeve
7db7d2a2ab Switch caret to image and move JS to separate file 2019-07-09 12:24:57 +02:00
Joe Reeve
5b612e67bd Fix a few bugs found in code review 2019-07-09 12:24:57 +02:00
Joe Reeve
df047588a9 fix kiwix-serve toolbar search icon on article pages 2019-07-09 12:24:57 +02:00
Joe Reeve
9dede26717 Search icon positioning fix for Firefox 2019-07-09 12:24:57 +02:00
Joe Reeve
a22ae3d467 👌 updates from pr review 2019-07-09 12:24:57 +02:00
Joe Reeve
ea93a8a195 Fix padding and search bug, update button toggle icon 2019-07-09 12:24:57 +02:00
Joe Reeve
0a7f375f3a Format taskbar.css 2019-07-09 12:24:57 +02:00
Joe Reeve
66c35b7b3e Fix alignment, improve search box appearance 2019-07-09 12:24:57 +02:00
Joe Reeve
bad7f2ddf1 Make server toolbar auto-hide and collapse buttons into dropdown on small screens 2019-07-09 12:24:57 +02:00
Matthieu Gautier
758014a5ba Merge pull request #304 from kiwix/int_retcode
Use integer to store the returnCode.
2019-07-01 11:24:22 +02:00
Matthieu Gautier
4fd961a761 Use integer to store the returnCode.
If we want to return `-1` we must use a integer, not a bool.
2019-06-27 19:15:41 +02:00
Matthieu Gautier
c063587a69 Merge pull request #303 from kiwix/no_unistd
Remove include of unistd.h
2019-06-27 18:49:13 +02:00
Matthieu Gautier
9b24676b02 Remove include of unistd.h
unistd.h is useless.
2019-06-27 18:20:22 +02:00
Matthieu Gautier
fc5572f495 Merge pull request #302 from kiwix/adapt_to_new_book_filter
Adapt kiwix-serve to the new api to filter library.
2019-06-27 09:55:50 +02:00
Matthieu Gautier
a1b3f46e4e Adapt kiwix-serve to the new api to filter library.
See kiwix/kiwix-lib#234
2019-06-26 17:38:35 +02:00
Kelson
e0177c4923 Create FUNDING.yml 2019-06-22 07:58:19 +02:00
16 changed files with 230 additions and 57 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: https://kiwix.org/support-us/

View File

@@ -1,3 +1,16 @@
kiwix-tools 2.1.0
=================
* Fix few compilation errors.
kiwix-serve
-----------
* Use new api to filter the library.
* Mobile friendly top bar.
* Add notag parameter to be able to exclude tags from the zim search.
kiwix-tools 2.0.0
=================

View File

@@ -1,7 +1,11 @@
Kiwix tools
===========
The Kiwix tools is a collection of Kiwix related command line tools.
The Kiwix tools is a collection of Kiwix related command line tools:
* kiwix-manage: Manage XML based library of ZIM files
* kiwix-read: Read ZIM file content
* kiwix-search: Fulltext search in ZIM files
* kiwix-serve: HTTP daemon serving ZIM files
Disclaimer
----------

View File

@@ -1,5 +1,5 @@
project('kiwix-tools', 'cpp',
version : '2.0.0',
version : '2.1.0',
license : 'GPL',
default_options: ['c_std=c11', 'cpp_std=c++11', 'werror=true'])
@@ -11,7 +11,7 @@ if static_linkage
endif
thread_dep = dependency('threads')
kiwixlib_dep = dependency('kiwix', version:'>=5.1.0', static:static_linkage)
kiwixlib_dep = dependency('kiwix', version:'>=5.2.0', static:static_linkage)
microhttpd_dep = dependency('libmicrohttpd', static:static_linkage)
z_dep = dependency('zlib', static:static_linkage)

View File

@@ -17,9 +17,6 @@
* MA 02110-1301, USA.
*/
#ifndef _WIN32
#include <unistd.h>
#endif
#include <getopt.h>
#include <kiwix/tools/stringTools.h>
#include <kiwix/manager.h>
@@ -94,7 +91,7 @@ void usage()
<< std::endl;
}
bool handle_show(kiwix::Library* library, const std::string& libraryPath,
int handle_show(kiwix::Library* library, const std::string& libraryPath,
int argc, char* argv[])
{
if (argc > 3 ) {
@@ -111,7 +108,7 @@ bool handle_show(kiwix::Library* library, const std::string& libraryPath,
return(0);
}
bool handle_add(kiwix::Library* library, const std::string& libraryPath,
int handle_add(kiwix::Library* library, const std::string& libraryPath,
int argc, char* argv[])
{
string zimPath;
@@ -120,7 +117,7 @@ bool handle_add(kiwix::Library* library, const std::string& libraryPath,
string origID = "";
int option_index = 0;
int c = 0;
bool resultCode = 0;
int resultCode = 0;
if (argc <= 3) {
std::cerr << "Path to zim file to add is missing in the command line" << std::endl;
@@ -184,12 +181,12 @@ bool handle_add(kiwix::Library* library, const std::string& libraryPath,
return(resultCode);
}
bool handle_remove(kiwix::Library* library, const std::string& libraryPath,
int handle_remove(kiwix::Library* library, const std::string& libraryPath,
int argc, char* argv[])
{
std::string bookId;
const unsigned int totalBookCount = library->getBookCount(true, true);
bool exitCode = 0;
int exitCode = 0;
if (argc <= 3) {
std::cerr << "BookId to remove missing in the command line" << std::endl;
@@ -247,7 +244,7 @@ int main(int argc, char** argv)
manager.readFile(libraryPath, false);
/* SHOW */
bool exitCode = 0;
int exitCode = 0;
switch (action) {
case SHOW:
exitCode = handle_show(&library, libraryPath, argc, argv);

View File

@@ -19,7 +19,6 @@
#include <getopt.h>
#include <kiwix/reader.h>
#include <unistd.h>
#include <map>
#include <string>

View File

@@ -20,7 +20,6 @@
#include <getopt.h>
#include <kiwix/reader.h>
#include <kiwix/searcher.h>
#include <unistd.h>
void usage()

View File

@@ -79,7 +79,6 @@ extern "C" {
#include <stdint.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#endif
#include "request_context.h"
@@ -694,12 +693,12 @@ static struct MHD_Response* handle_catalog(RequestContext* request)
opdsDumper.setTitle("All zims");
uuid = zim::Uuid::generate(host);
bookIdsToDump = library.listBooksIds(
kiwix::VALID|kiwix::LOCAL|kiwix::REMOTE);
bookIdsToDump = library.filter(kiwix::Filter().valid(true).local(true).remote(true));
} else if (url == "search") {
std::string query;
std::string language;
std::vector<std::string> tags;
std::vector<std::string> noTags;
size_t count(10);
size_t startIndex(0);
try {
@@ -715,18 +714,20 @@ static struct MHD_Response* handle_catalog(RequestContext* request)
startIndex = stoul(request->get_argument("start"));
} catch (...) {}
try {
tags.push_back(request->get_argument("tag"));
tags = kiwix::split(request->get_argument("notag"), ";");
} catch (...) {}
try {
noTags = kiwix::split(request->get_argument("notag"), ";");
} catch (...) {}
opdsDumper.setTitle("Search result for " + query);
uuid = zim::Uuid::generate();
bookIdsToDump = library.listBooksIds(
kiwix::VALID|kiwix::LOCAL|kiwix::REMOTE,
kiwix::UNSORTED,
query,
language,
"", // creator
"", // publisher
tags);
bookIdsToDump = library.filter(
kiwix::Filter().valid(true).local(true).remote(true)
.query(query)
.lang(language)
.acceptTags(tags)
.rejectTags(noTags)
);
auto totalResults = bookIdsToDump.size();
bookIdsToDump.erase(bookIdsToDump.begin(), bookIdsToDump.begin()+startIndex);
if (count>0 && bookIdsToDump.size() > count) {
@@ -1118,7 +1119,7 @@ int main(int argc, char** argv)
}
/* Instance the readers and searcher and build the corresponding maps */
vector<string> booksIds = library.listBooksIds(kiwix::LOCAL);
vector<string> booksIds = library.filter(kiwix::Filter().local(true));
globalSearcher = new kiwix::Searcher();
globalSearcher->setProtocolPrefix(rootLocation + "/");
globalSearcher->setSearchProtocolPrefix(rootLocation + "/" + "search?");

BIN
static/server/caret.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,13 +1,13 @@
<span class="kiwix">
<span id="kiwixtoolbar" class="ui-widget-header">
<div class="kiwix_centered">
<div class="kiwix_searchform">
<div class="kiwix_searchform" style="margin: auto auto;float: none;">
<form class="kiwixsearch" method="GET" action="__ROOT_LOCATION__/search" id="kiwixsearchform">
<label for="kiwixsearchbox" style="line-height: 30px;">&#x1f50d;</label>
<input autocomplete="off" class="ui-autocomplete-input" id="kiwixsearchbox" name="pattern" type="text">
<input type="submit" value="&#x1f50d;">
</form>
</div>
</div>
</span>
</span>
<div style="display: block; height: 5em;"></div>
<div style="display: block; height: 5em;"></div>

View File

@@ -40,6 +40,7 @@
}
.book__info { line-height: 18px; color: #777; font-weight: bold; font-size: 13px; }
</style>
<script type="text/javascript" src="__ROOT_LOCATION__/skin/taskbar.js" async></script>
</head>
<body class="kiwix">

View File

@@ -25,3 +25,4 @@
jk("html").addClass("cybook");
}
</script>
<script type="text/javascript" src="__ROOT_LOCATION__/skin/taskbar.js" async></script>

View File

@@ -19,6 +19,8 @@ jquery-ui/jquery-ui.theme.min.css
jquery-ui/jquery-ui.min.css
home.html.tmpl
include.html.part
caret.png
taskbar.js
taskbar.css
taskbar.html.part
global_taskbar.html.part

View File

@@ -1,13 +1,17 @@
#kiwixtoolbar {
position: fixed;
padding: .5em;
left:0;
right:0;
left: 0;
right: 0;
top: 0;
z-index:100;
z-index: 100;
background-position-y: 0px;
transition: 0.3s;
width: 100%;
box-sizing: border-box;
}
#kiwixtoolbar > a {
#kiwixtoolbar>a {
float: left;
}
@@ -20,20 +24,66 @@
height: 3em;
}
#kiwixsearchbox {
.kiwixsearch {
position: relative;
height: 26px;
width: 100%;
left: 0;
margin-bottom: 0;
}
.kiwix_searchform {
width: 20em;
}
#kiwix_serve_taskbar_home_button button {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 160px;
}
.kiwix .kiwix_centered {
max-width: 720px;
margin: 0 auto;
}
.kiwix .kiwix_button_wrapper {
float: left;
#kiwix_button_show_toggle {
display: none;
}
#kiwix_button_show_toggle:checked~label~.kiwix_button_cont,
#kiwix_button_show_toggle:checked~label~.kiwix_button_cont>a {
display: block;
}
#kiwix_button_show_toggle:not(:checked)~label~.kiwix_button_cont {
display: none;
}
label[for="kiwix_button_show_toggle"] {
display: inline-block;
height: 26px;
}
label[for="kiwix_button_show_toggle"] img {
transition: 0.1s;
height: 26px;
}
#kiwix_button_show_toggle:checked~label img {
transform: rotate(-180deg);
}
label[for="kiwix_button_show_toggle"],
.kiwix_button_cont {
display: block;
}
.kiwix .kiwix_searchform {
float: right;
}
.kiwix #kiwixtoolbar button,
.kiwix #kiwixtoolbar input[type="submit"] {
box-sizing: border-box !important;
@@ -48,22 +98,38 @@
cursor: pointer !important;
font-size: 16px !important;
}
.kiwix #kiwixtoolbar a {
margin-bottom: 5px;
}
.kiwix #kiwixtoolbar #kiwixsearchform input[type='text'] {
position: absolute;
left: 0;
box-sizing: border-box !important;
width: 100%;
height: 26px !important;
line-height: 20px !important;
border: 1px solid #999 !important;
border-radius: 3px !important;
background-color: #fff !important;
padding: 2px 2px 2px 3px !important;
padding: 2px 2px 2px 27px !important;
font-size: 16px !important;
}
label[for=kiwixsearchbox] {
z-index: 1;
position: absolute;
height: 100%;
left: 5px;
font-size: 90%;
line-height: 26px;
vertical-align: middle;
}
body {
padding-top: 40px !important;
}
/* Try to fix buggy stuff in jquery-ui autocomplete */
#ui-id-1, .ui-autocomplete {
#ui-id-1,
.ui-autocomplete {
background: white !important;
border: solid 1px grey !important;
}
@@ -72,22 +138,49 @@ li.ui-state-focus {
font-weight: bold;
}
@media (max-width: 520px) {
.kiwixsearch {
margin-top: 5px;
@media(min-width:420px) {
.kiwix_button_cont {
display: inline-block !important;
}
.kiwix_button_cont>a {
display: inline-block !important;
}
label[for="kiwix_button_show_toggle"] {
display: none;
}
}
@media (max-width: 645px) {
#kiwix_button_show_toggle~label~.kiwix_button_cont.searching {
display: none !important;
}
label[for="kiwix_button_show_toggle"].searching {
display: none !important;
}
.kiwix_searchform.full_width {
width: 100%;
}
.kiwixsearch {
float: none;
}
#kiwixsearchbox {
width: 65%;
}
#kiwixsearchform input[type="submit"] {
width: 28%;
.kiwix_searchform {
width: 36%;
}
.height_separator {
height: 6em;
}
}
@media(max-width:415px) {
.kiwix_searchform {
width: 80%;
}
}

View File

@@ -1,19 +1,21 @@
<span class="kiwix">
<span id="kiwixtoolbar" class="ui-widget-header">
<div class="kiwix_centered">
<div class="kiwix_button_wrapper">
<a id="kiwix_serve_taskbar_library_button" href="__ROOT_LOCATION__/"><button>&#x1f3e0;</button></a>
<a id="kiwix_serve_taskbar_home_button" href="__ROOT_LOCATION__/__CONTENT__/"><button>__ZIM_TITLE__</button></a>
<a id="kiwix_serve_taskbar_random_button" href="__ROOT_LOCATION__/random?content=__CONTENT_ESCAPED__"><button>&#x1F3B2;</button></a>
</div>
<div class="kiwix_searchform">
<form class="kiwixsearch" method="GET" action="__ROOT_LOCATION__/search" id="kiwixsearchform">
<input type="hidden" name="content" value="__CONTENT__" />
<label for="kiwixsearchbox">&#x1f50d;</label>
<input autocomplete="off" class="ui-autocomplete-input" id="kiwixsearchbox" name="pattern" type="text">
<input type="submit" value="&#x1f50d;">
</form>
</div>
<input type="checkbox" id="kiwix_button_show_toggle">
<label for="kiwix_button_show_toggle"><img src="__ROOT_LOCATION__/skin/caret.png" alt=""></label>
<div class="kiwix_button_cont">
<a id="kiwix_serve_taskbar_library_button" href="__ROOT_LOCATION__/"><button>&#x1f3e0;</button></a>
<a id="kiwix_serve_taskbar_home_button" href="__ROOT_LOCATION__/__CONTENT__/"><button>__ZIM_TITLE__</button></a>
<a id="kiwix_serve_taskbar_random_button"
href="__ROOT_LOCATION__/random?content=__CONTENT_ESCAPED__"><button>&#x1F3B2;</button></a>
</div>
</div>
</span>
</span>
<div style="display: block; height: 5em;"></div>

49
static/server/taskbar.js Normal file
View File

@@ -0,0 +1,49 @@
(function ($) {
if ($(window).width() < 520) {
var didScroll;
var lastScrollTop = 0;
var delta = 5;
// on scroll, let the interval function know the user has scrolled
$(window).scroll(function (event) {
didScroll = true;
});
// run hasScrolled() and reset didScroll status
setInterval(function () {
if (didScroll) {
hasScrolled();
didScroll = false;
}
}, 250);
function hasScrolled() {
var st = $(this).scrollTop();
// Make sure they scroll more than delta
if (Math.abs(lastScrollTop - st) <= delta)
return;
// If they scrolled down and are past the navbar, add class .nav-up.
// This is necessary so you never see what is "behind" the navbar.
if (st > lastScrollTop) {
// Scroll Down
$('#kiwixtoolbar').css({ top: '-100%' });
} else {
// Scroll Up
$('#kiwixtoolbar').css({ top: '0' });
}
lastScrollTop = st;
}
}
$('#kiwixsearchbox').on({
focus: function () {
$('.kiwix_searchform').addClass('full_width');
$('label[for="kiwix_button_show_toggle"], .kiwix_button_cont').addClass('searching');
},
blur: function () {
$('.kiwix_searchform').removeClass('full_width');
$('label[for="kiwix_button_show_toggle"], .kiwix_button_cont').removeClass('searching');
}
});
})(jQuery);