src/view/components/blogpost.lisp
(in-package :murja.view.components.blogpost)
(defun previously (prev)
(with-keys ("id" "title") prev
(with-html
(:li
(:a :title title :href
(murja.genurl:route->url 'murja.view.single-post:blog/post/id :id id) "Previously")))))
(defun tag (tag)
(with-html
(:li
;; TODO not implemented so I can't link to a defined route here
(:a :href (format nil "/blog/tags/~a" tag) tag))))
(defun blogpost (post)
(with-slots (id title creator created-at content previouslies tags) post
(assert creator)
(let ((img-location (user-img-location creator))
(nickname (user-nickname creator)))
(assert img-location)
(with-html
(:div.post
(:a :href (if (rss-link post)
(rss-link post)
(murja.genurl:route->url 'murja.view.single-post:blog/post/id :id id))
title)
(:div.meta
(:img.user_avatar :src img-location)
(:p ("By ~a" nickname))
(:p ("Written at ~a" (let ((lisp-fixup:*rfc822* t))
(lisp-fixup:fix-timestamp created-at)))))
(when (and *user*
(not (rss-link post)))
;; the old editor is in "/blog/post/edit/~d"
(:a :href (murja.genurl:route->url
'murja.view.admin.new-post:blog/post/editor
:id id)
"Edit this post"))
(:article.content
(:raw
content))
(:ul.previously
(map 'list #'previously previouslies))
(:ul.tags
(map 'list #'tag tags))
(:div)))))) ;; next and previous post ?????????
(defun page (page id)
(with-html
(:ul.page-post-list
(map 'list
(lisp-fixup:compose (lambda (c)
(with-html
(:li c)))
#'blogpost)
(remove-if (lambda (post)
(or (post-hidden? post)
(post-unlisted? post)))
page)))
(:nav.page-nav (if (> id 1)
(:a :href
(murja.genurl:route->url
'murja.view.blog-root:page-tab :id (1- id))
"Newer posts")
(:span ""))
(:a :href (murja.genurl:route->url
'murja.view.blog-root:page-tab :id (1+ id))
"Older posts"))))