]> git.jsancho.org Git - blog.git/blobdiff - haunt.scm
About page (preliminar version)
[blog.git] / haunt.scm
index 3346228c0c3a74e402ffcfccb6557b6df0b810ef..30885d25cbb445476fe89b863a0ff9dda2b011da 100644 (file)
--- 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 "Posted on " ,(date->string (post-date post) "~B ~d, ~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
                         (h2
                          (a (@ (href ,(post-uri post)))
                             ,(post-ref post 'title)))
-                        (p ,(date->string* (post-date post))))
+                        (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y")))
                        (div ,(post-summary post)
                             (br)
-                            (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo "))
+                            (a (@ (class "btn") (href ,(post-uri post))) " Continue reading "))
                        (hr)))
                    (posts/reverse-chronological posts))))))
 
+(define about-page
+  (static-page
+   "About me"
+   "about.html"
+   `((h2 "hi."))))
+
 (define %collections
   `(("Home" "index.html" ,posts/reverse-chronological)))
 
       '((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 . (("about" . "about.html")
+                  ("projects" . "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")))