templatesdir = $(datadir)/templates
templates_blog_DATA = \
+ src/templates/blog/author.html \
src/templates/blog/base.html \
src/templates/blog/post.html
--- /dev/null
+{% extends "base.html" %}
+
+{% block title %}{{ author.name }}{% end block %}
+
+{% block main %}
+ <div class="card">
+ <div class="card-body">
+ <h5>{{ _("%s's posts") % author.name }}</h5>
+
+ {% for post in posts %}
+ <strong class="mb-0">
+ <a href="/post/{{ post.slug }}">{{ post.title }}</a>
+ </strong>
+ <p class="text-muted small">
+ {{ locale.format_date(post.published, shorter=True, relative=False) }}
+ </p>
+ {% end %}
+ </div>
+ </div>
+{% end block %}
+
+{% block right %}
+ <div class="col-md-3 text-center">
+ <img class="img-fluid rounded-circle mb-4" src="{{ author.gravatar_icon(160) }}" alt="{{ author.name }}" />
+
+ <p>{{ author.name }}</p>
+
+ <a href="mailto:{{ author.email }}">Email</a>
+ </div>
+{% end block %}
<div class="col">
{% block main %}{% end block %}
</div>
+
+ {% block right %}{% end block %}
</div>
{% end block %}
# blog.ipfire.org
self.add_handlers(r"blog(\.dev)?\.ipfire\.org", [
+ (r"/authors/(\w+)", blog.AuthorHandler),
(r"/post/(.*)", blog.PostHandler),
])
from . import ui_modules
+class AuthorHandler(base.BaseHandler):
+ def get(self, uid):
+ author = self.accounts.get_by_uid(uid)
+ if not author:
+ raise tornado.web.HTTPError(404, "User is unknown")
+
+ # Get all posts from this author
+ posts = self.planet.get_entries_by_author(author.uid)
+ if not posts:
+ raise tornado.web.HTTPError(404, "User has no posts")
+
+ self.render("blog/author.html", author=author, posts=posts)
+
+
class PostHandler(base.BaseHandler):
def get(self, slug):
entry = self.planet.get_entry_by_slug(slug)