+ topbar stub

This commit is contained in:
kelson42 2010-01-19 18:36:22 +00:00
parent 87209689db
commit 50480447d5

View File

@ -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(&regexp, regex.data(), REG_ICASE);
regexec(&regexp, content.data(), 1, matchs, 0);
if (matchs[0].rm_so > 0)
content.replace(matchs[0].rm_eo, 0, replacement);
regfree(&regexp);
}
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="";