diff options
-rwxr-xr-x | blogthon.cgi | 1090 |
1 files changed, 578 insertions, 512 deletions
diff --git a/blogthon.cgi b/blogthon.cgi index 1a00590..47847ed 100755 --- a/blogthon.cgi +++ b/blogthon.cgi @@ -26,168 +26,228 @@ from glob import glob from random import randint # A wonderful place for doing some regexp ;) -no_break = re.compile("^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</tr>|<td|</td>|<th|</th>|<p|</p>).*$") +no_break = re.compile("^\s*(<ul|</ul>|<li|</li>|<ol|</ol>|<table|</table>|<tr|</tr>|<td|</td>|<th|</th>|<p|</p>).*$") line_start_hyphen = re.compile("^-.*$") -line_start_plus = re.compile("^\+.*$") +line_start_plus = re.compile("^\+.*$") tab = "\t" def generate_uuid(string): - 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 + 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 def errorpage(string): - document_header("xhtml-strict") - print "<head><title>Error!</title></head>" - print "<body>" - print tab + string - print "</body>" - print "</html>" - sys.exit() + document_header("xhtml-strict") + print "<head><title>Error!</title></head>" + print "<body>" + print tab + string + print "</body>" + print "</html>" + sys.exit() 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\"" - 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\">" + 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\">" # Parse configuration configuration = ConfigParser() for config in ["../blogthonrc", "../.blogthonrc", "configuration"]: - if os.path.exists(config): - configuration.read(config) - config = True - break - else: - config = False + if os.path.exists(config): + configuration.read(config) + config = True + break + else: + config = False if not config: - errorpage("No suitable configuration found!") + errorpage("No suitable configuration found!") -try: blog_title = configuration.get("personal", "blog_title") -except: errorpage("\"blog_title\" is missing in configuration!") +try: + blog_title = configuration.get("personal", "blog_title") +except: + errorpage("\"blog_title\" is missing in configuration!") -try: blog_subtitle = configuration.get("personal", "blog_subtitle") -except: errorpage("\"blog_subtitle\" is missing in configuration!") +try: + blog_subtitle = configuration.get("personal", "blog_subtitle") +except: + errorpage("\"blog_subtitle\" is missing in configuration!") -try: blog_url = configuration.get("personal", "blog_url") -except: errorpage("\"blog_url\" is missing in configuration!") +try: + blog_url = configuration.get("personal", "blog_url") +except: + errorpage("\"blog_url\" is missing in configuration!") -try: keywords = configuration.get("personal", "keywords") -except: errorpage("\"keywords\" is missing in configuration!") +try: + keywords = configuration.get("personal", "keywords") +except: + errorpage("\"keywords\" is missing in configuration!") + +try: + entries_dir = configuration.get("personal", "entries_dir") +except: + errorpage("\"entries_dir\" is missing in configuration!") -try: entries_dir = configuration.get("personal", "entries_dir") -except: errorpage("\"entries_dir\" is missing in configuration!") if not os.path.exists(entries_dir): - errorpage("\"entries_dir\" does not exist!") + errorpage("\"entries_dir\" does not exist!") -try: entries_suffix = configuration.get("personal", "entries_suffix") -except: errorpage("\"entries_suffix\" is missing in configuration!") +try: + entries_suffix = configuration.get("personal", "entries_suffix") +except: + errorpage("\"entries_suffix\" is missing in configuration!") -try: staticpages_dir = configuration.get("personal", "staticpages_dir") -except: errorpage("\"staticpages_dir\" is missing in configuration!") +try: + staticpages_dir = configuration.get("personal", "staticpages_dir") +except: + errorpage("\"staticpages_dir\" is missing in configuration!") if not os.path.exists(staticpages_dir): - errorpage("\"staticpages_dir\" does not exist!") + errorpage("\"staticpages_dir\" does not exist!") -try: plugins_dir = configuration.get("personal", "plugins_dir") -except: errorpage("\"plugins_dir\" is missing in configuration!") +try: + plugins_dir = configuration.get("personal", "plugins_dir") +except: + errorpage("\"plugins_dir\" is missing in configuration!") if not os.path.exists(plugins_dir): - errorpage("\"plugins_dir\" does not exist!") + errorpage("\"plugins_dir\" does not exist!") + +try: + style = configuration.get("look", "style") +except: + errorpage("\"style\" is missing in configuration!") -try: style = configuration.get("look", "style") -except: errorpage("\"style\" is missing in configuration!") +try: + language = configuration.get("look", "language") +except: + errorpage("\"language\" is missing in configuration!") -try: language = configuration.get("look", "language") -except: errorpage("\"language\" is missing in configuration!") if language == "de": - 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) + 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) else: - 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) - -try: entries_per_page = configuration.getint("look", "entries_per_page") -except: errorpage("\"entries_per_page\" is missing in configuration!") - -try: monthlist = configuration.get("look", "monthlist") -except: errorpage("\"monthlist\" is missing in configuration!") - -try: staticpages = configuration.get("look", "staticpages") -except: errorpage("\"staticpages\" is missing in configuration!") - -try: linklist = configuration.get("look", "linklist") -except: errorpage("\"linklist\" is missing in configuration!") + 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) + +try: + entries_per_page = configuration.getint("look", "entries_per_page") +except: + errorpage("\"entries_per_page\" is missing in configuration!") + +try: + monthlist = configuration.get("look", "monthlist") +except: + errorpage("\"monthlist\" is missing in configuration!") + +try: + staticpages = configuration.get("look", "staticpages") +except: + errorpage("\"staticpages\" is missing in configuration!") + +try: + linklist = configuration.get("look", "linklist") +except: + errorpage("\"linklist\" is missing in configuration!") if not os.path.exists("linklist"): - errorpage("\"linklist\" does not exist!") - -try: permalinks = configuration.get("look", "permalinks") -except: errorpage("\"permalinks\" is missing in configuration!") - -try: comments = configuration.get("look", "comments") -except: errorpage("\"comments\" is missing in configuration!") - -try: newest_first = configuration.get("look", "newest_first") -except: errorpage("\"newest_first\" is missing in configuration!") - -try: new_comment_mail = configuration.get("smtp", "new_comment_mail") -except: errorpage("\"new_comment_mail\" is missing in configuration!") - -try: mail_to = configuration.get("smtp", "mail_to") -except: errorpage("\"mail_to\" is missing in configuration!") - -try: smtp_host = configuration.get("smtp", "smtp_host") -except: errorpage("\"smtp_host\" is missing in configuration!") - -try: feed_preview = configuration.get("feed", "feed_preview") -except: errorpage("\"feed_preview\" is missing or empty in configuration!") + errorpage("\"linklist\" does not exist!") + +try: + permalinks = configuration.get("look", "permalinks") +except: + errorpage("\"permalinks\" is missing in configuration!") + +try: + comments = configuration.get("look", "comments") +except: + errorpage("\"comments\" is missing in configuration!") + +try: + newest_first = configuration.get("look", "newest_first") +except: + errorpage("\"newest_first\" is missing in configuration!") + +try: + new_comment_mail = configuration.get("smtp", "new_comment_mail") +except: + errorpage("\"new_comment_mail\" is missing in configuration!") + +try: + mail_to = configuration.get("smtp", "mail_to") +except: + errorpage("\"mail_to\" is missing in configuration!") + +try: + smtp_host = configuration.get("smtp", "smtp_host") +except: + errorpage("\"smtp_host\" is missing in configuration!") + +try: + feed_preview = configuration.get("feed", "feed_preview") +except: + errorpage("\"feed_preview\" is missing or empty in configuration!") # Read POST Variables action = FieldStorage() month_display = action.getvalue("m") static_display = action.getvalue("s") -if static_display: static_display = static_display.replace("/", "") +if static_display: + static_display = static_display.replace("/", "") post_display = action.getvalue("p") -if post_display: post_display = post_display.replace(" ", "-").replace("/", "") +if post_display: + post_display = post_display.replace(" ", "-").replace("/", "") 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 = "" + +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") @@ -195,417 +255,423 @@ cname = action.getvalue("cname") ctext = action.getvalue("ctext") cquiz = action.getvalue("cquiz") cquizv = action.getvalue("cquizv") -if not ctitle: ctitle = "" -if not cname: cname = "" -if not ctext: ctext = "" -if not cquiz: cquiz = "" -if not cquizv: cquizv = "" + +if not ctitle: + ctitle = "" +if not cname: + cname = "" +if not ctext: + ctext = "" +if not cquiz: + cquiz = "" +if not cquizv: + cquizv = "" # Comment to commit? if cname and ctext and ctitle: - # 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): - try: - content = open(comments_file, "w") - content.close() - except: - errorpage("\"" + entries_dir + "\" isn\'t writable!") - - try: - 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: " + mail_to + "\nSubject: New comment on " + blog_title + "\n\nSomeone wrote a comment to this entry: " + blog_url + "?p=" + ctitle.replace(" ", "-") - smtp = SMTP(smtp_host) - smtp.starttls() - smtp.sendmail(blog_title, mail_to, msg) - smtp.quit() - except: - errorpage("Comment cannot be written!") + # 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): + try: + content = open(comments_file, "w") + content.close() + except: + errorpage("\"" + entries_dir + "\" isn\'t writable!") + + try: + 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: " + mail_to + "\nSubject: New comment on " + blog_title + "\n\nSomeone wrote a comment to this entry: " + blog_url + "?p=" + ctitle.replace(" ", "-") + smtp = SMTP(smtp_host) + smtp.starttls() + smtp.sendmail(blog_title, mail_to, msg) + smtp.quit() + except: + errorpage("Comment cannot be written!") # Read entries and store their title and timestamp -entries = [] -entries_list = glob(os.path.join(entries_dir, "*." + entries_suffix)) +entries = [] +entries_list = glob(os.path.join(entries_dir, "*." + entries_suffix)) for entry in entries_list: - 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) + 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) if newest_first: - entries.sort(reverse=True) + entries.sort(reverse=True) else: - entries.sort() + entries.sort() # Generate atom feed if feed_display == "atom": - 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") - print "<link href=\"" + blog_url + "/?feed=atom\" rel=\"self\" type=\"application/atom+xml\"/>" - print tab + "<author>" - print tab*2 + "<name>" + blog_title + "</name>" - print tab + "</author>" - print tab + "<title>" + blog_title + "</title>" - print tab + "<id>urn:uuid:" + blog_title_md5sum + "</id>" - print tab + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>" - 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>" - print tab*3 + "<title>" + title + "</title>" - print tab*3 + "<link href=\"" + blog_url + "?p=" + title + "\"/>" - print tab*3 + "<id>urn:uuid:" + title_md5sum + "</id>" - print tab*3 + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>" - 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>" + 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") + print "<link href=\"" + blog_url + "/?feed=atom\" rel=\"self\" type=\"application/atom+xml\"/>" + print tab + "<author>" + print tab*2 + "<name>" + blog_title + "</name>" + print tab + "</author>" + print tab + "<title>" + blog_title + "</title>" + print tab + "<id>urn:uuid:" + blog_title_md5sum + "</id>" + print tab + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>" + 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>" + print tab*3 + "<title>" + title + "</title>" + print tab*3 + "<link href=\"" + blog_url + "?p=" + title + "\"/>" + print tab*3 + "<id>urn:uuid:" + title_md5sum + "</id>" + print tab*3 + "<updated>" + str(date[0]) + "-" + month + "-" + day + "T" + hour + ":" + min + ":" + sec + "Z</updated>" + 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>" # Generate rss 2.0 feed elif feed_display == "rss": - document_header("rss") - print tab + "<channel>" - print tab*2 + "<title>" + blog_title + "</title>" - print tab*2 + "<link>" + blog_url + "</link>" - print tab*2 + "<description>" + blog_subtitle + "</description>" - date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0]))) - print tab*2 + "<pubDate>" + date + "</pubDate>" - 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>" - print tab*3 + "<title>" + title + "</title>" - print tab*3 + "<link>" + blog_url + "?p=" + title + "</link>" - print tab*3 + "<guid>" + blog_url + "?p=" + title + "</guid>" - print tab*3 + "<pubDate>" + date + "</pubDate>" - content = open(str(entries[i][1]), "r") - rss_description= "" - for h in xrange(0, int(feed_preview)): - line = content.readline().strip() - if line: - rss_description = rss_description + line + "<br />" - content.close() - print tab*3 + "<description><![CDATA[" + rss_description + "]]></description>" - print tab*2 + "</item>" - print tab + "</channel>" - print "</rss>" + document_header("rss") + print tab + "<channel>" + print tab*2 + "<title>" + blog_title + "</title>" + print tab*2 + "<link>" + blog_url + "</link>" + print tab*2 + "<description>" + blog_subtitle + "</description>" + date = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.mktime(entries[0][0]))) + print tab*2 + "<pubDate>" + date + "</pubDate>" + 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>" + print tab*3 + "<title>" + title + "</title>" + print tab*3 + "<link>" + blog_url + "?p=" + title + "</link>" + print tab*3 + "<guid>" + blog_url + "?p=" + title + "</guid>" + print tab*3 + "<pubDate>" + date + "</pubDate>" + content = open(str(entries[i][1]), "r") + rss_description= "" + for h in xrange(0, int(feed_preview)): + line = content.readline().strip() + if line: + rss_description = rss_description + line + "<br />" + content.close() + print tab*3 + "<description><![CDATA[" + rss_description + "]]></description>" + print tab*2 + "</item>" + print tab + "</channel>" + print "</rss>" # Generate regular page else: - document_header("xhtml-strict") - print tab + "<head>" - print tab*2 + "<title>" + blog_title + "</title>" - print tab*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />" - print tab*2 + "<meta name=\"keywords\" content=\"" + keywords + "\" />" - print tab*2 + "<meta name=\"description\" content=\"" + blog_title + "\" />" - print tab*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/" + style + "/" + style + ".css\" />" - 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\">" - print tab*4 + "<a href=\"?\" class=\"header_link\">" + blog_title + "</a>" - print tab*3 + "</div>" - print tab*3 + "<div class=\"header_subtitle\">" - print tab*4 + "<span class=\"header_subtitle\">" + blog_subtitle + "</span>" - 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\">" - print tab*3 + "<div class=\"pages_title\">" + blog_locale[0] + "</div>" - 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) - link = "?s=" + link - file.close() - title = re.sub("\w+?\/\d+?-", "", staticpage) - print tab*5 + "<li class=\"pages_list_entry\"><a href=\"" + link + "\" class=\"pages_list_entry\">" + title + "</a></li>" - 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\">" - print tab*3 + "<div class=\"months_title\">" + blog_locale[1] + "</div>" - print tab*3 + "<div class=\"months_list\">" - print tab*4 + "<ul class=\"months_list\">" - for entry in entries: - date = time.strftime("%m%Y", entry[0]) - date_display = time.strftime("%h %Y", entry[0]) - if not olddate == date: - print tab*5 + "<li class=\"months_list_entry\"><a href=\"?m=" + date + "\" class=\"months_list_entry\">" + date_display + "</a></li>" - 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\">" - print tab*3 + "<div class=\"linklist_title\">" + blog_locale[2] + "</div>" - 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: - print tab*5 + "<li class=\"linklist_list_entry\"><a href=\"" + line.split(" ")[0] + "\" class=\"months_list_entry\">" + line.split(" ", 1)[1].strip() + "</a></li>" - 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\">" - print tab*4 + "<div class=\"entry_title\">" + re.sub("^\.", "", re.sub("\d+?-", "", static_display)) + "</div>" - 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: - print tab*4 + "<div class=\"entry_title\"><a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_title\">" + title + "</a></div>" - else: - print tab*4 + "<div class=\"entry_title\">" + title + "</div>" - print tab*4 + "<div class=\"entry_date\">" + date + "</div>" - 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 - print tab*4 + "<a name=\"" + str(label_count) + "\"></a>" - - print tab*4 + "<div class=\"comment_author\">" + line.split(".", 1)[1].strip() + "</div>" - elif line_start_plus.match(line): - print tab*4 + "<div class=\"comment_date\">" + line.split(".", 1)[1].strip() + "</div>" - 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\">" - print tab*5 + "<input type=\"hidden\" name=\"ctitle\" value=\"" + title + "\" />" - print tab*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"" + str(cquizv) + "\" />" - print tab*5 + "<label class=\"submit_comment_name\">" + blog_locale[6] + ":</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />" - print tab*5 + "<br /><label class=\"submit_comment_text\">" + blog_locale[7] + ":</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>" - print tab*5 + "<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 tab*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"" + blog_locale[8] + "\" />" - 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\">" - print tab*5 + "<a href=\"?p=" + title.replace(" " ,"-") + "\" class=\"entry_comment\">" + blog_locale[3] + "</a>" - 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\">" - print tab*5 + "<a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_comment\">" + blog_locale[4] + " (" + str(comments_counter) + ")</a>" - 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 - print tab*3 + "<div class=\"entry\"><a href=\"?a=1\">" + blog_locale[5] + "</a></div>" - - print tab*2 + "</div>" - print "" - print tab + "</body>" - print "</html>" - -# vim: set tw=0 ts=4: + document_header("xhtml-strict") + print tab + "<head>" + print tab*2 + "<title>" + blog_title + "</title>" + print tab*2 + "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />" + print tab*2 + "<meta name=\"keywords\" content=\"" + keywords + "\" />" + print tab*2 + "<meta name=\"description\" content=\"" + blog_title + "\" />" + print tab*2 + "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/" + style + "/" + style + ".css\" />" + 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\">" + print tab*4 + "<a href=\"?\" class=\"header_link\">" + blog_title + "</a>" + print tab*3 + "</div>" + print tab*3 + "<div class=\"header_subtitle\">" + print tab*4 + "<span class=\"header_subtitle\">" + blog_subtitle + "</span>" + 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\">" + print tab*3 + "<div class=\"pages_title\">" + blog_locale[0] + "</div>" + 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) + link = "?s=" + link + file.close() + title = re.sub("\w+?\/\d+?-", "", staticpage) + print tab*5 + "<li class=\"pages_list_entry\"><a href=\"" + link + "\" class=\"pages_list_entry\">" + title + "</a></li>" + 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\">" + print tab*3 + "<div class=\"months_title\">" + blog_locale[1] + "</div>" + print tab*3 + "<div class=\"months_list\">" + print tab*4 + "<ul class=\"months_list\">" + for entry in entries: + date = time.strftime("%m%Y", entry[0]) + date_display = time.strftime("%h %Y", entry[0]) + if not olddate == date: + print tab*5 + "<li class=\"months_list_entry\"><a href=\"?m=" + date + "\" class=\"months_list_entry\">" + date_display + "</a></li>" + 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\">" + print tab*3 + "<div class=\"linklist_title\">" + blog_locale[2] + "</div>" + 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: + print tab*5 + "<li class=\"linklist_list_entry\"><a href=\"" + line.split(" ")[0] + "\" class=\"months_list_entry\">" + line.split(" ", 1)[1].strip() + "</a></li>" + 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\">" + print tab*4 + "<div class=\"entry_title\">" + re.sub("^\.", "", re.sub("\d+?-", "", static_display)) + "</div>" + 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: + print tab*4 + "<div class=\"entry_title\"><a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_title\">" + title + "</a></div>" + else: + print tab*4 + "<div class=\"entry_title\">" + title + "</div>" + print tab*4 + "<div class=\"entry_date\">" + date + "</div>" + 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 + print tab*4 + "<a name=\"" + str(label_count) + "\"></a>" + + print tab*4 + "<div class=\"comment_author\">" + line.split(".", 1)[1].strip() + "</div>" + elif line_start_plus.match(line): + print tab*4 + "<div class=\"comment_date\">" + line.split(".", 1)[1].strip() + "</div>" + 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\">" + print tab*5 + "<input type=\"hidden\" name=\"ctitle\" value=\"" + title + "\" />" + print tab*5 + "<input type=\"hidden\" name=\"cquizv\" value=\"" + str(cquizv) + "\" />" + print tab*5 + "<label class=\"submit_comment_name\">" + blog_locale[6] + ":</label><input class=\"submit_comment_name_input\" type=\"text\" id=\"cname\" name=\"cname\" />" + print tab*5 + "<br /><label class=\"submit_comment_text\">" + blog_locale[7] + ":</label><textarea class=\"submit_comment_textarea\" id=\"ctext\" name=\"ctext\"></textarea>" + print tab*5 + "<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 tab*5 + "<br /><input class=\"submit_comment_button\" type=\"submit\" id=\"submit\" value=\"" + blog_locale[8] + "\" />" + 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\">" + print tab*5 + "<a href=\"?p=" + title.replace(" " ,"-") + "\" class=\"entry_comment\">" + blog_locale[3] + "</a>" + 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\">" + print tab*5 + "<a href=\"?p=" + title.replace(" ", "-") + "\" class=\"entry_comment\">" + blog_locale[4] + " (" + str(comments_counter) + ")</a>" + 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 + print tab*3 + "<div class=\"entry\"><a href=\"?a=1\">" + blog_locale[5] + "</a></div>" + + print tab*2 + "</div>" + print "" + print tab + "</body>" + print "</html>" + +# vim: set sw=4 tw=0 ts=4 expandtab: |