(define-module (theme) #:use-module (haunt html) #:use-module (haunt site) #:use-module (haunt post) #:use-module (haunt builder blog) #:use-module (sxml xpath) #:export (hwebs-theme-blog hwebs-theme-now flat-page-template)) (define layout (lambda (site title body) `((doctype "html") (html (head (meta (@ (http-equiv "Content-Type") (content "text/html") (charset "utf-8"))) (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0"))) (link (@ (rel "stylesheet") (type "text/css") (href "/style.css"))) (title ,(string-append title " — " (site-title site)))) (body (header (span ,(assq-ref (site-default-metadata site) 'author)) (nav (ul (li (a (@ (href "/")) "Home")) (li (a (@ (href "/now")) "Now")) (li (a (@ (href "/blog")) "Blog"))))) (main (article (h1 ,title) ,body))))))) (define hwebs-theme-blog (theme #:name "hwebs" #:layout layout #:post-template (lambda (post) ;; TODO fill in datetime correctly ;; TODO add ? (as hidden?) `((time ,(date->string*(post-date post))) ,(post-sxml post))) #:collection-template (lambda (site title posts prefix) (define (post-uri post) (string-append "/" (or prefix "") "/" (site-post-slug site post) ".html")) `((ul ,@(map (lambda (post) `(li (a (@ (href ,(post-uri post))) ,(post-ref post 'title) " — " ,(date->string* (post-date post))))) posts)))))) (define hwebs-theme-now (theme #:name "hwebs-now" #:layout layout #:post-template (lambda (post) ;; TODO fill in datetime correctly ;; TODO add ? (as hidden?) `((time ,(date->string*(post-date post))) ,(post-sxml post))) #:collection-template (lambda (site title posts prefix) (define (post-uri post) (string-append "/" (or prefix "") "/" (site-post-slug site post) ".html")) (define (post-entries post) ((sxpath '(rss channel item title *text*)) (post-sxml post))) `(,@(map (lambda (post) `(section (h2 ,(post-ref post 'title)) ;; TODO only show "See more" if there are more entries than max ;; + maybe put it at bottom (a (@ (href ,(post-uri post))) "See more.") (ul ,@(map (lambda (entry-title) `(li ,entry-title)) ;; TODO do this better (list-head (post-entries post) (min 5 (length (post-entries post)))))))) posts))))) (define (flat-page-template site metadata body) ((theme-layout hwebs-theme-blog) site (assq-ref metadata 'title) body))