diff options
Diffstat (limited to 'blogthon.cgi')
-rwxr-xr-x | blogthon.cgi | 340 |
1 files changed, 193 insertions, 147 deletions
diff --git a/blogthon.cgi b/blogthon.cgi index 2acc7f5..983aa99 100755 --- a/blogthon.cgi +++ b/blogthon.cgi @@ -15,6 +15,7 @@ import time import glob import re import ConfigParser +import md5 configuration = ConfigParser.ConfigParser() configuration.read('configuration') @@ -38,10 +39,12 @@ month_display = action.getvalue('m') post_display = action.getvalue('p') static_display = action.getvalue('s') allentries_display = action.getvalue('a') +feed_display = action.getvalue('feed') if not month_display: month_display = "" if not post_display: post_display = "" if not static_display: static_display = "" if not allentries_display: allentries_display = "" +if not feed_display: feed_display = "" # Commentstuff ctitle = action.getvalue('ctitle') @@ -75,20 +78,7 @@ if cname and ctext and ctitle: content.write("." + line + "\n") content.close() -print 'Content-type: text/html\n' -print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' -print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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>' - +# Read entries and store their title and timestamp entries = [] entries_list = glob.glob(entries_dir + '*.' + entries_suffix) @@ -103,139 +93,195 @@ if newest_first: else: entries.sort() -print ' <div class="screen"><div class="sidebar">' - -# Sidebar: Staticpages -if staticpages == "True": - staticpages = [] - staticpages_list = glob.glob(staticpages_dir + '*') - staticpages_list.sort() - print ' <div class="sidebarentry">' - print ' <small>pages</small><br />' - for staticpage in staticpages_list: - title = re.sub('\w+?\/\d+?-', '', staticpage) - link = re.sub('\w+?\/', '', staticpage) - # The ultimative lookshe-hack *g* - if title == "lookshe": - print ' <a href="?s=' + link + '">/me</a> <br />' - else: - print ' <a href="?s=' + link + '">' + title + '</a> <br />' - - if monthlist == "True": print ' <br />' - print ' </div>' - -# Sidebar: Monthlist -if monthlist == "True": - olddate = "" - print ' <div class="sidebarentry">' - print ' <small>months</small><br />' - 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 - if linklist == "True": print ' <br />' - print ' </div>' - -# Sidebar: Linklist -if linklist == "True": - print ' <div class="sidebarentry">' - print ' <small>links</small><br />' - content = open("linklist", "r") - for line in content: - if line.strip() is "": - print ' <br />' - else: - print ' <a href="' + line.split(" ")[0] + '" target="_blank">' + line.split(" ", 1)[1].strip() + '</a> <br />' - content.close() - 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', '') - - if month_display == date_to_compare or not month_display: - if post_display == title or not post_display: - if allentries_display == "1" or entry_counter < entries_per_page: - content = open(entry, "r") - if permalinks: # Title as permalink... - print ' <div class="entrytitle"><a href="?p=' + title + '" class="entrytitle">' + title + ' <small>(' + date + ')</small></a></div>' - else: # ... or not - print ' <div class="entrytitle">' + title + ' <small>(' + date + ')</small></div>' - print ' <div class="entry">' - for line in content: - print ' ' + line.strip() + '<br />' - - # Comments are shown when post_display and comments_file - comments_file = glob.glob(entries_dir + title + '.comments') - if post_display: - if comments_file: - print ' <br /><hr />' - comments_file = glob.glob(entries_dir + title + '.comments') - comments_content = open(comments_file[0], "r") - for line in comments_content: - if line.split(".", 1)[0] == "-": - print ' <br />' - print ' <b><i>' + line.split(".", 1)[1].strip() + '</i><small> wrote at ' - elif line.split(".", 1)[0] == "+": - print ' ' + line.split(".", 1)[1].strip() + ':</small></b><br />' - else: - line = line.split(".", 1)[1] - print ' ' + line.strip() + '<br />' - comments_content.close() - - # Form for adding comments - print ' <br /><br /><br />' - print ' <form action="" method="post">' - print ' <input type="hidden" name="ctitle" value="' + title + '" />' - print ' <label for="cname">name:</label><input type="text" id="cname" name="cname" />' - print ' <br /><label for="ctext">text:</label><textarea rows="5" cols="80" id="ctext" name="ctext"></textarea>' - print ' <br /><input type="submit" id="submit" value="post comment" />' - print ' </form>' - - if comments == "True": +# Generate atom feed +if feed_display == "atom": + title = str(entries[0][1]).replace('entries/', '', 1).replace('.' + entries_suffix, '') + date = entries[0][0] + + print 'Content-type: text/html\n' + print '<?xml version="1.0" encoding="utf-8"?>' + print '<feed xmlns="http://www.w3.org/2005/Atom">' + print ' <author>' + print ' <name>' + blog_title + '</name>' + print ' </author>' + print ' <title>' + blog_title + '</title>' + + blog_title_md5sum = md5.new(blog_title).hexdigest() + blog_title_md5sum_1 = blog_title_md5sum[0:8] + blog_title_md5sum_2 = blog_title_md5sum[8:12] + blog_title_md5sum_3 = blog_title_md5sum[12:16] + blog_title_md5sum_4 = blog_title_md5sum[16:20] + blog_title_md5sum_5 = blog_title_md5sum[20:32] + + print ' <id>urn:uuid:' + blog_title_md5sum_1 + '-' + blog_title_md5sum_2 + '-' + blog_title_md5sum_3 + '-' + blog_title_md5sum_4 + '-' + blog_title_md5sum_5 + '</id>' + print ' <updated>' + str(date[0]) + '-' + str(date[1]) + '-' + str(date[2]) + 'T' + str(date[3]) + ':' + str(date[4]) + ':' + str(date[5]) + 'Z</updated>' + print '' + print ' <entry>' + + title_md5sum = md5.new(title).hexdigest() + title_md5sum_1 = title_md5sum[0:8] + title_md5sum_2 = title_md5sum[8:12] + title_md5sum_3 = title_md5sum[12:16] + title_md5sum_4 = title_md5sum[16:20] + title_md5sum_5 = title_md5sum[20:32] + + print ' <title>' + title + '</title>' + print ' <link href="http://www.thehappy.de/~xeno/"/>' + print ' <id>urn:uuid:' + title_md5sum_1 + '-' + title_md5sum_2 + '-' + title_md5sum_3 + '-' + title_md5sum_4 + '-' + title_md5sum_5 + '</id>' + print ' <updated>' + str(date[0]) + '-' + str(date[1]) + '-' + str(date[2]) + 'T' + str(date[3]) + ':' + str(date[4]) + ':' + str(date[5]) + 'Z</updated>' + print ' </entry>' + print '</feed>' + +# Generate regular page +else: + + print 'Content-type: text/html\n' + print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' + print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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>' + + print ' <div class="screen"><div class="sidebar">' + + # Sidebar: Staticpages + if staticpages == "True": + staticpages = [] + staticpages_list = glob.glob(staticpages_dir + '*') + staticpages_list.sort() + print ' <div class="sidebarentry">' + print ' <small>pages</small><br />' + for staticpage in staticpages_list: + title = re.sub('\w+?\/\d+?-', '', staticpage) + link = re.sub('\w+?\/', '', staticpage) + # The ultimative lookshe-hack *g* + if title == "lookshe": + print ' <a href="?s=' + link + '">/me</a> <br />' + else: + print ' <a href="?s=' + link + '">' + title + '</a> <br />' + + if monthlist == "True": print ' <br />' + print ' </div>' + + # Sidebar: Monthlist + if monthlist == "True": + olddate = "" + print ' <div class="sidebarentry">' + print ' <small>months</small><br />' + 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 + if linklist == "True": print ' <br />' + print ' </div>' + + # Sidebar: Linklist + if linklist == "True": + print ' <div class="sidebarentry">' + print ' <small>links</small><br />' + content = open("linklist", "r") + for line in content: + if line.strip() is "": + print ' <br />' + else: + print ' <a href="' + line.split(" ")[0] + '" target="_blank">' + line.split(" ", 1)[1].strip() + '</a> <br />' + content.close() + 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('.' + entries_suffix, '') + + if month_display == date_to_compare or not month_display: + if post_display == title or not post_display: + if allentries_display == "1" or entry_counter < entries_per_page: + content = open(entry, "r") + if permalinks: # Title as permalink... + print ' <div class="entrytitle"><a href="?p=' + title + '" class="entrytitle">' + title + ' <small>(' + date + ')</small></a></div>' + else: # ... or not + print ' <div class="entrytitle">' + title + ' <small>(' + date + ')</small></div>' + print ' <div class="entry">' + for line in content: + print ' ' + line.strip() + '<br />' + + # Comments are shown when post_display and comments_file comments_file = glob.glob(entries_dir + title + '.comments') - if not comments_file and not post_display: - print ' <div class="comment">' - print ' <ul><li><a href="?p=' + title + '" class="comment">no comments</a></li></ul>' - print ' </div>' - elif comments_file and not post_display: - comments_content = open(comments_file[0], "r") - comments_counter = 0 - for line in comments_content: - if line.split(".", 1)[0] == "-": comments_counter += 1 - print ' <div class="comment">' - print ' <ul><li><a href="?p=' + title + '" class="comment">comments (' + str(comments_counter) + ')</a></li></ul>' - print ' </div>' - comments_content.close() - - print ' </div>' - print ' <br /><br />' - content.close() - entry_counter += 1 - - if not month_display and not post_display and not allentries_display and entry_counter == entries_per_page: # Display pagelist - print ' <div class="entry"><a href=?a=1>View all entries...</a></div>' - -print ' </div></div>' -print ' </body>' -print '</html>' + if post_display: + if comments_file: + print ' <br /><hr />' + comments_file = glob.glob(entries_dir + title + '.comments') + comments_content = open(comments_file[0], "r") + for line in comments_content: + if line.split(".", 1)[0] == "-": + print ' <br />' + print ' <b><i>' + line.split(".", 1)[1].strip() + '</i><small> wrote at ' + elif line.split(".", 1)[0] == "+": + print ' ' + line.split(".", 1)[1].strip() + ':</small></b><br />' + else: + line = line.split(".", 1)[1] + print ' ' + line.strip() + '<br />' + comments_content.close() + + # Form for adding comments + print ' <br /><br /><br />' + print ' <form action="" method="post">' + print ' <input type="hidden" name="ctitle" value="' + title + '" />' + print ' <label for="cname">name:</label><input type="text" id="cname" name="cname" />' + print ' <br /><label for="ctext">text:</label><textarea rows="5" cols="80" id="ctext" name="ctext"></textarea>' + print ' <br /><input type="submit" id="submit" value="post comment" />' + print ' </form>' + + if comments == "True": + comments_file = glob.glob(entries_dir + title + '.comments') + if not comments_file and not post_display: + print ' <div class="comment">' + print ' <ul><li><a href="?p=' + title + '" class="comment">no comments</a></li></ul>' + print ' </div>' + elif comments_file and not post_display: + comments_content = open(comments_file[0], "r") + comments_counter = 0 + for line in comments_content: + if line.split(".", 1)[0] == "-": comments_counter += 1 + print ' <div class="comment">' + print ' <ul><li><a href="?p=' + title + '" class="comment">comments (' + str(comments_counter) + ')</a></li></ul>' + print ' </div>' + comments_content.close() + + print ' </div>' + print ' <br /><br />' + content.close() + entry_counter += 1 + + if not month_display and not post_display and not allentries_display and entry_counter == entries_per_page: # Display pagelist + print ' <div class="entry"><a href=?a=1>View all entries...</a></div>' + + print ' </div></div>' + print ' </body>' + print '</html>' # vim: set tw=0 ts=4: |