(use-modules (haunt asset) (haunt builder blog) (haunt builder atom) (haunt builder assets) (haunt html) (haunt page) (haunt reader) (haunt reader texinfo) (haunt site) (haunt post) (srfi srfi-1) (srfi srfi-19)) (define (stylesheet name) `(link (@ (rel "stylesheet") (href ,(string-append "css/" name ".css"))))) (define (static-page title file-name body) (lambda (site posts) (make-page file-name (with-layout flex-theme site title body) sxml->html))) (define (get-tags post) (or (assoc-ref (post-metadata post) 'tags) '())) (define (post-date-and-tags date tags) (let ((div `(div (@ (class "date-and-tags")) (time (@ (datetime ,(date->string date "~Y-~m-~dT~H:~M:~S"))) ,(date->string date "~Y-~m-~d"))))) (cond ((> (length tags) 0) (append div `(" " (span (@ (style "margin: 0 3px")) ⦿) (span (@ (class "tags")) ,@(drop-right (apply append (map (lambda (tag) `((a (@ (href ,(format #f "tags/~a.html" tag))) ,tag) ", ")) tags)) 1))))) (else div)))) (define flex-theme (theme #:name "Flex" #:layout (lambda (site title body) `((doctype "html") (html (head (meta (@ (charset "utf-8"))) (title ,(string-append title " - " (site-title site))) (link (@ (rel "stylesheet") (href "https://fonts.googleapis.com/css?family=Merriweather+Sans:400,300,300italic,400italic,700,700italic,800,800italic|Merriweather:400,300,300italic,400italic,700,700italic,900,900italic|Source+Code+Pro:200,300,400,500,600,700,900"))) ,(stylesheet "application.min") ,(stylesheet "pygments.min") ,(stylesheet "custom") (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0")))) (body ,(let ((metadata (site-default-metadata site))) `(div (@ (id "page-content")) (header (nav (@ (role "navigation") (class "navigation-bar")) (ul (@ (class "navigation-items left")) (li (@ (id "blog-title-header")) (a (@ (href "index.html")) (h1 ,(assoc-ref metadata 'author))))) (ul (@ (class "navigation-items center"))) (ul (@ (class "navigation-items right")) ,@(map (lambda (page) `(li (a (@ (href ,(cdr page))) ,(car page)))) (assoc-ref metadata 'pages))))) (section (@ (role "main")) (div (@ (class "content") (class "col-md-12")) ,body)))))))) #:post-template (lambda (post) `((article (@ (class "inline")) (header (h1 (@ (class "title")) ,(post-ref post 'title)) ,(post-date-and-tags (post-date post) (get-tags 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 (get-paragraphs sxml count) (define (getp sxml count res) (cond ((or (= count 0) (null? sxml)) res) ((and (pair? (car sxml)) (eq? (caar sxml) 'p)) (getp (cdr sxml) (- count 1) (cons (car sxml) res))) (else (getp (cdr sxml) count (cons (car sxml) res))))) (reverse (getp sxml count '()))) (define (post-summary post) (or (post-ref post 'summary) (get-paragraphs (cdr (post-sxml post)) 3))) `( ,@(map (lambda (post) `(article (@ (class "inline")) (header (h2 (@ (class "title")) (a (@ (href ,(post-uri post))) ,(post-ref post 'title))) ,(post-date-and-tags (post-date post) (get-tags post))) ,(post-summary post) (footer (@ (class "read-more")) (a (@ (href ,(post-uri post))) "...read more...")))) (posts/reverse-chronological posts)))))) (define about-page (static-page "About me" "about.html" `((h2 "hi.")))) (define %collections `(("Home" "index.html" ,posts/reverse-chronological))) (site #:title "Javier Sancho" #:domain "jsancho.org" #:default-metadata '((author . "Javier Sancho") (description . "Free Software Evangelist - Programmer") (email . "jsf@jsancho.org") (picture . "images/jsancho.jpg") (pages . (("projects" . "http://git.jsancho.org/") ("about me" . "about.html")))) #:readers (list sxml-reader html-reader) #:builders (list (blog #:theme flex-theme #:collections %collections) (atom-feed) (atom-feeds-by-tag) about-page (static-directory "images") (static-directory "fonts") (static-directory "css")))