X-Git-Url: https://git.llucax.com/software/blitiri.git/blobdiff_plain/958d21141796b86d79fc95c86f679d08652ef78e..e3c7d198b1679ff33fc1e4fc800aa61f22a5ab31:/blitiri.cgi diff --git a/blitiri.cgi b/blitiri.cgi index dd87387..15c820e 100755 --- a/blitiri.cgi +++ b/blitiri.cgi @@ -50,6 +50,9 @@ import urllib import cgi from docutils.core import publish_parts +# Before importing the config, add our cwd to the Python path +sys.path.append(os.getcwd()) + # Load the config file, if there is one try: from config import * @@ -57,17 +60,22 @@ except: pass +# Pimp *_path config variables to support relative paths +data_path = os.path.realpath(data_path) +templates_path = os.path.realpath(templates_path) + # Default template -default_main_header = """ - +default_main_header = """\ + + - + - + %(title)s @@ -79,12 +87,12 @@ default_main_header = """ """ default_main_footer = """ -

-



+ @@ -123,16 +131,17 @@ default_css = """ body { font-family: sans-serif; font-size: small; + width: 52em; } div.content { - width: 50%; + width: 96%; } h1 { font-size: large; border-bottom: 2px solid #99F; - width: 60%; + width: 100%; margin-bottom: 1em; } @@ -170,15 +179,11 @@ div.article { margin-bottom: 2em; } -hr { - float: left; - height: 2px; - border: 0; - background-color: #99F; - width: 60%; -} - div.footer { + margin-top: 1em; + padding-top: 0.4em; + width: 100%; + border-top: 2px solid #99F; font-size: x-small; } @@ -244,29 +249,7 @@ class Templates (object): def get_article_header(self, article): avars = self.vars.copy() - avars.update( { - 'arttitle': article.title, - 'author': article.author, - 'date': article.created.isoformat(' '), - 'uuid': article.uuid, - 'created': article.created.isoformat(' '), - 'updated': article.updated.isoformat(' '), - 'tags': article.get_tags_links(), - - 'cyear': article.created.year, - 'cmonth': article.created.month, - 'cday': article.created.day, - 'chour': article.created.hour, - 'cminute': article.created.minute, - 'csecond': article.created.second, - - 'uyear': article.updated.year, - 'umonth': article.updated.month, - 'uday': article.updated.day, - 'uhour': article.updated.hour, - 'uminute': article.updated.minute, - 'usecond': article.updated.second, - } ) + avars.update(article.to_vars()) p = self.tpath + '/art_header.html' if os.path.isfile(p): @@ -275,29 +258,7 @@ class Templates (object): def get_article_footer(self, article): avars = self.vars.copy() - avars.update( { - 'arttitle': article.title, - 'author': article.author, - 'date': article.created.isoformat(' '), - 'uuid': article.uuid, - 'created': article.created.isoformat(' '), - 'updated': article.updated.isoformat(' '), - 'tags': article.get_tags_links(), - - 'cyear': article.created.year, - 'cmonth': article.created.month, - 'cday': article.created.day, - 'chour': article.created.hour, - 'cminute': article.created.minute, - 'csecond': article.created.second, - - 'uyear': article.updated.year, - 'umonth': article.updated.month, - 'uday': article.updated.day, - 'uhour': article.updated.hour, - 'uminute': article.updated.minute, - 'usecond': article.updated.second, - } ) + avars.update(article.to_vars()) p = self.tpath + '/art_footer.html' if os.path.isfile(p): @@ -357,6 +318,10 @@ class Article (object): return -1 return 1 + def title_cmp(self, other): + return cmp(self.title, other.title) + + def load(self): try: raw = open(data_path + '/' + self.path).readlines() @@ -398,6 +363,33 @@ class Article (object): writer_name = "html") return parts['body'].encode('utf8') + def to_vars(self): + return { + 'arttitle': self.title, + 'author': self.author, + 'date': self.created.isoformat(' '), + 'uuid': self.uuid, + 'tags': self.get_tags_links(), + + 'created': self.created.isoformat(' '), + 'ciso': self.created.isoformat(), + 'cyear': self.created.year, + 'cmonth': self.created.month, + 'cday': self.created.day, + 'chour': self.created.hour, + 'cminute': self.created.minute, + 'csecond': self.created.second, + + 'updated': self.updated.isoformat(' '), + 'uiso': self.updated.isoformat(), + 'uyear': self.updated.year, + 'umonth': self.updated.month, + 'uday': self.updated.day, + 'uhour': self.updated.hour, + 'uminute': self.updated.minute, + 'usecond': self.updated.second, + } + def get_tags_links(self): l = [] tags = list(self.tags) @@ -503,6 +495,20 @@ def render_html(articles, db, actyear = None): print template.get_article_footer(a) print template.get_main_footer() +def render_artlist(articles, db, actyear = None): + template = Templates(templates_path, db, actyear) + print 'Content-type: text/html; charset=utf-8\n' + print template.get_main_header() + print '

Articles

' + for a in articles: + print '
  • %(title)s
  • ' \ + % { 'url': blog_url, + 'uuid': a.uuid, + 'title': a.title, + 'author': a.author, + } + print template.get_main_footer() + def render_atom(articles): if len(articles) > 0: updated = articles[0].updated.isoformat() @@ -526,6 +532,11 @@ def render_atom(articles): } for a in articles: + vars = a.to_vars() + vars.update( { + 'url': full_url, + 'contents': a.to_html(), + } ) print """ %(arttitle)s @@ -533,29 +544,20 @@ def render_atom(articles): %(url)s/post/%(uuid)s %(arttitle)s - %(created)sZ - %(updated)sZ + %(ciso)sZ + %(uiso)sZ

    %(contents)s

    - """ % { - 'arttitle': a.title, - 'author': a.author, - 'uuid': a.uuid, - 'url': full_url, - 'created': a.created.isoformat(), - 'updated': a.updated.isoformat(), - 'contents': a.to_html(), - } - + """ % vars print "" def render_style(): - print 'Content-type: text/plain\n' + print 'Content-type: text/css\r\n\r\n', print default_css def handle_cgi(): @@ -570,6 +572,7 @@ def handle_cgi(): atom = False style = False post = False + artlist = False if os.environ.has_key('PATH_INFO'): path_info = os.environ['PATH_INFO'] @@ -577,7 +580,9 @@ def handle_cgi(): atom = path_info == '/atom' tag = path_info.startswith('/tag/') post = path_info.startswith('/post/') - if not style and not atom and not post and not tag: + artlist = path_info.startswith('/list') + if not style and not atom and not post and not tag \ + and not artlist: date = path_info.split('/')[1:] try: if len(date) > 1 and date[0]: @@ -605,7 +610,11 @@ def handle_cgi(): elif style: render_style() elif post: - render_html( [db.get_article(uuid)], year ) + render_html( [db.get_article(uuid)], db, year ) + elif artlist: + articles = db.get_articles() + articles.sort(cmp = Article.title_cmp) + render_artlist(articles, db) else: articles = db.get_articles(year, month, day, tags) articles.sort(reverse = True)