My static website generator using poole https://www.xythobuz.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

page.html 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="{{ htmlspecialchars(__encoding__) }}" />
  5. <title>{{ htmlspecialchars(page.title) }} (#) xythobuz.de</title>
  6. <meta name="description" content="{{ htmlspecialchars(page.get("description", "Electronics & Software Projects")) }}" />
  7. <meta name="keywords" content="{{ htmlspecialchars(page.get("keywords", "xythobuz")) }}" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <link rel="author" href="xythobuz@xythobuz.de">
  10. <link rel="shortcut icon" href="img/favicon.ico">
  11. <link rel="alternate" type="application/rss+xml" title="Blog" href="rss.xml">
  12. <link type="text/css" rel="stylesheet" href="css/sh_bright.min.css" />
  13. <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" media="screen" />
  14. <link rel="stylesheet" href="css/bootstrap-responsive.min.css" type="text/css" media="screen" />
  15. <link rel="stylesheet" href="css/gh-fork-ribbon.css" />
  16. <link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
  17. <script type="text/javascript" src="js/sh_main.js"></script>
  18. <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
  19. <script type="text/javascript" src="js/bootstrap.min.js"></script>
  20. <!--%
  21. if page.get("flattr", "false") == "true":
  22. print "<script type='text/javascript'>"
  23. print "/* <![CDATA[ */"
  24. print "(function() {"
  25. print "var s = document.createElement('script');"
  26. print "var t = document.getElementsByTagName('script')[0];"
  27. print "s.type = 'text/javascript';"
  28. print "s.async = true;"
  29. print "s.src = '//api.flattr.com/js/0.6/load.js?mode=auto&uid=xythobuz&category=text';"
  30. print "t.parentNode.insertBefore(s, t);"
  31. print "})();"
  32. print "/* ]]> */"
  33. print "</script>"
  34. %-->
  35. </head>
  36. <body onload="sh_highlightDocument('/js/sh/', '.min.js');" style="font-size: 1.1em; font-family: 'Droid Sans', sans-serif;">
  37. <!--%
  38. if page.get("github", "") != "":
  39. # GitHub Fork-Me Ribbon
  40. print '<div class="github-fork-ribbon-wrapper right fixed">'
  41. print '<div class="github-fork-ribbon"><a href="'
  42. print page.github
  43. print '">Fork me on GitHub</a></div></div>'
  44. %-->
  45. <div class="navbar navbar-fixed-top">
  46. <div class="navbar-inner">
  47. <ul class="nav">
  48. <!--%
  49. mpages = [p for p in pages if p.get("parent", "") == "main" and p.lang == "en"]
  50. mpages.sort(key=lambda p: int(p["position"]))
  51. entry = '<li><a href="%s">%s</a></li>'
  52. newEntry = '<li class="dropdown"><a href="%s" class="dropdown-toggle" data-toggle="dropdown">%s<b class="caret"></b></a><ul class="dropdown-menu">'
  53. newEntry2 = '<li class="dropdown-submenu"><a href="%s" class="dropdown-toggle disabled" data-toggle="dropdown">%s</a><ul class="dropdown-menu">'
  54. for p in mpages:
  55. sub = [r for r in pages if r.get("parent", "") == p.url.replace("/", "").replace(".html", "") and r.lang == "en"]
  56. sub.sort(key=lambda r: int(r["position"]))
  57. if len(sub) > 0:
  58. print(newEntry % (htmlspecialchars(p["url"]), htmlspecialchars(p["title"])))
  59. for r in sub:
  60. subsub = [s for s in pages if s.get("parent", "") == r.url.replace("/", "").replace(".html", "") and s.lang == "en"]
  61. subsub.sort(key = lambda s: int(s["position"]))
  62. if len(subsub) > 0:
  63. print(newEntry2 % (htmlspecialchars(r["url"]), htmlspecialchars(r["title"])))
  64. for s in subsub:
  65. print(entry % (htmlspecialchars(s["url"]), htmlspecialchars(s["title"])))
  66. print("</ul>")
  67. else:
  68. print(entry % (htmlspecialchars(r["url"]), htmlspecialchars(r["title"])))
  69. print("</ul>")
  70. else:
  71. print(entry % (htmlspecialchars(p["url"]), htmlspecialchars(p["title"])))
  72. %-->
  73. <li class="divider-vertical"></li>
  74. <li><a href="http://xythobuz.de/lastmusic">♫</a></li>
  75. <!--%
  76. tmp = [p for p in page["lang_links"].iteritems()]
  77. if len(tmp) > 1:
  78. print '<li class="divider-vertical"></li>'
  79. print '<li class="dropdown"><a href="language.html" class="dropdown-toggle" data-toggle="dropdown">Language<b class="caret"></b></a><ul class="dropdown-menu">'
  80. print " ".join(["<li><a href='%s'>%s</a></li>" % (url, lang) for lang, url in page["lang_links"].iteritems()]).replace(">en<", ">English<").replace(">de<", ">Deutsch<")
  81. print "</ul></li>"
  82. print ''
  83. %-->
  84. <li class="divider-vertical"></li>
  85. <script type="text/javascript">
  86. function sitesearch(curobj) {
  87. curobj.q.value = "site:xythobuz.de " + curobj.r.value
  88. }
  89. </script>
  90. <form class="navbar-search" action="http://www.google.com/search" method="get" onSubmit="sitesearch(this)">
  91. <input name="q" type="hidden" />
  92. <input name="r" type="text" class="search-query span2" placeholder="Search..." />
  93. </form>
  94. </ul>
  95. </div>
  96. </div>
  97. <div style="width: 75%; margin-left: auto; margin-right: auto; padding-top: 50px;">
  98. {{ __content__ }}
  99. <!--%
  100. import sys
  101. # Horizontal Line and Centered DIV
  102. if page.get("flattr", "false") == "true" or page.get("twitter", "") != "" or page.get("reddit", "") != "" or page.get("github", "") != "" or page.get("print", "false") == "true":
  103. print '<hr>'
  104. print '<div style="text-align: center;">'
  105. # Print and PDF Buttons
  106. if page.get("print", "false") == "true":
  107. print """<script>var pfHeaderImgUrl = '';var pfHeaderTagline = '';var pfdisableClickToDel = 0;var pfHideImages = 0;var pfImageDisplayStyle = 'right';var pfDisablePDF = 0;var pfDisableEmail = 0;var pfDisablePrint = 0;var pfCustomCSS = '';var pfBtVersion='1';(function(){var js, pf;pf = document.createElement('script');pf.type = 'text/javascript';if('https:' == document.location.protocol){js='https://pf-cdn.printfriendly.com/ssl/main.js'}else{js='http://cdn.printfriendly.com/printfriendly.js'}pf.src=js;document.getElementsByTagName('head')[0].appendChild(pf)})();</script><a href="http://www.printfriendly.com" style="color:#6D9F00;text-decoration:none;" class="printfriendly" onclick="window.print();return false;" title="Printer Friendly and PDF"><img style="border:none;margin:0 6px" src="https://pf-cdn.printfriendly.com/images/icons/pf-print-icon.gif" width="16" height="15" alt="Print Friendly Version of this page" />Print <img style="border:none;margin:0 6px" src="https://pf-cdn.printfriendly.com/images/icons/pf-pdf-icon.gif" width="12" height="12" alt="Get a PDF version of this webpage" />PDF</a>"""
  108. # Flattr Button
  109. if page.get("flattr", "false") == "true":
  110. print '<span id="flattr">'
  111. sys.stdout.write('<a class="FlattrButton" href="')
  112. sys.stdout.write(BASE_URL)
  113. sys.stdout.write('/')
  114. sys.stdout.write(page.url)
  115. sys.stdout.write('" title="')
  116. sys.stdout.write(htmlspecialchars(page.title))
  117. sys.stdout.write('" data-flattr-button="compact">')
  118. sys.stdout.write(htmlspecialchars(page.get("description", page.title)))
  119. sys.stdout.write("</a>\n")
  120. print '</span>'
  121. # Twitter Button
  122. if page.get("twitter", "") != "":
  123. print '<span id="twitter">'
  124. sys.stdout.write('<a href="https://twitter.com/share" class="twitter-share-buttdata-via="')
  125. sys.stdout.write(page.twitter)
  126. sys.stdout.write('" data-dnt="true" data-related="')
  127. sys.stdout.write(page.twitter)
  128. sys.stdout.write('" data-count="vertical">Tweet</a>')
  129. sys.stdout.write('<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s;if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twi.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitwjs");')
  130. sys.stdout.write("</script>\n")
  131. print '</span>'
  132. # Reddit Button
  133. if page.get("reddit", "") != "":
  134. print '<span id="reddit">'
  135. sys.stdout.write('<script type="text/javascript">reddit_url = "')
  136. if (page.reddit == "true"):
  137. sys.stdout.write(BASE_URL)
  138. sys.stdout.write('/')
  139. sys.stdout.write(page.url)
  140. else:
  141. sys.stdout.write(page.reddit)
  142. sys.stdout.write('";</script>')
  143. sys.stdout.write("\n")
  144. sys.stdout.write('<script type="text/javascript" src="http://www.redcom/static/button/button2.js"></script>')
  145. sys.stdout.write("\n")
  146. print '</span>'
  147. # GitHub Fork Button. Place this last!
  148. if page.get("github", "") != "":
  149. print '<span id="github">'
  150. sys.stdout.write('<a href="')
  151. sys.stdout.write(page.github)
  152. sys.stdout.write('" class="gitforked-button gitforked-forks gitforked-watchers"></a>')
  153. sys.stdout.write("\n")
  154. print '</span>'
  155. # Close DIV, horizontal line when no comments
  156. if page.get("flattr", "false") == "true" or page.get("twitter", "") != "" or page.get("reddit", "") != "" or page.get("github", "") != "" or page.get("print", "false") == "true":
  157. print '</div>'
  158. if page.get("comments", "false") != "true":
  159. print '<hr>'
  160. # Disqus Comments
  161. if page.get("comments", "false") == "true":
  162. print '<hr><div id="disqus_thread"></div>'
  163. print '<script type="text/javascript">'
  164. print 'var disqus_shortname = "xythobuz";'
  165. print '(function() {'
  166. print 'var dsq = document.createElement("script"); dsq.type = "text/javascript"; dsq.async = true;'
  167. print 'dsq.src = "http://" + disqus_shortname + ".disqus.com/embed.js";'
  168. print '(document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0] ).appendChild(dsq);'
  169. print '})();'
  170. print '</script>'
  171. print '<noscript>Please enable JavaScript to view the <a href="http://disqus. com/?ref_noscript">comments powered by Disqus.</a></noscript>'
  172. print '<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>'
  173. elif page.get("comments", "false") != "false":
  174. print '<p><a href="%s">Head over here to discuss this article!</a></p>' % page.get("comments", "false")
  175. %-->
  176. </div>
  177. <div style="color: gray; text-align: center;">
  178. Made with <a href="http://bitbucket.org/obensonne/poole">Poole</a>, <a href="http://twitter.github.io/bootstrap/index.html">Bootstrap</a> and <a href="http://shjs.sourceforge.net">SHJS</a>
  179. &middot;
  180. Licensed as <a href="http://creativecommons.org/licenses/by/3.0">CC-BY</a>
  181. </div>
  182. <img src="http://xythobuz.de/stats/count.php?img" alt="Analytics">
  183. <script src="http://gitforked.com/api/1.1/button.js" type="text/javascript"></script>
  184. <script type="text/javascript">
  185. var _gaq = _gaq || [];
  186. _gaq.push(['_setAccount', 'UA-39163591-1']);
  187. _gaq.push(['_setDomainName', 'xythobuz.org']);
  188. _gaq.push(['_setAllowLinker', true]);
  189. _gaq.push(['_trackPageview']);
  190. setTimeout("_gaq.push(['_trackEvent', '30_seconds', 'read'])", 30000);
  191. (function() {
  192. var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  193. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  194. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  195. })();
  196. </script>
  197. </body>
  198. </html>