hg site extension
 
(Arne Babenhauserheide)
2014-02-09: started using the design from steve losh (as default design).

started using the design from steve losh (as default design).

diff --git a/staticsite.py b/staticsite.py
--- a/staticsite.py
+++ b/staticsite.py
@@ -37,12 +37,18 @@ templates = {
 <html><head>
     <meta charset="utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--duplicate for older browsers-->
-    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
-    <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+    <link rel="stylesheet" href="{relpath}style.css" type="text/css" media="screen" />
+    <link rel="stylesheet" href="{relpath}print.css" type="text/css" media="print" />
     <title>{title}</title>
 </head>
 <body>
-<h1 id="maintitle">{reponame}</h1>
+<div class="wrap">
+<div class="top group">
+<header id="maintitle">{reponame}</header>
+<nav>{nav}</nav>
+</div>
+<div class="hr"> </div>
+<div class="content">
 """,
     "srchead": """<!DOCTYPE html>
 <html><head>
@@ -55,19 +61,32 @@ templates = {
     <title>{filetitle}</title>
 </head>
 <body onload="prettyPrint()">
+<div class="wrap">
+<div class="content">
 """,
     "forkhead": """<!DOCTYPE html>
 <html><head>
     <meta charset="utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--duplicate for older browsers-->
-    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
-    <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+    <link rel="stylesheet" href="{relpath}style.css" type="text/css" media="screen" />
+    <link rel="stylesheet" href="{relpath}print.css" type="text/css" media="print" />
     <title>{forkname}</title>
 </head>
 <body>
-<h1>{forkname} <small>(fork of <a href="../../">{reponame}</a>, found at {forkuri})</small></h1>
+<div class="wrap">
+<div class="top group fullwidth">
+<header>{forkname} <small>(fork of <a href="../../">{reponame}</a>, found at {forkuri})</small></header>
+</div>
+<div class="hr"> </div>
+<div class="content">
 """,
-    "foot": "</body></html>\n",
+    "foot": """<div class="hrb"> </div><footer>
+                <p>
+                    Site made with the <a href="http://draketo.de/proj/hgsite">hg staticsite extension</a>, 
+                    Design based on the site from <a href="https://stevelosh.com">Steve Losh</a>
+                </p>
+            </footer></div><!-- /content --></div><!-- /wrap--></body></html>\n""",
+    # this screenstyle is mostly from the wonderful site http://stevelosh.com and licensed under MIT
     "screenstyle": """ 
 .bugnumbers {
     font-size: x-small;
@@ -81,8 +100,488 @@ templates = {
     color: #00f;
     text-decoration: none;
 }
+/* Copyright (c) 2008-2010 Steve Losh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.*/
+html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,header,nav,section,article,aside,footer{
+    border:0;margin:0;outline:0;padding:0;background:transparent;vertical-align:baseline;
+}
+article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{
+    display:block;
+}
+blockquote,q{
+    quotes:none;
+}
+blockquote:before,blockquote:after,q:before,q:after{
+    content:'';content:none;
+}
+header,nav,section,article,aside,footer{
+    display:block;
+}
+html{
+    overflow-y:scroll;
+}
+body{
+    background:#fdfdfd;color:#353535;font:normal 18px/25px Palatino,"Palatino Linotype",serif;text-rendering:optimizeLegibility;
+}
+html>body{
+    font-size:18px;line-height:25px;
+}
+img{
+    display:inline-block;vertical-align:bottom;
+}
+h1,h2,h3,h4,h5,h6,strong,b,dt,th{
+    font-weight:700;
+}
+address,cite,em,i,caption,dfn,var{
+    font-style:italic;
+}
+h1{
+    font-size:45px;line-height:50px;margin:25px 0;
+}
+h2{
+    font-size:32px;line-height:50px;margin:25px 0;
+}
+h3{
+    font-size:23px;line-height:25px;margin:25px 0;
+}
+h4{
+    margin:0 0 22px;font-size:16px;line-height:22px;
+}
+h5{
+    margin:0 0 22px;font-size:14px;line-height:22px;
+}
+h6{
+    margin:0 0 22px;font-size:12px;line-height:22px;
+}
+p,ul,ol,dl,blockquote,pre{
+    margin:0 0 25px;
+}
+li ul,li ol{
+    margin:0;
+}
+ul{
+    list-style:outside disc;
+}
+ol{
+    list-style:outside decimal;
+}
+li{
+    margin:0 0 0 44px;
+}
+dd{
+    padding-left:25px;
+}
+blockquote{
+    padding:0 25px;
+}
+a{
+    text-decoration:underline;
+}
+a:hover{
+    text-decoration:none;
+}
+abbr,acronym{
+    border-bottom:1px dotted;cursor:help;
+}
+del{
+    text-decoration:line-through;
+}
+ins{
+    text-decoration:overline;
+}
+sub{
+    font-size:14px;line-height:25px;vertical-align:sub;
+}
+sup{
+    font-size:14px;line-height:25px;vertical-align:super;
+}
+tt,code,kbd,samp,pre{
+    font-size:14px;line-height:25px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;
+}
+table{
+    border-collapse:collapse;border-spacing:0;margin:0 0 1.5em;
+}
+caption{
+    text-align:left;
+}
+th,td{
+    padding:.25em .5em;
+}
+tbody td,tbody th{
+    border:1px solid #222;
+}
+tfoot{
+    font-style:italic;
+}
+fieldset{
+    clear:both;
+}
+legend{
+    padding:0 0 1.286em;font-size:1.167em;font-weight:700;
+}
+fieldset fieldset legend{
+    padding:0 0 1.5em;font-size:1em;
+}
+* html legend{
+    margin-left:-7px;
+}
+*+html legend{
+    margin-left:-7px;
+}
+form .field,form .buttons{
+    clear:both;margin:0 0 1.5em;
+}
+form .field label{
+    display:block;
+}
+form ul.fields li{
+    list-style-type:none;margin:0;
+}
+form ul.inline li,form ul.inline label{
+    display:inline;
+}
+form ul.inline li{
+    padding:0 .75em 0 0;
+}
+input.radio,input.checkbox{
+    vertical-align:top;
+}
+label,button,input.submit,input.image{
+    cursor:pointer;
+}
+* html input.radio,* html input.checkbox{
+    vertical-align:middle;
+}
+*+html input.radio,*+html input.checkbox{
+    vertical-align:middle;
+}
+textarea{
+    overflow:auto;
+}
+input.text,input.password,textarea,select{
+    margin:0;font:1em/1.3 Helvetica,Arial,"Liberation Sans","Bitstream Vera Sans",sans-serif;vertical-align:baseline;
+}
+input.text,input.password,textarea{
+    border:1px solid #444;border-bottom-color:#666;border-right-color:#666;padding:2px;
+}
+* html button{
+    margin:0 .34em 0 0;
+}
+*+html button{
+    margin:0 .34em 0 0;
+}
+form.horizontal .field{
+    padding-left:150px;
+}
+form.horizontal .field label{
+    display:inline;float:left;width:140px;margin-left:-150px;
+}
+img.left{
+    display:inline;float:left;margin:0 1.5em .75em 0;
+}
+img.right{
+    display:inline;float:right;margin:0 0 .75em .75em;
+}
+.group:after{
+    content:".";display:block;height:0;clear:both;visibility:hidden;
+}
+
+html{
+    overflow-y:scroll;
+}
+body{
+    text-rendering:optimizeLegibility;color:#222222;position:relative;
+}
+body a{
+    text-decoration:none;color:#e50053;
+}
+body a:hover{
+    text-decoration:underline;
+}
+body h1,body h2,body h3,body h4,body h5,body h6{
+    font-family:'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;font-weight:normal;
+}
+body h1 a,body h2 a,body h3 a,body h4 a,body h5 a,body h6 a{
+    color:#222222;
+}
+body h1 a:hover,body h2 a:hover,body h3 a:hover,body h4 a:hover,body h5 a:hover,body h6 a:hover{
+    color:#e50053;text-decoration:none;
+}
+body h1 .amp,body h2 .amp,body h3 .amp,body h4 .amp,body h5 .amp,body h6 .amp{
+    font-style:italic;
+}
+body h1{
+    font-size:45px;line-height:50px;margin:25px 0;
+}
+body h2{
+    font-size:32px;line-height:50px;margin:25px 0;
+}
+body h3{
+    font-size:23px;line-height:25px;margin:25px 0;
+}
+body h4{
+    font-size:18px;line-height:25px;margin:25px 0;
+}
+body code,body pre{
+    font-family:Consolas,Menlo,"Courier New",monospace;font-size:14px;
+}
+body .codehilite code,body .codehilite pre{
+    font-family:Consolas,Menlo,"Courier New",monospace;font-size:16px;line-height:25px;overflow-x:auto;border:1px solid #d5d5d5;border-left:10px solid #d5d5d5;background-color:#fafafa;padding:11px 15px 12px;margin-left:-25px;
+}
+body .codehilite pre::-webkit-scrollbar{
+    height:25px;
+}
+body .codehilite pre::-webkit-scrollbar-button:start,body .codehilite pre::-webkit-scrollbar-button:end{
+    display:none;
+}
+body .codehilite pre::-webkit-scrollbar-track-piece{
+    background-color:#eee;
+}
+body .codehilite pre::-webkit-scrollbar-thumb{
+    background-color:#bbb;border:7px solid #eee;-webkit-background-clip:padding-box;-webkit-border-radius:12px;
+}
+body p code,body li code,body table code{
+    border:1px solid #ccc;background-color:#fafafa;font-size:13px;padding:1px 3px;line-height:20px;margin:0;white-space:nowrap;
+}
+body .wrap{
+    width:612px;margin:0 auto;margin-bottom:5em;
+}
+body .wrap .top header{
+    float:left;font-family:'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;font-size:23px;line-height:50px;text-transform:lowercase;padding-left:2px;width:210px;
+}
+body .wrap .top .fullwidth header{
+    float:left;font-family:'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;font-size:23px;line-height:50px;text-transform:lowercase;padding-left:2px;width:100%;
+}
+body .wrap .top header .amp{
+    font-style:italic;
+}
+body .wrap .top header a{
+    color:#222222;
+}
+body .wrap .top header a:hover{
+    color:#e50053;
+}
+body .wrap .top nav{
+    font:normal 18px/50px 'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;text-align:right;text-transform:lowercase;padding-right:2px;width:398px;float:left;
+}
+body .wrap .top nav .sep{
+    padding:0 4px;color:#666;
+}
+body .wrap .hr{
+    margin-top:-12px;margin-bottom:37px;height:25px;background:transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmQAAAAZCAIAAAAQUKXdAAADAklEQVR42u3c3UtTcRzHcf+nIOquu266TIICsceLLpKISKPQqOxGgkgjioouyrIUzbJI0xKV0CwpdW7HTQ+6ubNH3dzc3JQ+emSu0a1u4PvlkMnYLg7i2+/5/c4pWwNKW1ZfAFBUZRwClLi2n4+i8VAmk+FQACCWwP/Gymy2oacqGgun02k954AAIJZAIQ2UN7tOxePxZDLJcAmAWAKFGnouDLt7nwzULy0tKZZMlgCIJVDofMuhM80Hfhj9iuXKygqxBEAsgbX19fXcc6XxRlflpdYjVsBSLLVmyfEBQCyx1zNpUyW/ONqcC2OqY1Pf1ebvjcFgUGuWLFgCIJaglHYp14amP518se/sq4OGd+Lht1rX3MTi4mIqleIcLABiCWK5Fcs3ow8USz1qOyvudl+MRCLLy8urq6scJQDEEpRyK5ZPh+rtWOrx+VdrOBxmaw+A4sdSC0IOYFdMbXI6nS6XyzAMt9s9Ozs7Pz/vtyxFUQuTiUTi9XCjXcq6d5V61efzBQIBv9/v9XpN0/R4PHqj3q4PsT+NowpgpymUTJYorcmyc+y5Snn65f6RyUFlUvm0x8r8jbIAsNuTpRaE/MCusSw9RCHUP2saKKPRaCwWUxS1i0c7YFtGmhTLx19va+LUq/r91EsaOrXNRz+GQiG90dr8kI0HAOw8/SFiskTxJ0t9T2dS0URIQ+SzwTtVbw/PzLnzVytzcycAFGey5BCgBGKZvf7+hG7W88ccruko7/7dpgkytwk2/yQtABBL7FHB2IK9qUcz5a2ucyqlfW1lrqaUEgCxxF7nCUzZsaxpP2aYTp2A1TqlfcsexkoAxBLYMGB8VCmr28sd7nFt3tF2Hk7AAiCWwDZt4bnfd6W646jLdGiDa/4908kkAGIJbJj2j1/rPD7jM3QliUrJbWABEEvgH5O+0boPFXMBj321JaUEQCyBbeG4pdvA3uu97I/4NFDqQhGdfaWUAIglsG3U7B/x9GnXq337HkoJgFgChXRliE66JpNJ3aaHUgIocX8BBfw+1JXTYZkAAAAASUVORK5CYII=')/*../images/hr.png*/ top left no-repeat;
+}
+body .wrap .hrb{
+    height:25px;margin-top:50px;background:transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmQAAAAZCAIAAAAQUKXdAAADMklEQVR42u3c30tTcRjHcf+nIOquu266TIICsZ8XXSQRkUahUdmNBGFGFBVdlGI1NMsiTUtUSjOk1LUfOqZsnrOfujnd3Mw+eiDn8iZwY2Pvl2NseLaLhwc/Pud8z7diDQCQJaMfYLsKSgAA2WzfH0TjoXQ6TSlAWALATmNlJtPUWxONhVOplF5TEBCWAJBLA+X17hPxeHx5eZnhEoQlAORq6j03Mt33aLBxcXFRYclkCcISAHKdbT9wqnXfN9eAwnJlZYWwBGGJYvR7J5QFeW25v68Vjde6qy+8OmQGTIWlrllSHxCWKIGYJC9RgK5TSn602xzz40rHlv7LrV/uBoNBXbPkgiUIS5RSUpKXyGdSrg273x9/tud0236Xb/L+53rn3OTCwkIymeQcLAhLlF5YkpfIR8vp9YuxewpLPeq7qm73nI9EIktLS6urq1QJhCWKNynXsxCWKEBYPh5utMJSjw/jtnA4zNIe7BCWOjtvBwri1yaHw+F0OqkGCt91brfb4/HMzs76/f5QKKRVPBoi2742W0nZ8Lra6/UahqG/ioFAQMfoSB2vT+mz+gbrqyhpGVJLMFmiiCbL9X8wWSKvLae3XeNPlZQnn+8dnRpSRiYSCWuspOuwbbLUP1YGUDCmqYdQCRS+6zQfaKDUVUlrptS2A1oB2z7aorB8+Ommz+fTrxKb9Fsdo7c6Xp8yN7/BoG/LlfqByRJMlii7ltNzKp2MJjZ2S38ydKvm5UHP3HT21Uq6DrmTJSVA8YQlC3xQKJmrb45ps56f3pG6zsqeHzZNkJoerHsraTkQliiBvOS+EeRbMDZvLerRTHmj+4yS0rq3MqchKRQISxCWKF8zpt0Ky7qOIy6vQydgdZ2SsRKEJUo7L6kPdteg652Ssraj0j49ocU72tzO2oWAlgNhiZKMTGqCXaclPM39l2o7Dzu9di1wzd4zna4DYQkAG9zGxJWuox6/S/eEKCnZBhaEJQBsM+Ufa3hbNReYiUajsViMpARhCQBbwnFT28De6btoRPzWpgQ6+0pSgrAEgC1j3oHRmX6tetVAqWeSEoQlAOTSnSE66aot7rRND0mJ//UHiLRAti+ZCq0AAAAASUVORK5CYII=')/*../images/hrb.png*/ top left no-repeat;
+}
+body .wrap footer{
+    text-align:center;
+}
+body .wrap footer p{
+    font-size:14px;font-style:italic;line-height:50px;margin-bottom:0px;
+}
+body .wrap footer .rochester-made img{
+    opacity:0.7;padding:5px 20px;
+}
+hr{
+    border:none;background:#ccc;height:1px;margin-bottom:24px;
+}
+.splash{
+    color:#454545;text-align:center;font:normal 27px/32px 'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;margin-bottom:-1px;padding-top:0;
+}
+.splash p{
+    margin-bottom:24px;
+}
+.splash .amp{
+    font-style:italic;
+}
+.splash .fn{
+    color:#454545;text-decoration:none;
+}
+.splash .fn:hover{
+    color:#e50053;text-decoration:none;
+}
+.splash .fn .last-name{
+    display:none;
+}
+.section-listing{
+    margin-bottom:-50px;
+}
+.section-listing ol{
+    list-style-type:none;
+}
+.section-listing ol li{
+    float:left;width:281px;height:150px;margin:0;text-align:center;
+}
+.section-listing ol li a{
+    font:normal 23px/32px 'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;color:#222222;display:block;
+}
+.section-listing ol li a:hover{
+    color:#e50053;text-decoration:none;
+}
+.section-listing ol li span.snip{
+    font-size:18px;color:#333;font-family:'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;line-height:25px;font-style:italic;
+}
+.section-listing ol li .amp{
+    font-style:italic;
+}
+.section-listing ol li:nth-child(odd){
+    margin-right:25px;
+}
+.section-listing ol li:nth-child(even){
+    margin-left:25px;
+}
+blockquote{
+    border:1px solid #ccc;background-color:#fafafa;padding:11px 15px 12px;margin-left:2em;overflow:auto;
+}
+blockquote p:last-child{
+    margin-bottom:0;
+}
+span.dquo{
+    margin-left:-0.23em;
+}
+#leaf-stats p{
+    color:#666;margin-top:-22px;margin-bottom:22px;
+}
+#leaf-content img{
+    display:block;margin:25px auto 26px;border:11px solid #e5e5e5;padding:1px;background:black;max-width:590px;
+}
+#leaf-content img.left,#leaf-content img.right{
+    border:none;background:none;padding:none;
+}
+#leaf-content img.left{
+    margin:0 1.5em 1em 0;
+}
+#leaf-content img.right{
+    margin:0 0 .75em 1em;
+}
+#leaf-content .gallery img{
+    background:none;padding:0;border:none;display:inline;margin-bottom:25px;margin-right:25px;
+}
+#leaf-content .toc ul{
+    list-style:none;
+}
+#leaf-content .toc ul:first-child>li{
+    margin-left:0em;
+}
+#leaf-content table{
+    padding:0px;margin-top:-8px;margin-bottom:25px;
+}
+#leaf-content table tr{
+    margin:0px;padding:0px;
+}
+#leaf-content table tr td,#leaf-content table tr th{
+    margin:0px;padding:5px 5px;line-height:23px;
+}
+#leaf-content table tr td{
+    border:1px solid #666;
+}
+#leaf-content.with-diagrams img{
+    display:block;margin:25px auto;padding:0;background:none;border:none;
+}
+.print-links{
+    display:none;
+}
+img.self{
+    border:none;padding:0;margin:0;margin-right:-108px;margin-top:-15px;margin-left:30px;margin-bottom:20px;
+}
+div#cboxCurrent{
+    bottom:-30px;font-size:17px;font-weight:normal;left:60px;
+}
+div.screenshots img{
+    max-width:580px;
+}
+#scrolling-header{
+    color:#999;font-size:23px;font-style:italic;font:italic 23px 'OFL Sorts Mill Goudy','OFL Sorts Mill Goudy TT',serif;line-height:30px;position:fixed;top:75px;text-align:right;width:180px;
+}
+.flattr{
+    float:right;padding-top:1px;
+}
 """,
-    "printstyle": """ """,
+    # this printstyle is from the wonderful site http://stevelosh.com and licensed under MIT
+    "printstyle": """ 
+/*Copyright (c) 2008-2010 Steve Losh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.*/
+
+body{
+font:normal 10pt/1.25 Palatino,"Palatino Linotype";text-rendering:optimizeLegibility;
+}
+nav,header,.toc{
+display:none;
+}
+#leaf-title a{
+text-decoration:none;color:black;
+}
+#leaf-content ul.print-links{
+display:block;font-size:1em;list-style-type:none;margin-left:0em;
+}
+#leaf-content ul.print-links a{
+text-decoration:none;
+}
+#leaf-content code,#leaf-content pre{
+font:normal 9pt Menlo,Monaco,Consolas,"Courier New",Courier,monospace;
+}
+#leaf-content img{
+display:block;margin-left:auto;margin-right:auto;border:1.43em solid #e5e5e5;padding:1px;background:black;
+}
+#leaf-content img.left,#leaf-content img.right{
+border:none;background:none;padding:none;
+}
+#leaf-content img.left{
+margin:0 1.5em 1em 0;float:left;
+}
+#leaf-content img.right{
+margin:0 0 .75em 1em;float:right;
+}
+div#leaf-content.with-diagrams img{
+display:block;margin-left:auto;margin-right:auto;background:none;border:none;
+}
+span.amp{
+font-family:"Palatino","Constantia","Palatino Linotype",serif;font-style:italic;
+}
+.flattr{
+display:none;
+}
+a{
+text-decoration:underline;color:#c06;
+}
+footer{
+display:none;
+}
+""",
     "manifesthead": """<h2>""" + _("Commit (click to see the diff)")+""": <a href='../../commit/{hex}.html'>{hex}</a></h2>
 <p>{desc}</p><p>{user}</p>
     <h2>""" + _("Diffstat") + """</h2>
