Recently Written · git

coleslaw

Emacs mode for the "Coleslaw" site generator written in Common Lisp.

git clone https://github.com/equwal/coleslaw

Log | Files | Refs


plugins/sitemap.lisp (1074 bytes)

1 (defpackage :coleslaw-sitemap
2   (:use :cl)
3   (:import-from :coleslaw #:*config*
4                           #:index
5                           #:page-url
6                           #:find-all
7                           #:publish
8                           #:theme-fn
9                           #:add-document
10                           #:write-document)
11   (:import-from :alexandria #:hash-table-values)
12   (:export #:enable))
13 
14 (in-package :coleslaw-sitemap)
15 
16 (defclass sitemap (index)
17   ((urls :initarg :urls :reader urls)))
18 
19 (defmethod page-url ((object sitemap)) "sitemap.xml")
20 
21 ;; We do 'discovery' in the publish method here because we can't ensure the
22 ;; sitemap discover method is called last. Need all other content to be
23 ;; discovered/in the DB.
24 (defmethod publish ((doc-type (eql (find-class 'sitemap))))
25   (let* ((base-urls '("" "sitemap.xml"))
26          (urls (mapcar #'page-url (hash-table-values coleslaw::*site*)))
27          (sitemap (make-instance 'sitemap :urls (append base-urls urls))))
28     (write-document sitemap (theme-fn 'sitemap "sitemap"))))
29 
30 (defun enable ())