X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=haunt.scm;h=d69f86cb969162a5359a4bfdaf05537ca4ad1faf;hb=dabb43901b6ab4f62df27e6890806b6d638f24f5;hp=3346228c0c3a74e402ffcfccb6557b6df0b810ef;hpb=c1c59536eb431a37e96685f67d9fd622dc7a454c;p=blog.git diff --git a/haunt.scm b/haunt.scm index 3346228..d69f86c 100644 --- a/haunt.scm +++ b/haunt.scm @@ -2,71 +2,94 @@ (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 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 "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic"))) + ,(stylesheet "style.min") + ,(stylesheet "monokai.min") + ,(stylesheet "font-awesome.min") + ,(stylesheet "custom") + (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0")))) + (body + ,(let ((metadata (site-default-metadata site))) + `(aside + (div + (a (@ (href "index.html")) (img (@ (src ,(assoc-ref metadata 'picture))))) + (h1 (a (@ (href "index.html")) ,(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))))) + #:post-template (lambda (post) + (define (get-tags post) + (or (assoc-ref (post-metadata post) 'tags) '())) + `((article (@ (class "single")) (header (h1 ,(post-ref post 'title)) - (p ,(date->string* (post-date post)))) + (p "Publicado el " ,(date->string (post-date post) "~d/~m/~Y"))) ,(post-sxml post) (div (@ (class "tag-cloud")) - (p (a (@ (href "")) "prueba")))))) + (p + ,@(map (lambda (tag) + `((a (@ (href "")) ,tag) " ")) + (get-tags 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) + (let ((pars (filter + (lambda (e) (and (pair? e) (eq? (car e) 'p))) + sxml))) + (list-head pars (min count (length pars))))) + (define (post-summary post) (or (post-ref post 'summary) - (let get-first-par ((sxml (cdr (post-sxml post)))) - (cond ((null? sxml) "") - ((and (pair? (car sxml)) - (eq? (caar sxml) 'p)) (car sxml)) - (else (get-first-par (cdr sxml))))))) + (get-paragraphs (cdr (post-sxml post)) 3))) + `( ,@(map (lambda (post) `(article @@ -74,29 +97,43 @@ (h2 (a (@ (href ,(post-uri post))) ,(post-ref post 'title))) - (p ,(date->string* (post-date post)))) + (p "Publicado el " ,(date->string (post-date post) "~d/~m/~Y"))) (div ,(post-summary post) (br) (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo ")) (hr))) (posts/reverse-chronological posts)))))) +(define about-page + (static-page + "Sobre mi" + "about.html" + `((div + (article + (header (h2 "Sobre mi")) + (p "Conocí GNU/Linux y el software libre durante mis estudios universitarios en la " (a (@ (href "http://www.uji.es/")) "Universitat Jaume I") " y desde entonces mi compromiso con esas ideas ha ido en aumento.") + (p "Fue en 2003 cuando empecé como activista, participando en eventos relacionados con el software libre, manifestaciones en contra de las patentes de software, charlas y jornadas informativas en parties, institutos, etc.") + (p "Disfruto programando y lo hago con el lenguaje que más se ajuste a mis necesidades (Python, PHP, Golang, Erlang, ...). Durante muchos años mi lenguaje favorito fue C, aunque con el tiempo ese lugar privilegiado han pasado a ocuparlo Lisp y Scheme a partes iguales. Soy un enamorado del paradigma funcional.") + (p "Estoy casado con una mujer maravillosa y tengo un hijo que no deja de sorprenderme cada día. Son mi mayor alegría.")))))) + (define %collections `(("Home" "index.html" ,posts/reverse-chronological))) (site #:title "Javier Sancho" #:domain "jsancho.org" + #:build-directory "site-spanish" #:default-metadata '((author . "Javier Sancho") - (description . "Free Software Evangelist - Programmer") + (description . "Evangelizador del software libre - Programador") (email . "jsf@jsancho.org") - (picture . "/images/jsancho2.jpg") + (picture . "images/jsancho.jpg") (pages . (("sobre mi" . "about.html") ("proyectos" . "http://git.jsancho.org/")))) #: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")))