aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Ritter <xeno@goliath.thehappy.de>2009-02-28 18:02:23 +0100
committerStefan Ritter <xeno@goliath.thehappy.de>2009-02-28 18:02:23 +0100
commitfc1b6997235fe0249b1f5fdf0e47d58734cee8f3 (patch)
treed10a158f360df9c9f5af2cefc50f2d0b8749589b
Initial release
-rwxr-xr-xblogthon.cgi137
-rw-r--r--configuration14
-rw-r--r--entries/Demo.txt5
-rw-r--r--static/01-Support1
-rw-r--r--styles/blogthon.css81
-rw-r--r--styles/blogthon_img/title_background.pngbin0 -> 327 bytes
6 files changed, 238 insertions, 0 deletions
diff --git a/blogthon.cgi b/blogthon.cgi
new file mode 100755
index 0000000..f85eb01
--- /dev/null
+++ b/blogthon.cgi
@@ -0,0 +1,137 @@
+#!/usr/bin/python
+
+# This program is free software. It comes without any warranty, to
+# the extent permitted by applicable law. You can redistribute it
+# and/or modify it under the terms of the Do What The Fuck You Want
+# To Public License, Version 2, as published by Sam Hocevar. See
+# http://sam.zoy.org/wtfpl/COPYING for more details.
+
+import cgi
+import os
+import time
+import glob
+import re
+import ConfigParser
+
+configuration = ConfigParser.ConfigParser()
+configuration.read('configuration')
+
+blog_title = configuration.get('personal', 'blog_title')
+keywords = configuration.get('personal', 'keywords')
+entries_dir = configuration.get('personal', 'entries_dir')
+entries_suffix = configuration.get('personal', 'entries_suffix')
+staticpages_dir = configuration.get('personal', 'staticpages_dir')
+style = configuration.get('look', 'style')
+entries_per_page = configuration.getint('look', 'entries_per_page')
+monthlist = configuration.get('look', 'monthlist')
+staticpages = configuration.get('look', 'staticpages')
+permalinks = configuration.get('look', 'permalinks')
+newest_first = configuration.get('look', 'newest_first')
+
+action = cgi.FieldStorage()
+month_display = action.getvalue('m')
+post_display = action.getvalue('p')
+static_display = action.getvalue('s')
+site_display = action.getvalue('i')
+if not month_display: month_display = ""
+if not post_display: post_display = ""
+if not static_display: static_display = ""
+if not site_display: site_display = ""
+
+print 'Content-type: text/html\n'
+print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
+print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
+print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
+print ' <head>'
+print ' <title>' + blog_title + '</title>'
+print ' <meta http-equiv="content-type" content="text/html; charset=utf-8" />'
+print ' <meta name="keywords" content="' + keywords + '" />'
+print ' <meta name="description" content="' + blog_title + '" />'
+print ' <link rel="stylesheet" type="text/css" href="styles/' + style + '" />'
+print ' </head>'
+print ' <body>'
+print ' <div class="title"><a href="?" class="title">' + blog_title + '</a></div>'
+
+entries = []
+entries_list = glob.glob(entries_dir + '*.' + entries_suffix)
+
+for entry in entries_list:
+ timestamp = os.stat(entry)
+ timestamp = time.localtime(timestamp[8])
+ entry = timestamp, entry
+ entries.append(entry)
+
+if newest_first:
+ entries.sort(reverse=True)
+else:
+ entries.sort()
+
+print ' <div class="sidebar">'
+
+if staticpages:
+ staticpages = []
+ staticpages_list = glob.glob(staticpages_dir + '*')
+ staticpages_list.sort()
+ print ' <div class="staticpages">'
+ for staticpage in staticpages_list:
+ title = re.sub('\w+?\/\d+?-', '', staticpage)
+ link = re.sub('\w+?\/', '', staticpage)
+ print ' &nbsp;<a href="?s=' + link + '">' + title + '</a>&nbsp;<br />'
+ if monthlist and staticpages_list != []: print ' <br />'
+ print ' </div>'
+
+if monthlist:
+ olddate = ""
+ print ' <div class="monthlist">'
+ for entry in entries:
+ date = time.strftime("%m%Y", entry[0])
+ date_display = time.strftime("%h %Y", entry[0])
+ if not olddate == date:
+ print ' <a href="?m=' + date + '">' + date_display + '</a><br />'
+ olddate = date
+ print ' </div>'
+
+print ' </div>'
+print ' <div class="content">'
+
+if static_display != "": # Show Staticpage
+ content = open(staticpages_dir + static_display, "r")
+ print ' <div class="entrytitle">' + re.sub('\d+?-', '', static_display) + '</div>'
+ print ' <div class="entry"><p>'
+ for line in content:
+ print ' ' + line.strip() + '<br />'
+ print ' </p></div>'
+ content.close()
+else: # Show regular entry
+ entry_counter = 0
+ for entry in entries:
+ date = time.strftime("%c", entry[0])
+ date_to_compare = time.strftime("%m%Y", entry[0]) # Needed for permalinks
+ entry = entry[1]
+ title = entry.replace('entries/', '', 1)
+ title = title.replace('.txt', '')
+ entry_counter += 1
+
+ if month_display == date_to_compare or not month_display:
+ if post_display == title or not post_display:
+ if entry_counter <= entries_per_page:
+ content = open(entry, "r")
+ if permalinks:
+ print ' <div class="entrytitle"><a href="?p=' + title + '" class="entrytitle">' + title + ' <small>(' + date + ')</small></a></div>'
+ else:
+ print ' <div class="entrytitle">' + title + ' <small>(' + date + ')</small></div>'
+ print ' <div class="entry"><p>'
+ for line in content:
+ print ' ' + line.strip() + '<br />'
+ print ' </p></div>'
+ print ' <br /><br />'
+ content.close()
+
+ if entry_counter > entries_per_page: # Display pagelist
+ print ' <div class="entry"><a href=?>[previous page]</a> <a href=?>[next page]</a></div>'
+
+print ' </div>'
+print ' </body>'
+print '</html>'
+
+# vim: set tw=0 ts=4:
diff --git a/configuration b/configuration
new file mode 100644
index 0000000..68c0285
--- /dev/null
+++ b/configuration
@@ -0,0 +1,14 @@
+[personal]
+blog_title: A BlogThon Blog
+keywords: please,change,me
+entries_dir: entries/
+entries_suffix: txt
+staticpages_dir: static/
+
+[look]
+style: blogthon.css
+entries_per_page: 20
+monthlist: True
+staticpages: True
+permalinks: True
+newest_first: True
diff --git a/entries/Demo.txt b/entries/Demo.txt
new file mode 100644
index 0000000..5c4e70f
--- /dev/null
+++ b/entries/Demo.txt
@@ -0,0 +1,5 @@
+Welcome to your new BlogThon Blog.
+
+You can add new entries by just put it into a textfile under the "entries" folder with the suffix ".txt". They are sorted by using the Unix timestamp. Staticpages are the same as entries, but without a suffix and with a leading number and a - (like 35-foo). They are stored under the folder "static".
+
+Have fun with your new Blog.
diff --git a/static/01-Support b/static/01-Support
new file mode 100644
index 0000000..147f272
--- /dev/null
+++ b/static/01-Support
@@ -0,0 +1 @@
+If you have any questions regarding BlogThon, you can join our IRC channel on irc.thehappy.de #thehappy.de . You can also write a mail to xeno@thehappy.de.
diff --git a/styles/blogthon.css b/styles/blogthon.css
new file mode 100644
index 0000000..7d7568f
--- /dev/null
+++ b/styles/blogthon.css
@@ -0,0 +1,81 @@
+.html, body {
+ background: #000;
+ color: #FFF;
+ margin: 0px;
+ overflow-x: hidden;
+}
+
+img {
+ border: 0;
+}
+
+a:link, a:active, a:visited, a:hover {
+ font-family: Verdana;
+ font-size: 12px;
+ color: #FC3;
+ text-decoration: none;
+}
+
+a.title:link, a.title:hover, a.title:active, a.title:visited {
+ position: absolute;
+ text-align: center;
+ width: 100%;
+ height: 25px;
+ background-image: url(blogthon_img/title_background.png);
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 18px;
+ color: #FC3;
+}
+
+.content { /* Container for entrytitle and entry */
+ position: absolute;
+ top: 30px;
+ left: 6px;
+ width: 600px;
+}
+
+.entrytitle {
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 16px;
+ color: #335599;
+ text-decoration: underline;
+}
+a.entrytitle:link, a.entrytitle:hover, a.entrytitle:visited, a.entrytitle:active {
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 16px;
+ color: #335599;
+ text-decoration: underline;
+}
+
+.entry {
+ font-family: Verdana;
+ font-size: 12px;
+ color: #FFF;
+ margin-left: 15px;
+}
+
+.sidebar {
+ position: absolute;
+ right: 6px;
+ top: 30px;
+ background: #0F0;
+}
+
+.monthlist {
+ font-family: Verdana;
+ font-size: 12px;
+ color: #5577BB;
+ text-align: center;
+ background: #111;
+}
+
+.staticpages {
+ font-family: Verdana;
+ font-size: 12px;
+ color: #5577BB;
+ text-align: center;
+ background: #111;
+}
diff --git a/styles/blogthon_img/title_background.png b/styles/blogthon_img/title_background.png
new file mode 100644
index 0000000..961d0fe
--- /dev/null
+++ b/styles/blogthon_img/title_background.png
Binary files differ