mirror of
https://github.com/kiwix/kiwix-tools.git
synced 2025-09-22 11:22:38 -04:00
+ topbar stub
This commit is contained in:
parent
87209689db
commit
50480447d5
@ -14,118 +14,131 @@
|
|||||||
#include <zim/article.h>
|
#include <zim/article.h>
|
||||||
#include <zim/fileiterator.h>
|
#include <zim/fileiterator.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <regex>
|
#include <regex.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
static const string HTMLScripts = " \
|
static const string HTMLScripts = " \
|
||||||
<style type=\"text/css\"> \
|
<style type=\"text/css\"> \n \
|
||||||
\
|
\n \
|
||||||
#topbar{ \
|
#topbar{ \n \
|
||||||
position:absolute; \
|
position:absolute; \n \
|
||||||
border: 1px solid black; \
|
border: 1px solid black; \n \
|
||||||
padding: 2px; \
|
padding: 2px; \n \
|
||||||
background-color: lightyellow; \
|
background-color: lightyellow; \n \
|
||||||
width: 620px; \
|
width: 620px; \n \
|
||||||
visibility: hidden; \
|
visibility: hidden; \n \
|
||||||
z-index: 100; \
|
z-index: 100; \n \
|
||||||
} \
|
} \n \
|
||||||
\
|
\n \
|
||||||
</style> \
|
</style> \n \
|
||||||
\
|
\n \
|
||||||
<script type=\"text/javascript\"> \
|
<script type=\"text/javascript\"> \n \
|
||||||
\
|
\n \
|
||||||
/*********************************************** \
|
/*********************************************** \n \
|
||||||
* Floating Top Bar script- Â Dynamic Drive (www.dynamicdrive.com) \
|
* Floating Top Bar script- Â Dynamic Drive (www.dynamicdrive.com) \n \
|
||||||
* Sliding routine by Roy Whittle (http://www.javascript-fx.com/) \
|
* Sliding routine by Roy Whittle (http://www.javascript-fx.com/) \n \
|
||||||
* This notice must stay intact for legal use. \
|
* This notice must stay intact for legal use. \n \
|
||||||
* Visit http://www.dynamicdrive.com/ for full source code \
|
* Visit http://www.dynamicdrive.com/ for full source code \n \
|
||||||
***********************************************/ \
|
***********************************************/ \n \
|
||||||
\
|
\n \
|
||||||
var persistclose=0 //set to 0 or 1. 1 means once the bar is manually closed, it will remain closed for browser session \
|
var persistclose=0 //set to 0 or 1. 1 means once the bar is manually closed, it will remain closed for browser session \n \
|
||||||
var startX = 30 //set x offset of bar in pixels \
|
var startX = 30 //set x offset of bar in pixels \n \
|
||||||
var startY = 5 //set y offset of bar in pixels \
|
var startY = 5 //set y offset of bar in pixels \n \
|
||||||
var verticalpos=\"fromtop\" //enter \"fromtop\" or \"frombottom\" \
|
var verticalpos=\"fromtop\" //enter \"fromtop\" or \"frombottom\" \n \
|
||||||
\
|
\n \
|
||||||
function iecompattest(){ \
|
function iecompattest(){ \n \
|
||||||
return (document.compatMode && document.compatMode!=\"BackCompat\")? document.documentElement : document.body \
|
return (document.compatMode && document.compatMode!=\"BackCompat\")? document.documentElement : document.body \n \
|
||||||
} \
|
} \n \
|
||||||
\
|
\n \
|
||||||
function get_cookie(Name) { \
|
function get_cookie(Name) { \n \
|
||||||
var search = Name + \"=\" \
|
var search = Name + \"=\" \n \
|
||||||
var returnvalue = \"\"; \
|
var returnvalue = \"\"; \n \
|
||||||
if (document.cookie.length > 0) { \
|
if (document.cookie.length > 0) { \n \
|
||||||
offset = document.cookie.indexOf(search) \
|
offset = document.cookie.indexOf(search) \n \
|
||||||
if (offset != -1) { \
|
if (offset != -1) { \n \
|
||||||
offset += search.length \
|
offset += search.length \n \
|
||||||
end = document.cookie.indexOf(\";\", offset); \
|
end = document.cookie.indexOf(\";\", offset); \n \
|
||||||
if (end == -1) end = document.cookie.length; \
|
if (end == -1) end = document.cookie.length; \n \
|
||||||
returnvalue=unescape(document.cookie.substring(offset, end)) \
|
returnvalue=unescape(document.cookie.substring(offset, end)) \n \
|
||||||
} \
|
} \n \
|
||||||
} \
|
} \n \
|
||||||
return returnvalue; \
|
return returnvalue; \n \
|
||||||
} \
|
} \n \
|
||||||
\
|
\n \
|
||||||
function closebar(){ \
|
function closebar(){ \n \
|
||||||
if (persistclose) \
|
if (persistclose) \n \
|
||||||
document.cookie=\"remainclosed=1\" \
|
document.cookie=\"remainclosed=1\" \n \
|
||||||
document.getElementById(\"topbar\").style.visibility=\"hidden\" \
|
document.getElementById(\"topbar\").style.visibility=\"hidden\" \n \
|
||||||
} \
|
} \n \
|
||||||
\
|
\n \
|
||||||
function staticbar(){ \
|
function staticbar(){ \n \
|
||||||
barheight=document.getElementById(\"topbar\").offsetHeight \
|
barheight=document.getElementById(\"topbar\").offsetHeight \n \
|
||||||
var ns = (navigator.appName.indexOf(\"Netscape\") != -1) || window.opera; \
|
var ns = (navigator.appName.indexOf(\"Netscape\") != -1) || window.opera; \n \
|
||||||
var d = document; \
|
var d = document; \n \
|
||||||
function ml(id){ \
|
function ml(id){ \n \
|
||||||
var el=d.getElementById(id); \
|
var el=d.getElementById(id); \n \
|
||||||
if (!persistclose || persistclose && get_cookie(\"remainclosed\")==\"\") \
|
if (!persistclose || persistclose && get_cookie(\"remainclosed\")==\"\") \n \
|
||||||
el.style.visibility=\"visible\" \
|
el.style.visibility=\"visible\" \n \
|
||||||
if(d.layers)el.style=el; \
|
if(d.layers)el.style=el; \n \
|
||||||
el.sP=function(x,y){this.style.left=x+\"px\";this.style.top=y+\"px\";}; \
|
el.sP=function(x,y){this.style.left=x+\"px\";this.style.top=y+\"px\";}; \n \
|
||||||
el.x = startX; \
|
el.x = startX; \n \
|
||||||
if (verticalpos==\"fromtop\") \
|
if (verticalpos==\"fromtop\") \n \
|
||||||
el.y = startY; \
|
el.y = startY; \n \
|
||||||
else{ \
|
else{ \n \
|
||||||
el.y = ns ? pageYOffset + innerHeight : iecompattest().scrollTop + iecompattest().clientHeight; \
|
el.y = ns ? pageYOffset + innerHeight : iecompattest().scrollTop + iecompattest().clientHeight; \n \
|
||||||
el.y -= startY; \
|
el.y -= startY; \n \
|
||||||
} \
|
} \n \
|
||||||
return el; \
|
return el; \n \
|
||||||
} \
|
} \n \
|
||||||
window.stayTopLeft=function(){ \
|
window.stayTopLeft=function(){ \n \
|
||||||
if (verticalpos==\"fromtop\"){ \
|
if (verticalpos==\"fromtop\"){ \n \
|
||||||
var pY = ns ? pageYOffset : iecompattest().scrollTop; \
|
var pY = ns ? pageYOffset : iecompattest().scrollTop; \n \
|
||||||
ftlObj.y += (pY + startY - ftlObj.y)/8; \
|
ftlObj.y += (pY + startY - ftlObj.y)/8; \n \
|
||||||
} \
|
} \n \
|
||||||
else{ \
|
else{ \n \
|
||||||
var pY = ns ? pageYOffset + innerHeight - barheight: iecompattest().scrollTop + iecompattest().clientHeight - barheight; \
|
var pY = ns ? pageYOffset + innerHeight - barheight: iecompattest().scrollTop + iecompattest().clientHeight - barheight; \n \
|
||||||
ftlObj.y += (pY - startY - ftlObj.y)/8; \
|
ftlObj.y += (pY - startY - ftlObj.y)/8; \n \
|
||||||
} \
|
} \n \
|
||||||
ftlObj.sP(ftlObj.x, ftlObj.y); \
|
ftlObj.sP(ftlObj.x, ftlObj.y); \n \
|
||||||
setTimeout(\"stayTopLeft()\", 10); \
|
setTimeout(\"stayTopLeft()\", 10); \n \
|
||||||
} \
|
} \n \
|
||||||
ftlObj = ml(\"topbar\"); \
|
ftlObj = ml(\"topbar\"); \n \
|
||||||
stayTopLeft(); \
|
stayTopLeft(); \n \
|
||||||
} \
|
} \n \
|
||||||
\
|
\n \
|
||||||
if (window.addEventListener) \
|
if (window.addEventListener) \n \
|
||||||
window.addEventListener(\"load\", staticbar, false) \
|
window.addEventListener(\"load\", staticbar, false) \n \
|
||||||
else if (window.attachEvent) \
|
else if (window.attachEvent) \n \
|
||||||
window.attachEvent(\"onload\", staticbar) \
|
window.attachEvent(\"onload\", staticbar) \n \
|
||||||
else if (document.getElementById) \
|
else if (document.getElementById) \n \
|
||||||
window.onload=staticbar \
|
window.onload=staticbar \n \
|
||||||
</script> \
|
</script> \n \
|
||||||
";
|
";
|
||||||
|
|
||||||
static const string HTMLDiv = " \
|
static const string HTMLDiv = " \
|
||||||
<div id=\"topbar\"> \
|
<div id=\"topbar\"> \n \
|
||||||
<a href=\"\" onClick=\"closebar(); return false\"><img src=\"close.gif\" border=\"0\" /></a> \
|
<a href=\"\" onClick=\"closebar(); return false\"><img src=\"close.gif\" border=\"0\" /></a> \n \
|
||||||
Your content here. \
|
Your content here. \n \
|
||||||
</div> \
|
</div> \n \
|
||||||
";
|
";
|
||||||
|
|
||||||
static zim::File* zimFileHandler;
|
static zim::File* zimFileHandler;
|
||||||
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
static void appendToFirstOccurence(string &content, const string regex, const string &replacement) {
|
||||||
|
regmatch_t matchs[1];
|
||||||
|
regex_t regexp;
|
||||||
|
|
||||||
|
regcomp(®exp, regex.data(), REG_ICASE);
|
||||||
|
regexec(®exp, content.data(), 1, matchs, 0);
|
||||||
|
|
||||||
|
if (matchs[0].rm_so > 0)
|
||||||
|
content.replace(matchs[0].rm_eo, 0, replacement);
|
||||||
|
|
||||||
|
regfree(®exp);
|
||||||
|
}
|
||||||
|
|
||||||
static int accessHandlerCallback(void *cls,
|
static int accessHandlerCallback(void *cls,
|
||||||
struct MHD_Connection * connection,
|
struct MHD_Connection * connection,
|
||||||
const char * url,
|
const char * url,
|
||||||
@ -213,6 +226,12 @@ static int accessHandlerCallback(void *cls,
|
|||||||
mimeType = article.getMimeType();
|
mimeType = article.getMimeType();
|
||||||
cout << "mimeType: " << mimeType << endl;
|
cout << "mimeType: " << mimeType << endl;
|
||||||
|
|
||||||
|
/* Rewrite the content */
|
||||||
|
if (mimeType == "text/html") {
|
||||||
|
appendToFirstOccurence(content, "<head>", HTMLScripts);
|
||||||
|
appendToFirstOccurence(content, "<body[^>]*>", HTMLDiv);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* The found article is not the good one */
|
/* The found article is not the good one */
|
||||||
content="";
|
content="";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user