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