@@ -204,8 +703,39 @@ def writeoverview(ui, repo, target, name
     """Create the overview page"""
     ui.debug("[staticsite] writeoverview: header\n")
     overview = ""
-    # get the title
-    overview += templates["head"].replace("{reponame}", name).replace("{title}", name)
+    # start with the nav
+    nav = ""
+    # now the links to the log and the files.
+    nav += "<a href='commits'>" + _("changelog") + "</a> | <a href='src/" + repo["tip"].hex() + "/'>" + _("files") + "</a>"
+    # and the bugs
+    openbugs, resolvedbugs = getbugs(ui, repo)
+    if openbugs or resolvedbugs:
+        nav += " | <a href=\"bugs\">" + _("bugs") + "</a>"
+        if openbugs:
+            nav += " <span class=\"bugnumbers\">(<span class=\"openbugnumber\"><a href=\"bugs#open\">" + str(len(openbugs)) + "!</a></span> "
+        else:
+            nav += " <span class=\"bugnumber openbugnumberzero\">0</span>"
+        nav += "<span class=\"bugnumber resolvedbugnumber\"><a href=\"bugs#resolved\">" + str(len(resolvedbugs)) + "√</a></span>)</span>"
+    
+    # and the forks
+    ui.debug("[staticsite] writenav: header: forks\n")
+    forks = getforkinfo(ui, target)
+    if forks:
+        nav += " | " + _("forks: ")
+        for forkname, forkuri in forks.items():
+            ui.debug("[staticsite] writenav: fork: " + forkname + ": " + forkuri + "\n")
+            ui.debug("[staticsite] writenav: forks: getforkdir\n")
+            nav += "<a href='" + getforkdir(target, forkname) + "'>" + forkname + "</a> "
+            ui.debug("[staticsite] writenav: forks: getincoming\n")
+            incoming, fn, localother = getincoming(ui, repo, otheruri=forkuri, othername=forkname)
+            nav += "<small>(" + str(len(incoming))
+            ui.debug("[staticsite] writenav: forks: getoutgoing\n")
+            outgoing, fn, localother = getoutgoing(ui, repo, otheruri=forkuri, othername=forkname)
+            nav += "<small>↓↑</small>" + str(len(outgoing)) + ")</small> "
+            
+    
+    # embed in the overview via the template
+    overview += templates["head"].replace("{reponame}", name).replace("{title}", name).replace("{nav}", nav).replace("{relpath}", "./")
     # add a short identifier from the first line of the readme, if it
     # exists # TODO: Parse different types of readme files
     readme = name
@@ -217,35 +747,6 @@ def writeoverview(ui, repo, target, name
             overview += readme_intro
             overview += "</div>"
             break
-    # now the links to the log and the files.
-    overview += "\n<p id='nav'><a href='commits'>" + _("changelog") + "</a> | <a href='src/" + repo["tip"].hex() + "/'>" + _("files") + "</a>"
-    # and the bugs
-    openbugs, resolvedbugs = getbugs(ui, repo)
-    if openbugs or resolvedbugs:
-        overview += " | <a href=\"bugs\">" + _("bugs") + "</a>"
-        if openbugs:
-            overview += " <span class=\"bugnumbers\">(<span class=\"openbugnumber\"><a href=\"bugs#open\">" + str(len(openbugs)) + "!</a></span> "
-        else:
-            overview += " <span class=\"bugnumber openbugnumberzero\">0</span>"
-        overview += "<span class=\"bugnumber resolvedbugnumber\"><a href=\"bugs#resolved\">" + str(len(resolvedbugs)) + "√</a></span>)</span>"
-    
-    # and the forks
-    ui.debug("[staticsite] writeoverview: header: forks\n")
-    forks = getforkinfo(ui, target)
-    if forks:
-        overview += " | " + _("forks: ")
-        for forkname, forkuri in forks.items():
-            ui.debug("[staticsite] writeoverview: fork: " + forkname + ": " + forkuri + "\n")
-            ui.debug("[staticsite] writeoverview: forks: getforkdir\n")
-            overview += "<a href='" + getforkdir(target, forkname) + "'>" + forkname + "</a> "
-            ui.debug("[staticsite] writeoverview: forks: getincoming\n")
-            incoming, fn, localother = getincoming(ui, repo, otheruri=forkuri, othername=forkname)
-            overview += "<small>(" + str(len(incoming))
-            ui.debug("[staticsite] writeoverview: forks: getoutgoing\n")
-            outgoing, fn, localother = getoutgoing(ui, repo, otheruri=forkuri, othername=forkname)
-            overview += "<small>↓↑</small>" + str(len(outgoing)) + ")</small> "
-            
-    overview += "</p>"
     
     ui.debug("[staticsite] writeoverview: shortlog\n")
     # now add the 5 most recent log entries
@@ -356,7 +857,7 @@ def writelog(ui, repo, target, name):
             d = commits
             logs.append([os.path.join(d, "index.html"), ""])
             
-        logs[-1][-1] += templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name)
+        logs[-1][-1] += templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name).replace("{nav}", "").replace("{relpath}", "../")
         for c in range(ck*100+1, min(len(repo.changelog)+1, (ck+1)*100)):
             ctx = repo.changectx(str(-c))
             t.show(ctx)
