2009-06-01 03:36:30 +02:00
|
|
|
#!/usr/bin/python
|
2009-11-01 15:41:17 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
2009-06-01 03:36:30 +02:00
|
|
|
|
2009-07-29 20:17:16 +02:00
|
|
|
# This program is free software. It comes without any warranty, to
|
2009-02-28 18:02:23 +01:00
|
|
|
# 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.
|
|
|
|
|
2009-05-17 23:19:07 +02:00
|
|
|
# Authors: Stefan Ritter <xeno@thehappy.de>
|
|
|
|
# Adrian Vondendriesch <disco-stu@disco-stu.de>
|
2009-12-03 22:19:56 +01:00
|
|
|
# Pascal Turbing <pascal@turbing.de>
|
2009-03-01 13:55:09 +01:00
|
|
|
# Description: A simple blogging software
|
|
|
|
|
2009-07-24 11:53:09 +02:00
|
|
|
import cgi, os, time, glob, re, md5, sys, random, smtplib
|
2009-02-28 18:02:23 +01:00
|
|
|
import ConfigParser
|
|
|
|
|
2009-03-28 14:30:02 +01:00
|
|
|
def generate_uuid(string):
|
|
|
|
string_md5sum = md5.new(string).hexdigest()
|
2009-12-01 18:14:21 +01:00
|
|
|
string = str.join('-', (string_md5sum[0:8], string_md5sum[8:12], string_md5sum[12:16], string_md5sum[16:20], string_md5sum[20:32]))
|
2009-03-28 14:30:02 +01:00
|
|
|
return string
|
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
def errorpage(string):
|
|
|
|
print 'Content-type: text/html\n'
|
2009-07-29 20:17:16 +02:00
|
|
|
print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
|
|
|
|
print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
|
2009-04-10 12:05:01 +02:00
|
|
|
print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
|
|
|
|
print '<head>'
|
|
|
|
print ' <title>Error!</title>'
|
|
|
|
print '</head>'
|
|
|
|
print '<body>'
|
2009-12-02 11:47:01 +01:00
|
|
|
print ' ' + string
|
2009-04-10 12:05:01 +02:00
|
|
|
print '</body>'
|
|
|
|
print '</html>'
|
|
|
|
sys.exit()
|
2009-03-28 14:30:02 +01:00
|
|
|
|
2009-04-30 10:26:56 +02:00
|
|
|
def document_header(string):
|
|
|
|
if string == "xhtml-transitional":
|
|
|
|
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">'
|
|
|
|
if string == "xhtml-strict":
|
|
|
|
print 'Content-type: text/html\n'
|
|
|
|
print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
|
2009-09-30 12:38:49 +02:00
|
|
|
print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
|
2009-04-30 10:26:56 +02:00
|
|
|
print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
|
|
|
|
if string == "atom":
|
|
|
|
print 'Content-type: application/atom+xml\n'
|
|
|
|
print '<?xml version="1.0" encoding="utf-8"?>'
|
|
|
|
print '<feed xmlns="http://www.w3.org/2005/Atom">'
|
2009-06-05 10:56:00 +02:00
|
|
|
if string == "rss":
|
|
|
|
print 'Content-type: application/rss+xml\n'
|
|
|
|
print '<?xml version="1.0" encoding="utf-8"?>'
|
|
|
|
print '<rss version="2.0">'
|
2009-04-30 10:26:56 +02:00
|
|
|
|
2009-02-28 18:02:23 +01:00
|
|
|
configuration = ConfigParser.ConfigParser()
|
|
|
|
configuration.read('configuration')
|
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: blog_title = configuration.get('personal', 'blog_title')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"blog_title" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-05-20 17:13:30 +02:00
|
|
|
try: blog_subtitle = configuration.get('personal', 'blog_subtitle')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"blog_subtitle" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: blog_url = configuration.get('personal', 'blog_url')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"blog_url" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: keywords = configuration.get('personal', 'keywords')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"keywords" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: entries_dir = configuration.get('personal', 'entries_dir')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"entries_dir" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
if not os.path.exists(entries_dir):
|
2009-12-02 11:47:01 +01:00
|
|
|
errorpage('"entries_dir" does not exist!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: entries_suffix = configuration.get('personal', 'entries_suffix')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"entries_suffix" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: staticpages_dir = configuration.get('personal', 'staticpages_dir')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"staticpages_dir" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
if not os.path.exists(staticpages_dir):
|
2009-12-02 11:47:01 +01:00
|
|
|
errorpage('"staticpages_dir" does not exist!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: style = configuration.get('look', 'style')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"style" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: entries_per_page = configuration.getint('look', 'entries_per_page')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"entries_per_page" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: monthlist = configuration.get('look', 'monthlist')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"monthlist" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: staticpages = configuration.get('look', 'staticpages')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"staticpages" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: linklist = configuration.get('look', 'linklist')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"linklist" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
if not os.path.exists("linklist"):
|
2009-12-02 11:47:01 +01:00
|
|
|
errorpage('"linklist" does not exist!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: permalinks = configuration.get('look', 'permalinks')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"permalinks" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: comments = configuration.get('look', 'comments')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"comments" is missing in configuration!')
|
2009-05-22 10:18:04 +02:00
|
|
|
|
2009-04-10 12:05:01 +02:00
|
|
|
try: newest_first = configuration.get('look', 'newest_first')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"newest_first" is missing in configuration!')
|
2009-02-28 18:02:23 +01:00
|
|
|
|
2009-07-24 11:53:09 +02:00
|
|
|
try: new_comment_mail = configuration.get('smtp', 'new_comment_mail')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"new_comment_mail" is missing in configuration!')
|
2009-07-24 11:53:09 +02:00
|
|
|
|
|
|
|
try: mail_to = configuration.get('smtp', 'mail_to')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"mail_to" is missing in configuration!')
|
2009-07-24 11:53:09 +02:00
|
|
|
|
|
|
|
try: smtp_host = configuration.get('smtp', 'smtp_host')
|
2009-12-02 11:47:01 +01:00
|
|
|
except: errorpage('"smtp_host" is missing in configuration!')
|
2009-07-24 11:53:09 +02:00
|
|
|
|
2009-12-03 22:19:56 +01:00
|
|
|
try: feed_preview = configuration.get('feed', 'feed_preview')
|
2009-12-03 22:53:37 +01:00
|
|
|
except: errorpage('"feed_preview" is missing or empty in configuration!')
|
2009-12-03 22:19:56 +01:00
|
|
|
|
2009-03-28 14:30:02 +01:00
|
|
|
# Read POST Variables
|
2009-02-28 18:02:23 +01:00
|
|
|
action = cgi.FieldStorage()
|
|
|
|
month_display = action.getvalue('m')
|
2009-07-21 17:27:23 +02:00
|
|
|
|
2009-02-28 18:02:23 +01:00
|
|
|
static_display = action.getvalue('s')
|
2009-12-02 14:12:05 +01:00
|
|
|
if static_display: static_display = static_display.replace('/', '')
|
2009-07-21 17:27:23 +02:00
|
|
|
|
2009-07-06 16:17:42 +02:00
|
|
|
post_display = action.getvalue('p')
|
2009-12-02 14:12:05 +01:00
|
|
|
if post_display: post_display = post_display.replace(' ', '-').replace('/', '')
|
2009-07-21 17:27:23 +02:00
|
|
|
|
2009-03-02 01:50:14 +01:00
|
|
|
allentries_display = action.getvalue('a')
|
2009-03-24 20:37:21 +01:00
|
|
|
feed_display = action.getvalue('feed')
|
2009-02-28 18:02:23 +01:00
|
|
|
if not month_display: month_display = ""
|
|
|
|
if not post_display: post_display = ""
|
|
|
|
if not static_display: static_display = ""
|
2009-03-02 01:50:14 +01:00
|
|
|
if not allentries_display: allentries_display = ""
|
2009-03-24 20:37:21 +01:00
|
|
|
if not feed_display: feed_display = ""
|
2009-02-28 18:02:23 +01:00
|
|
|
|
2009-03-08 19:17:59 +01:00
|
|
|
# Commentstuff
|
|
|
|
ctitle = action.getvalue('ctitle')
|
|
|
|
cname = action.getvalue('cname')
|
|
|
|
ctext = action.getvalue('ctext')
|
2009-04-30 01:25:14 +02:00
|
|
|
cquiz = action.getvalue('cquiz')
|
|
|
|
cquizv = action.getvalue('cquizv')
|
2009-03-08 19:17:59 +01:00
|
|
|
if not ctitle: ctitle = ""
|
|
|
|
if not cname: cname = ""
|
|
|
|
if not ctext: ctext = ""
|
2009-04-30 01:25:14 +02:00
|
|
|
if not cquiz: cquiz = ""
|
|
|
|
if not cquizv: cquizv = ""
|
2009-03-08 19:17:59 +01:00
|
|
|
|
|
|
|
# Comment to commit?
|
|
|
|
if cname and ctext and ctitle:
|
|
|
|
# Prevent XSS hacks
|
2009-12-02 14:12:05 +01:00
|
|
|
cname = cname.replace('<', '<').replace('>', '>').replace('\'', '"')
|
|
|
|
ctext = ctext.replace('<', '<').replace('>', '>').replace('\'', '"')
|
2009-11-16 08:00:41 +01:00
|
|
|
|
2009-03-08 19:17:59 +01:00
|
|
|
# Add comment
|
2009-04-30 01:25:14 +02:00
|
|
|
if not cquiz == cquizv:
|
|
|
|
errorpage("Brainmode")
|
|
|
|
else:
|
2009-03-08 19:39:52 +01:00
|
|
|
comments_file = glob.glob(entries_dir + ctitle + '.comments')
|
2009-04-30 01:25:14 +02:00
|
|
|
if not comments_file:
|
2009-06-01 03:45:21 +02:00
|
|
|
try:
|
|
|
|
content = open(entries_dir + ctitle + '.comments', "w")
|
|
|
|
content.close()
|
|
|
|
except:
|
2009-12-02 11:47:01 +01:00
|
|
|
errorpage(entries_dir, 'isn\'t writable!')
|
2009-07-24 16:21:56 +02:00
|
|
|
try:
|
|
|
|
content = open(comments_file[0], "a+")
|
|
|
|
content.write("-." + cname + "\n")
|
|
|
|
content.write("+." + time.asctime() + "\n")
|
|
|
|
ctext = ctext.split("\n")
|
|
|
|
for line in ctext:
|
|
|
|
content.write("." + line + "\n")
|
|
|
|
content.close()
|
|
|
|
# Send mail?
|
|
|
|
if new_comment_mail:
|
2009-12-02 14:12:05 +01:00
|
|
|
msg = 'From: Blogthon\nTo: ' + mail_to + '\nSubject: New comment on ' + blog_title + '\n\nSomeone wrote a comment to this entry: ' + blog_url + '?p=' + ctitle.replace(' ', '-')
|
2009-07-24 16:21:56 +02:00
|
|
|
smtp = smtplib.SMTP(smtp_host)
|
|
|
|
smtp.sendmail(blog_title, mail_to, msg)
|
|
|
|
smtp.quit()
|
|
|
|
except:
|
2009-12-02 11:47:01 +01:00
|
|
|
errorpage(comments_file, 'isn\'t writable!')
|
2009-03-08 19:17:59 +01:00
|
|
|
|
2009-03-24 20:37:21 +01:00
|
|
|
# Read entries and store their title and timestamp
|
2009-02-28 18:02:23 +01:00
|
|
|
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()
|
|
|
|
|
2009-03-24 20:37:21 +01:00
|
|
|
# Generate atom feed
|
|
|
|
if feed_display == "atom":
|
|
|
|
date = entries[0][0]
|
2009-03-28 14:30:02 +01:00
|
|
|
blog_title_md5sum = generate_uuid(blog_title)
|
2009-03-24 20:37:21 +01:00
|
|
|
|
2009-12-02 12:19:30 +01:00
|
|
|
# Append 0 to the beginning if len of integer is 1 (value<10)
|
|
|
|
month = '%(#)02d' % {'#': int(date[1])}
|
|
|
|
day = '%(#)02d' % {'#': int(date[2])}
|
|
|
|
hour = '%(#)02d' % {'#':int(date[3])}
|
|
|
|
min = '%(#)02d' % {'#': int(date[4])}
|
|
|
|
sec = '%(#)02d' % {'#': int(date[5])}
|
2009-04-30 13:40:39 +02:00
|
|
|
|
2009-11-16 08:00:41 +01:00
|
|
|
document_header("atom")
|
2009-04-08 21:50:54 +02:00
|
|
|
print '<link href="' + blog_url + '/?feed=atom" rel="self" type="application/atom+xml"/>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' <author>'
|
|
|
|
print ' <name>' + blog_title + '</name>'
|
|
|
|
print ' </author>'
|
|
|
|
print ' <title>' + blog_title + '</title>'
|
2009-03-28 14:30:02 +01:00
|
|
|
print ' <id>urn:uuid:' + blog_title_md5sum + '</id>'
|
2009-05-02 04:01:13 +02:00
|
|
|
print ' <updated>' + str(date[0]) + '-' + month + '-' + day + 'T' + hour + ':' + min + ':' + sec + 'Z</updated>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print ''
|
2009-12-03 22:19:56 +01:00
|
|
|
j = len(entries)
|
|
|
|
if j > 10: j = 10
|
|
|
|
for i in xrange(0, j):
|
|
|
|
title = str(entries[i][1]).replace('entries/', '', 1).replace('.' + entries_suffix, '')
|
2009-12-03 22:53:37 +01:00
|
|
|
date = entries[i][0]
|
2009-12-03 22:19:56 +01:00
|
|
|
title_md5sum = generate_uuid(title)
|
|
|
|
print ' <entry>'
|
|
|
|
print ' <title>' + title + '</title>'
|
|
|
|
print ' <link href="' + blog_url + '?p=' + title + '"/>'
|
|
|
|
print ' <id>urn:uuid:' + title_md5sum + '</id>'
|
2009-12-03 22:53:37 +01:00
|
|
|
print ' <updated>' + str(date[0]) + '-' + month + '-' + day + 'T' + hour + ':' + min + ':' + sec + 'Z</updated>'
|
2009-12-03 22:19:56 +01:00
|
|
|
print ' <summary>'
|
|
|
|
content = open(str(entries[i][1]), 'r')
|
|
|
|
for h in xrange(0, int(feed_preview)):
|
|
|
|
rss_line = content.readline().strip()
|
|
|
|
if rss_line != '':
|
|
|
|
print ' ' + rss_line
|
|
|
|
content.close()
|
|
|
|
print ' </summary>'
|
|
|
|
print ' </entry>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print '</feed>'
|
|
|
|
|
2009-06-05 10:56:00 +02:00
|
|
|
# Generate rss 2.0 feed
|
2009-06-05 20:36:39 +02:00
|
|
|
elif feed_display == "rss":
|
2009-06-05 10:56:00 +02:00
|
|
|
document_header("rss")
|
|
|
|
print ' <channel>'
|
|
|
|
print ' <title>' + blog_title + '</title>'
|
|
|
|
print ' <link>' + blog_url + '</link>'
|
|
|
|
print ' <description>' + blog_subtitle + '</description>'
|
2009-12-03 14:48:20 +01:00
|
|
|
date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
|
|
|
|
print ' <pubDate>' + date + '</pubDate>'
|
2009-06-05 10:56:00 +02:00
|
|
|
print ''
|
2009-12-03 14:48:20 +01:00
|
|
|
j = len(entries)
|
|
|
|
if j > 10: j = 10
|
2009-12-03 14:53:21 +01:00
|
|
|
for i in xrange(0, j):
|
2009-12-03 14:48:20 +01:00
|
|
|
title = str(entries[i][1]).replace('entries/', '', 1).replace('.' + entries_suffix, '')
|
|
|
|
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.gmtime(time.mktime(entries[i][0])))
|
|
|
|
title_md5sum = generate_uuid(title)
|
|
|
|
print ' <item>'
|
|
|
|
print ' <title>' + title + '</title>'
|
|
|
|
print ' <link>' + blog_url + '?p=' + title + '</link>'
|
|
|
|
print ' <guid>' + title_md5sum + '</guid>'
|
|
|
|
print ' <pubDate>' + date + '</pubDate>'
|
2009-12-03 22:19:56 +01:00
|
|
|
content = open(str(entries[i][1]), 'r')
|
2009-12-04 00:29:05 +01:00
|
|
|
rss_description= ''
|
2009-12-03 22:19:56 +01:00
|
|
|
for h in xrange(0, int(feed_preview)):
|
2009-12-04 00:29:05 +01:00
|
|
|
line = content.readline().strip()
|
|
|
|
if line:
|
|
|
|
rss_description = rss_description + line + '<br />'
|
2009-12-03 22:19:56 +01:00
|
|
|
content.close()
|
2009-12-04 00:29:05 +01:00
|
|
|
print ' <description><![CDATA[' + rss_description + ']]></description>'
|
2009-12-03 14:48:20 +01:00
|
|
|
print ' </item>'
|
2009-06-05 10:56:00 +02:00
|
|
|
print ' </channel>'
|
|
|
|
print '</rss>'
|
|
|
|
|
2009-03-24 20:37:21 +01:00
|
|
|
# Generate regular page
|
|
|
|
else:
|
2009-07-29 20:17:16 +02:00
|
|
|
document_header("xhtml-strict")
|
2009-03-24 20:37:21 +01:00
|
|
|
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>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ''
|
|
|
|
# Site header
|
|
|
|
print ' <div class="header">'
|
|
|
|
print ' <div class="header_title">'
|
|
|
|
print ' <a href="?" class="header_link">' + blog_title + '</a>'
|
|
|
|
print ' </div>'
|
2009-05-20 17:13:30 +02:00
|
|
|
print ' <div class="header_subtitle">'
|
|
|
|
print ' <span class="header_subtitle">' + blog_subtitle + '</span>'
|
|
|
|
print ' </div>'
|
2009-03-25 14:22:56 +01:00
|
|
|
print ' </div>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ''
|
|
|
|
# RSS feed
|
|
|
|
print ' <div class="rss">'
|
|
|
|
if os.path.exists('styles/' + style.replace('.css', '') + '_img/rss.jpg'):
|
|
|
|
print ' <a href="?feed=rss"><img src="styles/' + style.replace('.css', '') + '_img/rss.jpg"></a>'
|
|
|
|
else:
|
|
|
|
print ' <a href="?feed=rss" class="rss_link">rss</a>'
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
|
|
|
# Atom feed
|
|
|
|
print ' <div class="atom">'
|
|
|
|
if os.path.exists('styles/' + style.replace('.css', '') + '_img/atom.jpg'):
|
|
|
|
print ' <a href="?feed=atom"><img src="styles/' + style.replace('.css', '') + '_img/atom.jpg></a>'
|
|
|
|
else:
|
|
|
|
print ' <a href="?feed=atom" class="atom_link">atom</a>'
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
|
2009-05-17 23:19:07 +02:00
|
|
|
# Staticpages
|
2009-03-24 20:37:21 +01:00
|
|
|
if staticpages == "True":
|
|
|
|
staticpages = []
|
|
|
|
staticpages_list = glob.glob(staticpages_dir + '*')
|
|
|
|
staticpages_list.sort()
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="pages">'
|
|
|
|
print ' <div class="pages_title">pages</div>'
|
|
|
|
print ' <div class="pages_list">'
|
|
|
|
print ' <ul class="pages_list">'
|
2009-03-24 20:37:21 +01:00
|
|
|
for staticpage in staticpages_list:
|
2009-10-30 15:18:58 +01:00
|
|
|
file = open(staticpage, 'r')
|
|
|
|
header = file.readline()
|
|
|
|
if header.split(':', 1)[0] == 'extern_link':
|
|
|
|
link = header.split(':', 1)[1].strip()
|
2009-10-30 15:00:06 +01:00
|
|
|
else:
|
2009-10-30 15:18:58 +01:00
|
|
|
link = re.sub('\w+?\/', '', staticpage)
|
|
|
|
link = '?s=' + link
|
|
|
|
file.close()
|
|
|
|
title = re.sub('\w+?\/\d+?-', '', staticpage)
|
|
|
|
print ' <li class="pages_list_entry"><a href="' + link + '" class="pages_list_entry">' + title + '</a></li>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' </ul>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' </div>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="pages_footer"></div>'
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
|
2009-05-17 23:19:07 +02:00
|
|
|
# Monthlist
|
2009-03-24 20:37:21 +01:00
|
|
|
if monthlist == "True":
|
|
|
|
olddate = ""
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="months">'
|
|
|
|
print ' <div class="months_title">months</div>'
|
|
|
|
print ' <div class="months_list">'
|
|
|
|
print ' <ul class="months_list">'
|
2009-03-24 20:37:21 +01:00
|
|
|
for entry in entries:
|
|
|
|
date = time.strftime("%m%Y", entry[0])
|
|
|
|
date_display = time.strftime("%h %Y", entry[0])
|
|
|
|
if not olddate == date:
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <li class="months_list_entry"><a href="?m=' + date + '" class="months_list_entry">' + date_display + '</a></li>'
|
2009-03-24 20:37:21 +01:00
|
|
|
olddate = date
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' </ul>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' </div>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="months_footer"></div>'
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
|
2009-05-17 23:19:07 +02:00
|
|
|
# Linklist
|
2009-03-24 20:37:21 +01:00
|
|
|
if linklist == "True":
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="linklist">'
|
|
|
|
print ' <div class="linklist_title">links</div>'
|
|
|
|
print ' <div class="linklist_list">'
|
|
|
|
print ' <ul class="linklist_list">'
|
2009-05-14 10:23:42 +02:00
|
|
|
try:
|
|
|
|
content = open("linklist", "r")
|
|
|
|
for line in content:
|
|
|
|
if line.strip() is "":
|
2009-07-11 17:07:59 +02:00
|
|
|
print '<br />'
|
2009-05-14 10:23:42 +02:00
|
|
|
else:
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <li class="linklist_list_entry"><a href="' + line.split(" ")[0] + '" target="_blank" class="months_list_entry">' + line.split(" ", 1)[1].strip() + '</a></li>'
|
2009-05-14 10:23:42 +02:00
|
|
|
content.close()
|
|
|
|
except:
|
2009-05-17 23:19:07 +02:00
|
|
|
print ''
|
|
|
|
print ' </ul>'
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' </div>'
|
2009-05-17 23:19:07 +02:00
|
|
|
print ' <div class="linklist_footer"></div>'
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
|
2009-05-18 21:08:37 +02:00
|
|
|
print ' <div class="entries">'
|
|
|
|
print ''
|
2009-05-18 17:27:03 +02:00
|
|
|
# Staticpage
|
|
|
|
if static_display != "":
|
2009-03-24 20:37:21 +01:00
|
|
|
content = open(staticpages_dir + static_display, "r")
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' <div class="entry">'
|
|
|
|
print ' <div class="entry_title">' + re.sub('\d+?-', '', static_display) + '</div>'
|
|
|
|
print ' <div class="entry_content">'
|
|
|
|
print ' <p>'
|
2009-03-24 20:37:21 +01:00
|
|
|
for line in content:
|
2009-09-30 10:18:07 +02:00
|
|
|
if re.search('<li>', line) or re.search('<ul>', line) or re.search('</ul>', line) or re.search('<ol>', line) or re.search('</ol>', line):
|
|
|
|
print ' ' + line.strip()
|
|
|
|
else:
|
|
|
|
print ' ' + line.strip() + '<br />'
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' </p>'
|
|
|
|
print ' </div>'
|
|
|
|
print ' <div class="entry_footer"></div>'
|
|
|
|
print ' <div class="entry_border_left"></div>'
|
|
|
|
print ' <div class="entry_border_right"></div>'
|
|
|
|
print ' <div class="entry_border_top"></div>'
|
|
|
|
print ' <div class="entry_border_bottom"></div>'
|
2009-05-18 21:50:07 +02:00
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
content.close()
|
2009-05-18 17:27:03 +02:00
|
|
|
# Entry
|
|
|
|
else:
|
2009-03-24 20:37:21 +01:00
|
|
|
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:
|
2009-12-02 14:12:05 +01:00
|
|
|
if post_display == title.replace(' ', '-') or not post_display:
|
2009-03-24 20:37:21 +01:00
|
|
|
if allentries_display == "1" or entry_counter < entries_per_page:
|
|
|
|
content = open(entry, "r")
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' <div class="entry">'
|
2009-04-30 01:25:14 +02:00
|
|
|
if permalinks:
|
2009-12-02 14:12:05 +01:00
|
|
|
print ' <div class="entry_title"><a href="?p=' + title.replace(' ', '-') + '" class="entry_title">' + title + '</a></div>'
|
2009-04-30 01:25:14 +02:00
|
|
|
else:
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' <div class="entry_title">' + title + '</div>'
|
2009-05-18 22:05:58 +02:00
|
|
|
print ' <div class="entry_date">' + date + '</div>'
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' <div class="entry_content">'
|
2009-03-24 20:37:21 +01:00
|
|
|
for line in content:
|
2009-12-06 14:57:47 +01:00
|
|
|
no_break = re.compile('^.*(<ul>|</ul>|<li>|<ol>|</ol>|<table>|</table>|<tr>|</tr>|<td>|</td>).*$')
|
|
|
|
if re.match(no_break, line):
|
2009-09-27 17:19:22 +02:00
|
|
|
print ' ' + line.strip()
|
|
|
|
else:
|
|
|
|
print ' ' + line.strip() + '<br />'
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' </div>'
|
|
|
|
print ' <div class="entry_footer"></div>'
|
|
|
|
print ' <div class="entry_border_left"></div>'
|
|
|
|
print ' <div class="entry_border_right"></div>'
|
|
|
|
print ' <div class="entry_border_top"></div>'
|
|
|
|
print ' <div class="entry_border_bottom"></div>'
|
2009-05-18 17:27:03 +02:00
|
|
|
|
|
|
|
# Comments...
|
|
|
|
# ... are shown when post_display and comments_file isn't false
|
2009-03-03 18:43:37 +01:00
|
|
|
comments_file = glob.glob(entries_dir + title + '.comments')
|
2009-03-24 20:37:21 +01:00
|
|
|
if post_display:
|
|
|
|
if comments_file:
|
|
|
|
comments_file = glob.glob(entries_dir + title + '.comments')
|
|
|
|
comments_content = open(comments_file[0], "r")
|
2009-05-18 21:46:32 +02:00
|
|
|
print ' </div>'
|
2009-05-18 21:08:37 +02:00
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-05-18 17:27:03 +02:00
|
|
|
print ' <div class="comments">'
|
2009-07-10 00:50:26 +02:00
|
|
|
|
|
|
|
notfirstline = 0 # Ugly fix for closing comment containers
|
2009-11-02 14:14:21 +01:00
|
|
|
label_count = 0
|
2009-07-10 00:50:26 +02:00
|
|
|
|
2009-03-24 20:37:21 +01:00
|
|
|
for line in comments_content:
|
2009-10-16 16:49:24 +02:00
|
|
|
if re.search("^-", line):
|
2009-07-10 00:50:26 +02:00
|
|
|
if notfirstline == 1:
|
2009-10-21 15:43:17 +02:00
|
|
|
print ' </div>'
|
|
|
|
print ' </div>'
|
|
|
|
notfirstline = 0;
|
2009-06-04 10:35:30 +02:00
|
|
|
print ' <div class="comment">'
|
2009-11-02 14:14:21 +01:00
|
|
|
|
|
|
|
#Label for each comment
|
|
|
|
label_count += 1
|
|
|
|
print ' <a name="' + str(label_count) + '"></a>'
|
|
|
|
|
2009-06-01 21:13:47 +02:00
|
|
|
print ' <div class="comment_author">' + line.split(".", 1)[1].strip() + '</div>'
|
2009-10-16 16:49:24 +02:00
|
|
|
elif re.search("^\+", line):
|
2009-06-01 21:13:47 +02:00
|
|
|
print ' <div class="comment_date">' + line.split(".", 1)[1].strip() + '</div>'
|
2009-07-10 00:50:26 +02:00
|
|
|
print ' <div class="comment_content">'
|
2009-03-24 20:37:21 +01:00
|
|
|
else:
|
2009-07-10 00:50:26 +02:00
|
|
|
notfirstline = 1;
|
2009-03-24 20:37:21 +01:00
|
|
|
line = line.split(".", 1)[1]
|
2009-06-01 21:13:47 +02:00
|
|
|
print ' ' + line.strip() + '<br />'
|
2009-05-18 17:27:03 +02:00
|
|
|
print ''
|
2009-07-10 00:50:26 +02:00
|
|
|
print ' </div>'
|
2009-06-04 16:49:49 +02:00
|
|
|
print ' </div>'
|
2009-03-24 20:37:21 +01:00
|
|
|
comments_content.close()
|
2009-05-18 21:46:32 +02:00
|
|
|
else:
|
2009-06-04 16:49:49 +02:00
|
|
|
print ' </div>'
|
2009-07-24 16:31:01 +02:00
|
|
|
print ' </div>'
|
|
|
|
print ' <div class="comments">'
|
2009-03-24 20:37:21 +01:00
|
|
|
|
|
|
|
# Form for adding comments
|
2009-10-31 00:33:19 +01:00
|
|
|
if comments == "True":
|
|
|
|
random_int_a = random.randint(1,9)
|
|
|
|
random_int_b = random.randint(1,9)
|
|
|
|
cquizv = random_int_a + random_int_b
|
|
|
|
print ' <div class="submit_comment">'
|
|
|
|
print ' <form action="" method="post">'
|
|
|
|
print ' <input type="hidden" name="ctitle" value="' + title + '" />'
|
|
|
|
print ' <input type="hidden" name="cquizv" value="' + str(cquizv) + '" />'
|
|
|
|
print ' <label class="submit_comment_name">name:</label><input class="submit_comment_name_input" type="text" id="cname" name="cname" />'
|
|
|
|
print ' <br /><label class="submit_comment_text">text:</label><textarea class="submit_comment_textarea" id="ctext" name="ctext"></textarea>'
|
|
|
|
print ' <br /><label class="submit_comment_quiz">' + str(random_int_a) + '+' + str(random_int_b) + '=</label><input class="submit_comment_quiz_input" type="text" id="cquiz" name="cquiz" />'
|
|
|
|
print ' <br /><input class="submit_comment_button" type="submit" id="submit" value="post comment" />'
|
|
|
|
print ' </form>'
|
|
|
|
print ' </div>'
|
|
|
|
else:
|
|
|
|
print ' <div class="submit_border_bottom"></div>'
|
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
|
|
|
|
if comments == "True":
|
|
|
|
comments_file = glob.glob(entries_dir + title + '.comments')
|
|
|
|
if not comments_file and not post_display:
|
2009-07-08 18:20:11 +02:00
|
|
|
print ' <div class="entry_comment">'
|
2009-12-02 12:19:30 +01:00
|
|
|
print ' <a href="?p=' + title.replace(' ','-') + '" class="entry_comment">no comments</a>'
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' </div>'
|
2009-05-18 17:27:03 +02:00
|
|
|
print ' </div>'
|
2009-05-18 21:08:37 +02:00
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
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
|
2009-06-01 21:13:47 +02:00
|
|
|
print ' <div class="entry_comment">'
|
2009-12-02 12:19:30 +01:00
|
|
|
print ' <a href="?p=' + title.replace(' ', '-') + '" class="entry_comment">comments (' + str(comments_counter) + ')</a>'
|
2009-05-18 21:24:58 +02:00
|
|
|
print ' </div>'
|
2009-05-18 17:27:03 +02:00
|
|
|
print ' </div>'
|
2009-05-18 21:08:37 +02:00
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
comments_content.close()
|
2009-09-22 13:15:26 +02:00
|
|
|
else:
|
|
|
|
print ' </div>'
|
|
|
|
print ''
|
2009-05-18 17:27:03 +02:00
|
|
|
|
2009-03-24 20:37:21 +01:00
|
|
|
content.close()
|
|
|
|
entry_counter += 1
|
|
|
|
|
2009-06-01 03:31:08 +02:00
|
|
|
if not month_display and not post_display and not allentries_display and entry_counter == entries_per_page: # Display pagelist
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' <div class="entry"><a href=?a=1>View all entries...</a></div>'
|
|
|
|
|
2009-05-18 21:08:37 +02:00
|
|
|
print ' </div>'
|
2009-05-18 17:27:03 +02:00
|
|
|
print ''
|
2009-03-24 20:37:21 +01:00
|
|
|
print ' </body>'
|
|
|
|
print '</html>'
|
2009-02-28 18:02:23 +01:00
|
|
|
|
|
|
|
# vim: set tw=0 ts=4:
|