(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))) ((and (pair? (car sxml)) (eq? (caar sxml) 'a)) (getp (cdr sxml) count (cons (car sxml) res))) (else (getp (cdr sxml) count 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")))