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>
2010-12-14 09:42:38 +01:00
#
2009-03-01 13:55:09 +01:00
# Description: A simple blogging software
2010-02-17 11:16:00 +01:00
import os
import sys
import time
import locale
import re
2010-12-14 16:16:12 +01:00
import ConfigParser
2010-11-20 20:01:08 +01:00
from cgi import FieldStorage
2010-11-16 08:45:21 +01:00
from smtplib import SMTP
2010-12-14 09:55:09 +01:00
from hashlib import md5
2010-11-16 08:45:21 +01:00
from glob import glob
from random import randint
2009-02-28 18:02:23 +01:00
2009-12-06 21:50:12 +01:00
# A wonderful place for doing some regexp ;)
2010-12-14 11:26:21 +01:00
no_break = re.compile("^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</tr>|<td|</td>|<th|</th>|<p|</p>).*$")
2010-12-14 09:42:38 +01:00
line_start_hyphen = re.compile("^-.*$")
2010-12-14 11:26:21 +01:00
line_start_plus = re.compile("^\+.*$")
2009-12-06 21:50:12 +01:00
2010-11-15 17:50:11 +01:00
tab = "\t"
2009-03-28 14:30:02 +01:00
def generate_uuid(string):
2010-12-14 11:26:21 +01:00
string_md5sum = md5(string).hexdigest()
string = str.join("-", (string_md5sum[0:8], string_md5sum[8:12], string_md5sum[12:16], string_md5sum[16:20], string_md5sum[20:32]))
return string
2009-03-28 14:30:02 +01:00
2009-04-10 12:05:01 +02:00
def errorpage(string):
2010-12-14 11:26:21 +01:00
document_header("xhtml-strict")
2011-01-31 09:18:24 +01:00
print "<head>"
print tab + "<title>Error!</title>"
print tab + "<link rel=\"stylesheet\" type=\"text/css\" href=\"error.css\" />"
print "</head>"
2010-12-14 11:26:21 +01:00
print "<body>"
2011-01-31 09:18:24 +01:00
print tab + "<div class=\"container\">"
print tab*2 + "<div class=\"title\"><h1>Error!</h1></div>"
print tab*2 + "<div class=\"text\"><h2>" + string + "</h2></div>"
print tab + "</div>"
2010-12-14 11:26:21 +01: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):
2010-12-14 11:26:21 +01:00
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\""
print " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
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\">"
if string == "rss":
print "Content-type: application/rss+xml\n"
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
print "<rss version=\"2.0\">"
2010-12-14 09:42:38 +01:00
# Parse configuration
2010-12-14 16:16:12 +01:00
configuration = ConfigParser.SafeConfigParser()
2009-12-06 17:03:28 +01:00
2010-12-14 09:42:38 +01:00
for config in ["../blogthonrc", "../.blogthonrc", "configuration"]:
2010-12-14 11:26:21 +01:00
if os.path.exists(config):
configuration.read(config)
config = True
break
else:
config = False
2010-12-14 09:42:38 +01:00
if not config:
2010-12-14 11:26:21 +01:00
errorpage("No suitable configuration found!")
2009-02-28 18:02:23 +01:00
2010-12-14 11:26:21 +01:00
try:
blog_title = configuration.get("personal", "blog_title")
blog_subtitle = configuration.get("personal", "blog_subtitle")
blog_url = configuration.get("personal", "blog_url")
keywords = configuration.get("personal", "keywords")
entries_dir = configuration.get("personal", "entries_dir")
2010-12-14 16:16:12 +01:00
entries_suffix = configuration.get("personal", "entries_suffix")
staticpages_dir = configuration.get("personal", "staticpages_dir")
plugins_dir = configuration.get("personal", "plugins_dir")
style = configuration.get("look", "style")
language = configuration.get("look", "language")
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")
new_comment_mail = configuration.get("smtp", "new_comment_mail")
mail_to = configuration.get("smtp", "mail_to")
smtp_host = configuration.get("smtp", "smtp_host")
feed_preview = configuration.get("feed", "feed_preview")
2010-12-14 16:21:03 +01:00
except ConfigParser.Error, error:
2010-12-14 16:16:12 +01:00
errorpage(str(error))
2009-05-22 10:18:04 +02:00
2010-12-16 11:11:41 +01:00
if not re.match("^http:\/\/.*$", blog_url):
blog_url = "http://" + blog_url
if not re.match("^.*\/$", blog_url):
blog_url = blog_url + "/"
2009-05-22 10:18:04 +02:00
if not os.path.exists(entries_dir):
2010-12-16 11:11:41 +01:00
errorpage("Directory \"%s\" does not exist!" % entries_dir)
2009-05-22 10:18:04 +02:00
2011-02-07 23:03:23 +01:00
if not os.access(entries_dir, os.W_OK):
errorpage("Directory \"%s\" is not writable!" % entries_dir)
2009-05-22 10:18:04 +02:00
if not os.path.exists(staticpages_dir):
2010-12-16 11:11:41 +01:00
errorpage("Directory \"%s\" does not exist!" % staticpages_dir)
2009-05-22 10:18:04 +02:00
2009-12-07 00:32:35 +01:00
if not os.path.exists(plugins_dir):
2010-12-16 11:11:41 +01:00
errorpage("Directory \"%s\" does not exist!" % plugins_dir)
2010-12-14 11:26:21 +01:00
2010-12-14 16:16:12 +01:00
if not os.path.exists("linklist"):
errorpage("File \"linklist\" does not exist!")
2009-05-22 10:18:04 +02:00
2010-02-17 11:16:00 +01:00
if language == "de":
2010-12-14 11:26:21 +01:00
blog_locale = ("Seiten", "Monate", "Links", "Keine Kommentare", "Kommentare", "Alle Einträge anzeigen...", "Name", "Text", "Absenden")
locales_de = ("de_DE.UTF-8", "de_DE.@euro", "de_DE")
for i in locales_de:
try:
locale.setlocale(locale.LC_TIME, i)
break
except:
continue
else:
locale.setlocale(locale.LC_TIME, None)
2010-02-17 11:16:00 +01:00
2010-02-17 09:26:59 +01:00
else:
2010-12-14 11:26:21 +01:00
blog_locale = ("pages", "months", "links", "no comments", "comments", "View all entries...", "name", "text", "commit")
locales_en = ("en_US.UTF-8", "en_US.ISO-8859-15", "en_US")
for i in locales_en:
try:
locale.setlocale(locale.LC_TIME, i)
break
except:
continue
else:
locale.setlocale(locale.LC_TIME, None)
2009-03-28 14:30:02 +01:00
# Read POST Variables
2010-11-20 20:01:08 +01:00
action = FieldStorage()
2010-12-14 09:42:38 +01:00
month_display = action.getvalue("m")
2009-07-21 17:27:23 +02:00
2010-12-14 09:42:38 +01:00
static_display = action.getvalue("s")
2010-12-14 11:26:21 +01:00
if static_display:
static_display = static_display.replace("/", "")
2009-07-21 17:27:23 +02:00
2010-12-14 09:42:38 +01:00
post_display = action.getvalue("p")
2010-12-14 11:26:21 +01:00
if post_display:
post_display = post_display.replace(" ", "-").replace("/", "")
2009-07-21 17:27:23 +02:00
2010-12-14 09:42:38 +01:00
allentries_display = action.getvalue("a")
feed_display = action.getvalue("feed")
2010-12-14 11:26:21 +01:00
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 = ""
2009-02-28 18:02:23 +01:00
2009-03-08 19:17:59 +01:00
# Commentstuff
2010-12-14 09:42:38 +01:00
ctitle = action.getvalue("ctitle")
cname = action.getvalue("cname")
ctext = action.getvalue("ctext")
cquiz = action.getvalue("cquiz")
cquizv = action.getvalue("cquizv")
2010-12-14 11:26:21 +01:00
if not ctitle:
ctitle = ""
if not cname:
cname = ""
if not ctext:
ctext = ""
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:
2010-12-14 11:26:21 +01:00
# Prevent XSS hacks
cname = cname.replace("<", "<").replace(">", ">").replace("\'", """)
ctext = ctext.replace("<", "<").replace(">", ">").replace("\'", """)
# Add comment
if not cquiz == cquizv:
errorpage("Brainmode")
else:
comments_file = os.path.join(entries_dir, ctitle + ".comments")
if not os.path.exists(comments_file):
2011-02-07 23:06:10 +01:00
content = open(comments_file, "w")
2010-12-14 11:26:21 +01:00
content.close()
2011-02-07 23:06:10 +01:00
content = open(comments_file, "a")
content.write("-." + cname + "\n")
content.write("+." + time.strftime("%c", time.localtime()) + "\n")
ctext = ctext.split("\n")
for line in ctext:
content.write("." + line + "\n")
content.close()
# Send mail?
if not new_comment_mail == "False":
msg = "From: Blogthon\nTo: %s\nSubject: New comment on %s\n\nSomeone wrote a comment to this entry: %s?p=%s" % (mail_to, blog_title, blog_url, ctitle.replace(" ", "-"))
smtp = SMTP(smtp_host)
smtp.starttls()
smtp.sendmail(blog_title, mail_to, msg)
2011-02-07 23:07:33 +01:00
smtp.quit()
2009-03-08 19:17:59 +01:00
2009-03-24 20:37:21 +01:00
# Read entries and store their title and timestamp
2010-12-14 11:26:21 +01:00
entries = []
entries_list = glob(os.path.join(entries_dir, "*." + entries_suffix))
2009-02-28 18:02:23 +01:00
for entry in entries_list:
2010-12-14 11:26:21 +01:00
title = entry.replace(entries_dir, "", 1)
title = title.replace("." + entries_suffix, "")
stampfile = os.path.join(entries_dir, title + ".stamp")
if os.path.exists(stampfile):
timestamp = os.stat(stampfile)
else:
timestamp = os.stat(entry)
stampfile = os.path.join(entries_dir, title + ".stamp")
stamp = open(stampfile, "w")
stamp.close()
utime = os.utime(stampfile, (os.stat(entry)[8], os.stat(entry)[8]))
timestamp = time.localtime(timestamp[8])
entry = timestamp, entry
entries.append(entry)
2009-02-28 18:02:23 +01:00
if newest_first:
2010-12-14 11:26:21 +01:00
entries.sort(reverse=True)
2009-02-28 18:02:23 +01:00
else:
2010-12-14 11:26:21 +01:00
entries.sort()
2009-02-28 18:02:23 +01:00
2009-03-24 20:37:21 +01:00
# Generate atom feed
if feed_display == "atom":
2010-12-14 11:26:21 +01:00
date = entries[0][0]
blog_title_md5sum = generate_uuid(blog_title)
# 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])}
document_header("atom")
2010-12-16 11:11:41 +01:00
print "<link href=\"%s?feed=atom\" rel=\"self\" type=\"application/atom+xml\"/>" % blog_url
2010-12-14 11:26:21 +01:00
print tab + "<author>"
2010-12-16 11:11:41 +01:00
print tab*2 + "<name>%s</name>" % blog_title
2010-12-14 11:26:21 +01:00
print tab + "</author>"
2010-12-16 11:11:41 +01:00
print tab + "<title>%s</title>" % blog_title
print tab + "<id>urn:uuid:%s</id>" % blog_title_md5sum
print tab + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec)
2010-12-14 11:26:21 +01:00
print ""
j = len(entries)
if j > 10: j = 10
for i in xrange(0, j):
title = str(entries[i][1]).replace(entries_dir, "", 1).replace("." + entries_suffix, "")
date = entries[i][0]
title_md5sum = generate_uuid(title)
print tab*2 + "<entry>"
2010-12-16 11:11:41 +01:00
print tab*3 + "<title>%s</title>" % title
print tab*3 + "<link href=\"%s?p=%s\"/>" % (blog_url, title)
print tab*3 + "<id>urn:uuid:%s</id>" % title_md5sum
print tab*3 + "<updated>%s-%s-%sT%s:%s:%sZ</updated>" % (str(date[0]), month, day, hour, min, sec)
2010-12-14 11:26:21 +01:00
print tab*3 + "<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 tab*4 + rss_line
content.close()
print tab*3 + "</summary>"
print tab*2 + "</entry>"
print "</feed>"
2009-03-24 20:37:21 +01:00
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":
2010-12-14 11:26:21 +01:00
document_header("rss")
print tab + "<channel>"
2010-12-16 11:11:41 +01:00
print tab*2 + "<title>%s</title>" % blog_title
print tab*2 + "<link>%s</link>" % blog_url
print tab*2 + "<description>%s</description>" % blog_subtitle
2010-12-14 11:26:21 +01:00
date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0])))
2010-12-16 11:11:41 +01:00
print tab*2 + "<pubDate>%s</pubDate>" % date
2010-12-14 11:26:21 +01:00
print ""
j = len(entries)
if j > 10: j = 10
for i in xrange(0, j):
title = str(entries[i][1]).replace(entries_dir, "", 1).replace("." + entries_suffix, "")
date = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.gmtime(time.mktime(entries[i][0])))
print tab*2 + "<item>"
2010-12-16 11:11:41 +01:00
print tab*3 + "<title>%s</title>" % title
print tab*3 + "<link>%s?p=%s</link>" % (blog_url, title)
print tab*3 + "<guid>%s?p=%s</guid>" % (blog_url, title)
print tab*3 + "<pubDate>%s</pubDate>" % date
2010-12-14 11:26:21 +01:00
content = open(str(entries[i][1]), "r")
rss_description= ""
for h in xrange(0, int(feed_preview)):
line = content.readline().strip()
if line:
2010-12-16 11:11:41 +01:00
rss_description = "%s%s<br />" % (rss_description, line)
2010-12-14 11:26:21 +01:00
content.close()
2010-12-16 11:11:41 +01:00
print tab*3 + "<description><![CDATA[%s]]></description>" % rss_description
2010-12-14 11:26:21 +01:00
print tab*2 + "</item>"
print tab + "</channel>"
print "</rss>"
2009-06-05 10:56:00 +02:00
2009-03-24 20:37:21 +01:00
# Generate regular page
else:
2010-12-14 11:26:21 +01:00
document_header("xhtml-strict")
print tab + "<head>"
2010-12-16 11:11:41 +01:00
print tab*2 + "<title>%s</title>" % blog_title
2010-12-14 11:26:21 +01:00
print tab*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"
2010-12-16 11:11:41 +01:00
print tab*2 + "<meta name=\"keywords\" content=\"%s\" />" % keywords
print tab*2 + "<meta name=\"description\" content=\"%s\" />" % blog_title
print tab*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/%s/%s.css\" />" % (style, style)
2010-12-14 11:26:21 +01:00
print tab + "</head>"
print tab + "<body>"
print ""
# Plugins
sys.path.append(plugins_dir)
for plugin in glob(plugins_dir + "*.py"):
__import__ (plugin.split("/")[1].replace(".py", ""))
# Site header
print tab*2 + "<div class=\"header\">"
print tab*3 + "<div class=\"header_title\">"
2010-12-16 11:11:41 +01:00
print tab*4 + "<a href=\"?\" class=\"header_link\">%s</a>" % blog_title
2010-12-14 11:26:21 +01:00
print tab*3 + "</div>"
print tab*3 + "<div class=\"header_subtitle\">"
2010-12-16 11:11:41 +01:00
print tab*4 + "<span class=\"header_subtitle\">%s</span>" % blog_subtitle
2010-12-14 11:26:21 +01:00
print tab*3 + "</div>"
print tab*2 + "</div>"
print ""
# RSS feed
print tab*2 + "<div class=\"rss\">"
print tab*3 + "<a href=\"?feed=rss\" class=\"rss_link\">rss</a>"
print tab*2 + "</div>"
print ""
# Atom feed
print tab*2 + "<div class=\"atom\">"
print tab*3 + "<a href=\"?feed=atom\" class=\"atom_link\">atom</a>"
print tab*2 + "</div>"
print ""
# Staticpages
if staticpages == "True":
staticpages = []
staticpages_list = glob(os.path.join(staticpages_dir, "*"))
staticpages_list.sort()
print tab*2 + "<div class=\"pages\">"
2010-12-16 11:11:41 +01:00
print tab*3 + "<div class=\"pages_title\">%s</div>" % blog_locale[0]
2010-12-14 11:26:21 +01:00
print tab*3 + "<div class=\"pages_list\">"
print tab*4 + "<ul class=\"pages_list\">"
for staticpage in staticpages_list:
file = open(staticpage, "r")
header = file.readline()
if header.split(":", 1)[0] == "extern_link":
link = header.split(":", 1)[1].strip()
else:
link = re.sub("\w+?\/", "", staticpage)
2010-12-16 11:11:41 +01:00
link = "?s=%s" % link
2010-12-14 11:26:21 +01:00
file.close()
title = re.sub("\w+?\/\d+?-", "", staticpage)
2010-12-16 11:11:41 +01:00
print tab*5 + "<li class=\"pages_list_entry\"><a href=\"%s\" class=\"pages_list_entry\">%s</a></li>" % (link, title)
2010-12-14 11:26:21 +01:00
print tab*4 + "</ul>"
print tab*3 + "</div>"
print tab*3 + "<div class=\"pages_footer\"></div>"
print tab*2 + "</div>"
print ""
# Monthlist
if monthlist == "True":
olddate = ""
print tab*2 + "<div class=\"months\">"
2010-12-16 11:11:41 +01:00
print tab*3 + "<div class=\"months_title\">%s</div>" % blog_locale[1]
2010-12-14 11:26:21 +01:00
print tab*3 + "<div class=\"months_list\">"
print tab*4 + "<ul class=\"months_list\">"
for entry in entries:
2010-12-16 11:11:41 +01:00
date = time.strftime("%m%Y", entry[0])
2010-12-14 11:26:21 +01:00
date_display = time.strftime("%h %Y", entry[0])
if not olddate == date:
2010-12-16 11:11:41 +01:00
print tab*5 + "<li class=\"months_list_entry\"><a href=\"?m=%s\" class=\"months_list_entry\">%s</a></li>" % (date, date_display)
2010-12-14 11:26:21 +01:00
olddate = date
print tab*4 + "</ul>"
print tab*3 + "</div>"
print tab*3 + "<div class=\"months_footer\"></div>"
print tab*2 + "</div>"
print ""
# Linklist
if linklist == "True":
print tab*2 + "<div class=\"linklist\">"
2010-12-16 11:11:41 +01:00
print tab*3 + "<div class=\"linklist_title\">%s</div>" % blog_locale[2]
2010-12-14 11:26:21 +01:00
print tab*3 + "<div class=\"linklist_list\">"
print tab*4 + "<ul class=\"linklist_list\">"
try:
content = open("linklist", "r")
for line in content:
if line.strip() is "":
print "<br />"
else:
2010-12-16 11:11:41 +01:00
print tab*5 + "<li class=\"linklist_list_entry\"><a href=\"%s\" class=\"months_list_entry\">%s</a></li>" % (line.split(" ")[0], line.split(" ", 1)[1].strip())
2010-12-14 11:26:21 +01:00
content.close()
except:
print ""
print tab*4 + "</ul>"
print tab*3 + "</div>"
print tab*3 + "<div class=\"linklist_footer\"></div>"
print tab*2 + "</div>"
print ""
print tab*2 + "<div class=\"entries\">"
print ""
# Staticpage
if static_display != "":
content = open(os.path.join(staticpages_dir, static_display), "r")
print tab*3 + "<div class=\"entry\">"
2010-12-16 11:11:41 +01:00
print tab*4 + "<div class=\"entry_title\">%s</div>" % re.sub("^\.", "", re.sub("\d+?-", "", static_display))
2010-12-14 11:26:21 +01:00
print tab*4 + "<div class=\"entry_content\">"
print tab*5 + "<p>"
for line in content:
if no_break.match(line):
print tab*5 + line.strip()
else:
print tab*5 + line.strip() + "<br />"
print tab*5 + "</p>"
print tab*4 + "</div>"
print tab*4 + "<div class=\"entry_footer\"></div>"
print tab*4 + "<div class=\"entry_border_left\"></div>"
print tab*4 + "<div class=\"entry_border_right\"></div>"
print tab*4 + "<div class=\"entry_border_top\"></div>"
print tab*4 + "<div class=\"entry_border_bottom\"></div>"
print tab*3 + "</div>"
print ""
content.close()
# Entry
else:
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_dir, "", 1)
title = title.replace("." + entries_suffix, "")
stampfile = os.path.join(entries_dir, title + ".stamp")
if os.path.exists(stampfile):
date = time.localtime(os.stat(stampfile)[8])
date = time.strftime("%c", date)
if month_display == date_to_compare or not month_display:
if post_display == title.replace(" ", "-") or not post_display:
if allentries_display == "1" or entry_counter < entries_per_page:
content = open(entry, "r")
print tab*3 + "<div class=\"entry\">"
if permalinks:
2010-12-16 11:11:41 +01:00
print tab*4 + "<div class=\"entry_title\"><a href=\"?p=%s\" class=\"entry_title\">%s</a></div>" % (title.replace(" ", "-"), title)
2010-12-14 11:26:21 +01:00
else:
2010-12-16 11:11:41 +01:00
print tab*4 + "<div class=\"entry_title\">%s</div>" % title
print tab*4 + "<div class=\"entry_date\">%s</div>" % date
2010-12-14 11:26:21 +01:00
print tab*4 + "<div class=\"entry_content\">"
for line in content:
if no_break.match(line):
print tab*5 + line.strip()
else:
print tab*5 + line.strip() + "<br />"
print tab*4 + "</div>"
print tab*4 + "<div class=\"entry_footer\"></div>"
print tab*4 + "<div class=\"entry_border_left\"></div>"
print tab*4 + "<div class=\"entry_border_right\"></div>"
print tab*4 + "<div class=\"entry_border_top\"></div>"
print tab*4 + "<div class=\"entry_border_bottom\"></div>"
# Comments...
# ... are shown when post_display and comments_file isn't false
comments_file = glob(os.path.join(entries_dir, title + ".comments"))
if post_display:
if comments_file:
comments_content = open(comments_file[0], "r")
print tab*3 + "</div>"
print tab*2 + "</div>"
print ""
print tab*2 + "<div class=\"comments\">"
notfirstline = 0 # Ugly fix for closing comment containers
label_count = 0
for line in comments_content:
if line_start_hyphen.match(line):
if notfirstline == 1:
print tab*4 + "</div>"
print tab*3 + "</div>"
notfirstline = 0
print tab*3 + "<div class=\"comment\">"
# Label for each comment
label_count += 1
2010-12-16 11:11:41 +01:00
print tab*4 + "<a name=\"%s\"></a>" % str(label_count)
2010-12-14 11:26:21 +01:00
2010-12-16 11:11:41 +01:00
print tab*4 + "<div class=\"comment_author\">%s</div>" % line.split(".", 1)[1].strip()
2010-12-14 11:26:21 +01:00
elif line_start_plus.match(line):
2010-12-16 11:11:41 +01:00
print tab*4 + "<div class=\"comment_date\">%s</div>" % line.split(".", 1)[1].strip()
2010-12-14 11:26:21 +01:00
print tab*4 + "<div class=\"comment_content\">"
else:
notfirstline = 1
line = line.split(".", 1)[1]
print tab*5 + line.strip() + "<br />"
print ""
print tab*4 + "</div>"
print tab*3 + "</div>"
comments_content.close()
else:
print tab*3 + "</div>"
print tab*2 + "</div>"
print tab*2 + "<div class=\"comments\">"
# Form for adding comments
if comments == "True":
random_int_a = randint(1,9)
random_int_b = randint(1,9)
cquizv = random_int_a + random_int_b
print tab*3 + "<div class=\"submit_comment\">"
print tab*4 + "<form action=\"\" method=\"post\">"
2010-12-16 11:11:41 +01:00
print tab*5 + "<input type=\"hidden\" name=\"ctitle\" value=\"%s\" />" % title
print tab*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"%s\" />" % str(cquizv)
print tab*5 + "<label class=\"submit_comment_name\">%s:</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />" % blog_locale[6]
print tab*5 + "<br /><label class=\"submit_comment_text\">%s:</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>" % blog_locale[7]
print tab*5 + "<br /><label class=\"submit_comment_quiz\">%s+%s=</label><input class=\"submit_comment_quiz_input\" type=\"text\" id=\"cquiz\" name=\"cquiz\" />" % (str(random_int_a), str(random_int_b))
print tab*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"%s\" />" % blog_locale[8]
2010-12-14 11:26:21 +01:00
print tab*4 + "</form>"
print tab*3 + "</div>"
else:
print tab*3 + "<div class=\"submit_border_bottom\"></div>"
print ""
if comments == "True":
comments_file = glob(os.path.join(entries_dir, title + ".comments"))
if not comments_file and not post_display:
print tab*4 + "<div class=\"entry_comment\">"
2010-12-16 11:11:41 +01:00
print tab*5 + "<a href=\"?p=%s\" class=\"entry_comment\">%s</a>" % (title.replace(" ", "-"), blog_locale[3])
2010-12-14 11:26:21 +01:00
print tab*4 + "</div>"
print tab*3 + "</div>"
print ""
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 tab*4 + "<div class=\"entry_comment\">"
2010-12-16 11:11:41 +01:00
print tab*5 + "<a href=\"?p=%s\" class=\"entry_comment\">%s (%s)</a>" % (title.replace(" ", "-"), blog_locale[4], str(comments_counter))
2010-12-14 11:26:21 +01:00
print tab*4 + "</div>"
print tab*3 + "</div>"
print ""
comments_content.close()
else:
print tab*3 + "</div>"
print ""
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
2010-12-16 11:11:41 +01:00
print tab*3 + "<div class=\"entry\"><a href=\"?a=1\">%s</a></div>" % blog_locale[5]
2010-12-14 11:26:21 +01:00
print tab*2 + "</div>"
print ""
print tab + "</body>"
print "</html>"
# vim: set sw=4 tw=0 ts=4 expandtab: