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

static-pages.lisp 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. (defpackage :coleslaw-static-pages
  2. (:use :cl)
  3. (:export #:enable)
  4. (:import-from :coleslaw #:*config*
  5. #:content
  6. #:find-all
  7. #:render
  8. #:publish
  9. #:theme-fn
  10. #:render-text
  11. #:write-document))
  12. (in-package :coleslaw-static-pages)
  13. (defclass page (content)
  14. ((title :initarg :title :reader coleslaw::title-of)
  15. (format :initarg :format :reader coleslaw::page-format))
  16. ;; default format is markdown (for backward compatibility)
  17. (:default-initargs :format "md"))
  18. (defmethod initialize-instance :after ((object page) &key)
  19. (with-slots (coleslaw::url coleslaw::text format) object
  20. (setf coleslaw::url (make-pathname :defaults coleslaw::url)
  21. format (alexandria:make-keyword (string-upcase format))
  22. coleslaw::text (render-text coleslaw::text format))))
  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 ())