Flexible Lisp Blogware. Fork for personal use. Mirrored from https://github.com/kingcons/coleslaw originally.

static-pages.lisp 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. (defpackage :coleslaw-static-pages
  2. (:use :cl)
  3. (:export #:enable)
  4. (:import-from :coleslaw #:*config*
  5. #:content
  6. #:content-text
  7. #:page-url
  8. #:find-all
  9. #:render
  10. #:publish
  11. #:theme-fn
  12. #:render-text
  13. #:write-document))
  14. (in-package :coleslaw-static-pages)
  15. (defclass page (content)
  16. ((title :initarg :title :reader title-of)
  17. (url :initarg :url :reader page-url)))
  18. (defmethod initialize-instance :after ((object page) &key)
  19. ;; Expect all static-pages to be written in Markdown for now.
  20. (with-slots (url coleslaw::text) object
  21. (setf url (make-pathname :defaults url)
  22. coleslaw::text (render-text coleslaw::text :md))))
  23. (defmethod render ((object page) &key next prev)
  24. ;; For the time being, we'll re-use the normal post theme.
  25. (declare (ignore next prev))
  26. (funcall (theme-fn 'post) (list :config *config*
  27. :post object)))
  28. (defmethod publish ((doc-type (eql (find-class 'page))))
  29. (dolist (page (find-all 'page))
  30. (write-document page)))
  31. (defun enable ())