@@ -510,7 +1011,8 @@ def getforkdata(ui, repo, target, name, 
     html = templates["forkhead"].replace(
             "{forkname}", forkname).replace(
         "{reponame}", name).replace(
-                "{forkuri}", safeuri(forkuri))
+                "{forkuri}", safeuri(forkuri)).replace(
+                    "{relpath}", "../../")
         
     # prepare the log templater
     t = cmdutil.changeset_templater(ui, repo, patch=False, diffopts=None, mapfile=None, buffered=False)
@@ -591,7 +1093,7 @@ def writecommitsforchlist(ui, repo, targ
         if not force and os.path.isfile(cpath):
             continue
         with open(cpath, "w") as cf:
-            cf.write(templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name))
+            cf.write(templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name).replace("{nav}", "").replace("{relpath}", "../"))
             ui.pushbuffer()
             t.show(ctx)
             cf.write(ui.popbuffer())
@@ -639,7 +1141,7 @@ def writebugs(ui, repo, target, name):
         content += "<li><a href=\"" + bug.fullid + ".html\">" + bug.shortid + "</a> - " + htmlescape(bug.description) + "</li>\n"
     content += "</ul>\n"
     with open(bugslist, "w") as f:
-        f.write(templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name))
+        f.write(templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name).replace("{nav}", "").replace("{relpath}", "../"))
         f.write(content)
         f.write(templates["foot"].replace("{reponame}", "<a href='../'>"+name+"</a>"))
     # write all bug details
