X-Git-Url: https://git.jsancho.org/?p=blog.git;a=blobdiff_plain;f=haunt.scm;h=70247b9d16da3094386fb414d935cf1398e404bb;hp=068f123aa930d7535cf8b4931791c1dd0c95274d;hb=4847e2c26207bfcf6a0a453782550966ce7b1827;hpb=664380eb29e50a662df9374ed6d41910605b2054 diff --git a/haunt.scm b/haunt.scm index 068f123..70247b9 100644 --- a/haunt.scm +++ b/haunt.scm @@ -2,71 +2,85 @@ (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-1) + (srfi srfi-19)) (define (stylesheet name) `(link (@ (rel "stylesheet") - (href ,(string-append "/css/" name ".css"))))) + (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")) + ,@(map (lambda (tag) + `((a (@ (href ,(format #f "tags/~a.html" tag))) ,tag) " ")) + tags))))) + (else + div)))) (define flex-theme (theme #:name "Flex" #:layout (lambda (site title body) `((doctype "html") - (head - (meta (@ (charset "utf-8"))) - (title ,(string-append title " - " (site-title site))) - (link (@ (rel "stylesheet") (href "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic"))) - ,(stylesheet "style.min") - ,(stylesheet "monokai.min") - ,(stylesheet "font-awesome.min") - ,(stylesheet "custom")) - (body - ,(let ((metadata (site-default-metadata site))) - `(aside - (div - (a (@ (href "/")) (img (@ (src ,(assoc-ref metadata 'picture))))) - (h1 (a (@ (href "/")) ,(assoc-ref metadata 'author))) - (p ,(assoc-ref metadata 'description)) - (nav - (ul (@ (class "list")) - ,@(map (lambda (page) - `(li (a (@ (href ,(cdr page))) ,(car page)))) - (assoc-ref metadata 'pages)))) - (ul (@ (class "social")) - (li (a (@ (class "sc-linkedin") (target "_blank") (href "")) (i (@ (class "fa fa-linkedin"))))) - " " - (li (a (@ (class "sc-github") (target "_blank") (href "")) (i (@ (class "fa fa-github"))))) - " " - (li (a (@ (class "sc-twitter") (target "_blank") (href "")) (i (@ (class "fa fa-twitter"))))) - " " - (li (a (@ (class "sc-rss") (target "_blank") (href "/feed.xml")) (i (@ (class "fa fa-rss"))))))))) - (main ,body)))) + (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") + (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) - (define (get-tags post) - (or (assoc-ref (post-metadata post) 'tags) '())) - - `((article (@ (class "single")) + `((article (@ (class "inline")) (header - (h1 ,(post-ref post 'title)) - (p ,(date->string* (post-date post)))) - ,(post-sxml post) - (div (@ (class "tag-cloud")) - (p - ,@(map (lambda (tag) - `((a (@ (href "")) ,tag) " ")) - (get-tags post))))))) + (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 "") + (string-append (or prefix "") (site-post-slug site post) ".html")) (define (get-paragraphs sxml count) @@ -81,18 +95,23 @@ `( ,@(map (lambda (post) - `(article - (header - (h2 - (a (@ (href ,(post-uri post))) - ,(post-ref post 'title))) - (p ,(date->string* (post-date post)))) - (div ,(post-summary post) - (br) - (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo ")) - (hr))) + `(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))) @@ -102,13 +121,14 @@ '((author . "Javier Sancho") (description . "Free Software Evangelist - Programmer") (email . "jsf@jsancho.org") - (picture . "/images/jsancho2.jpg") - (pages . (("sobre mi" . "about.html") - ("proyectos" . "http://git.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")))