plugins/static-pages.lisp (1457 bytes)
1 (defpackage :coleslaw-static-pages 2 (:use :cl) 3 (:export #:enable) 4 (:import-from :coleslaw #:*config* 5 #:assert-field 6 #:content 7 #:find-all 8 #:render 9 #:publish 10 #:theme-fn 11 #:render-text 12 #:write-document)) 13 14 (in-package :coleslaw-static-pages) 15 16 (defclass page (content) 17 ((title :initarg :title :reader coleslaw::title-of) 18 (format :initarg :format :reader coleslaw::page-format)) 19 ;; default format is markdown (for backward compatibility) 20 (:default-initargs :format :md)) 21 22 (defmethod initialize-instance :after ((object page) &key) 23 (assert-field 'title object) 24 (assert-field 'coleslaw::url object) 25 (with-slots (coleslaw::url coleslaw::text format title) object 26 (setf coleslaw::url (make-pathname :defaults coleslaw::url) 27 format (alexandria:make-keyword (string-upcase format)) 28 coleslaw::text (render-text coleslaw::text format)))) 29 30 (defmethod render ((object page) &key next prev) 31 ;; For the time being, we'll re-use the normal post theme. 32 (declare (ignore next prev)) 33 (funcall (theme-fn 'post) (list :config *config* 34 :post object))) 35 36 (defmethod publish ((doc-type (eql (find-class 'page)))) 37 (dolist (page (find-all 'page)) 38 (write-document page))) 39 40 (defun enable ())