@@ -649,13 +1151,12 @@ def writebugs(ui, repo, target, name):
         body += "<pre>" + bug.details + "</pre>\n"
         body += "<hr>"
         body += "- <a href=\"index.html\">" + _("all bugs") + "</a> -"
-        content = templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name)
+        content = templates["head"].replace("{reponame}", "<a href='../'>"+name+"</a>").replace("{title}", name).replace("{nav}", "").replace("{relpath}", "../")
         content += body
         content += templates["foot"].replace("{reponame}", "<a href='../'>"+name+"</a>")
         try:
-            with open(bugsfile) as bf:
-                if not bf.read() == content:
-                    raise Exception("bugfile content does not match content to write. Needs overwriting.")
+            if not contentequals(bugsfile, content):
+                raise Exception("bugfile content does not match content to write. Needs overwriting.")
         except Exception as e: # generic exception: If anything went wrong, we need to write the file.
             print "Overwriting bugs file", bugsfile, "; Reason:", e
             with open(bugsfile, "w") as bf:
@@ -762,10 +1263,11 @@ def writesourcetreeforchlist(ui, repo, t
         try:
             os.makedirs(os.path.dirname(filepath))
         except OSError: pass # exists
+        content = templates["head"].replace("{reponame}", "<a href='../../'>"+name+"</a>").replace("{title}", name).replace("{nav}", "").replace("{relpath}", "../../")
+        content += createindex(ui, repo, target, ctx)
+        content += templates["foot"].replace("{reponame}", "<a href='../../'>"+name+"</a>")
         with open(filepath, "w") as f:
-            f.write(templates["head"].replace("{reponame}", "<a href='../../'>"+name+"</a>").replace("{title}", name))
-            f.write(createindex(ui, repo, target, ctx))
-            f.write(templates["foot"].replace("{reponame}", "<a href='../../'>"+name+"</a>"))
+            f.write(content)
 
 
 def writesourcetree(ui, repo, target, name, force, rawfiles=False):