;; wiliki-journal.scm -- adds a $$journal macro to WiLiKi ;; Copyright 2006 Evan Prodromou ;; Licensed under the Academic Free License version 3.0 (with-module wiliki.macro (use util.list) (use wiliki) (use wiliki.format) (use wiliki.macro) (use wiliki.db) (use rfc.uri) (use srfi-13) (use srfi-1) (define (show-journal prefix count) (define (first-block page) (call-with-input-string (ref page 'content) (lambda (port) (read-line port)))) (define (format-entry kv) (let ((page (wiliki-db-get (car kv)))) `(div (@ (class "entry")) (h2 ,(substring/shared (ref page 'title) (string-length prefix))) (span (@ (class "date")) ,(wiliki:format-time (ref page 'ctime))) ,@(wiliki:format-content (first-block page)) (a (@ (href ,(string-append "/" (uri-encode-string (ref page 'title))))) "more...")))) (let ((entries (wiliki-db-search (lambda (k v) (string-prefix? prefix k)) (lambda (a b) (> (second (cdr a)) (second (cdr b))))))) `((div (@ (class "journal")) ,@(map format-entry (take* entries (string->number count))))))) (define-reader-macro (journal prefix . maybe-count) (show-journal prefix (get-optional maybe-count "10"))))