+ 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/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(&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, 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="";