src/view/components/blogpost.lisp

DOWNLOAD
(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"))))