2011-04-16 15:45:37 -04:00
|
|
|
(in-package :coleslaw)
|
|
|
|
|
2013-01-01 17:31:33 -05:00
|
|
|
(defclass post (content)
|
2014-08-27 11:51:12 -04:00
|
|
|
((title :initarg :title :reader title-of)
|
|
|
|
(author :initarg :author :reader author-of)
|
2017-03-22 18:30:49 +01:00
|
|
|
(excerpt :initarg :excerpt :reader excerpt-of)
|
2014-08-27 11:51:12 -04:00
|
|
|
(format :initarg :format :reader post-format))
|
2017-03-22 18:30:49 +01:00
|
|
|
(:default-initargs :author nil :excerpt nil))
|
2011-04-16 15:45:37 -04:00
|
|
|
|
2014-03-02 11:54:39 -05:00
|
|
|
(defmethod initialize-instance :after ((object post) &key)
|
2017-03-22 18:30:49 +01:00
|
|
|
(with-slots (url title author excerpt format text) object
|
2017-11-12 20:36:08 -05:00
|
|
|
(let (post-content)
|
2017-10-29 01:06:08 -05:00
|
|
|
(setf url (compute-url object (slugify title))
|
|
|
|
format (make-keyword (string-upcase format))
|
2017-11-12 20:36:08 -05:00
|
|
|
post-content (render-text text format)
|
2017-10-29 01:06:08 -05:00
|
|
|
excerpt (or excerpt
|
|
|
|
(first (split (excerpt-sep *config*)
|
|
|
|
post-content
|
|
|
|
:limit 2)))
|
|
|
|
text post-content
|
|
|
|
author (or author (author *config*))))))
|
2014-03-02 11:54:39 -05:00
|
|
|
|
2012-11-28 16:10:33 -05:00
|
|
|
(defmethod render ((object post) &key prev next)
|
2012-09-12 14:44:44 -04:00
|
|
|
(funcall (theme-fn 'post) (list :config *config*
|
2012-11-28 16:10:33 -05:00
|
|
|
:post object
|
2012-09-12 14:44:44 -04:00
|
|
|
:prev prev
|
|
|
|
:next next)))
|
2012-09-12 10:16:57 -04:00
|
|
|
|
2014-04-15 15:27:46 -04:00
|
|
|
(defmethod publish ((doc-type (eql (find-class 'post))))
|
2013-01-01 17:31:33 -05:00
|
|
|
(loop for (next post prev) on (append '(nil) (by-date (find-all 'post)))
|
2014-04-28 13:59:50 -04:00
|
|
|
while post do (write-document post nil :prev prev :next next)))
|