622aec5bad
Entries are now floating around the sidebar if there is not enough space for the maxwidth.
171 lines
6.5 KiB
Python
Executable File
171 lines
6.5 KiB
Python
Executable File
#!/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.
|
|
|
|
# Author: Stefan Ritter <xeno@thehappy.de>
|
|
# Description: A simple blogging software
|
|
|
|
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')
|
|
linklist = configuration.get('look', 'linklist')
|
|
permalinks = configuration.get('look', 'permalinks')
|
|
comments = configuration.get('look', 'comments')
|
|
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')
|
|
allentries_display = action.getvalue('a')
|
|
if not month_display: month_display = ""
|
|
if not post_display: post_display = ""
|
|
if not static_display: static_display = ""
|
|
if not allentries_display: allentries_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="screen"><div class="sidebar">'
|
|
|
|
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)
|
|
print ' <a href="?s=' + link + '">' + title + '</a> <br />'
|
|
if monthlist == "True": print ' <br />'
|
|
print ' </div>'
|
|
|
|
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>'
|
|
|
|
if linklist == "True":
|
|
content = open("linklist", "r")
|
|
print ' <div class="sidebarentry">'
|
|
print ' <small>links</small><br />'
|
|
for line in content:
|
|
print ' <a href=' + line.split(" ")[0] + '>' + line.split(" ", 1)[1].strip() + '</a> <br />'
|
|
print ' </div>'
|
|
content.close()
|
|
|
|
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:
|
|
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 />'
|
|
if comments == "True":
|
|
comments_file = glob.glob(entries_dir + title + '.comments')
|
|
if not comments_file:
|
|
print ' <div class="comment">'
|
|
print ' <ul><li><a href=? class="comment">no comments</a></li></ul>'
|
|
print ' </div><br />'
|
|
else:
|
|
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=? class="comment">comments (' + str(comments_counter) + ')</a></li></ul>'
|
|
print ' </div><br />'
|
|
comments_content.close()
|
|
|
|
print ' </p></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:
|