X-Git-Url: https://git.shemshak.org/~bandali/bndl.org/blobdiff_plain/7a66e6ec5d73f54ccf06f70be1bb9ba594bfae12..746aa75ea7cb5f19895a316414b21006727865e7:/bandali/theme.scm diff --git a/bandali/theme.scm b/bandali/theme.scm deleted file mode 100644 index e2b2375..0000000 --- a/bandali/theme.scm +++ /dev/null @@ -1,141 +0,0 @@ -;;; Copyright © 2019 Amin Bandali -;;; -;;; This program is free software; you can redistribute it and/or -;;; modify it under the terms of the GNU General Public License as -;;; published by the Free Software Foundation; either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; This program is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;; General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see -;;; . - -(define-module (bandali theme) - #:use-module (bandali prefs) ; my-* - #:use-module (bandali tags) ; tag-* - #:use-module (bandali utils) - #:use-module (haunt builder blog) ; theme - #:use-module (haunt post) ; post-* - #:use-module (haunt site) ; site-* - #:use-module (haunt utils) ; string->date* - #:use-module (srfi srfi-19) - #:export (base-layout - post-uri - post-list-table - bandali-theme)) - -(define* (base-layout site body #:key title copy license-page?) - `((doctype "html") - (html - (head - (meta (@ (charset "utf-8"))) - (meta (@ (name "viewport") - (content "width=device-width, initial-scale=1"))) - (title ,(if title (string-append title " — " (site-title site)) - "Amin Bandali’s Personal Site")) - (link (@ (rel "icon") - (href "/gnu.ico"))) - ,(stylesheet "reset") - ,(stylesheet "style")) - (body - (main ,body) - (footer - (p "Copyright © " - ,(if copy copy "2016–2019") - " Amin Bandali. See " - ,(if license-page? "the above" - (aa "license.html" "/license.html")) - " for license conditions. Please copy and share.")))))) - -(define* (post-uri site post #:optional prefix) - (string-append (or prefix "") "/" - (site-post-slug site post) ".html")) - -(define* (post-list-table site posts #:optional prefix) - `((table - (@ (class "post-list")) - (tbody - ,@(map - (lambda (post) - `(tr - (td ,(aa (post-ref post 'title) - (post-uri site post prefix))) - (td (small (@ (title - ,(date->string (post-date post) - my-secondary-date-format))) - ,(date->string (post-date post) - my-primary-date-format))))) - posts))))) - -(define (my-post-template post) - `((header - (h1 ,(post-ref post 'title)) - (address "By " ,(aa (post-ref post 'author) "/") - " <" ,(post-ref post 'email) ">") - (p (@ (class "date")) - (span (@ (title ,(date->string (post-date post) - my-secondary-date-format))) - ,(date->string (post-date post) - my-primary-date-format)) - ,(if (post-ref post 'updated) - `(" (updated on " - (span (@ (title - ,(date->string (post-ref post 'updated) - my-secondary-date-format))) - ,(date->string (post-ref post 'updated) - my-primary-date-format)) - ")") '())) - ,(if (post-ref post 'tags) - `(p (@ (class "tags")) - ,@(intersperse - (map (lambda (tag) - (aa tag (tag-uri my-tag-prefix tag) - "Notes tagged ‘" tag "’")) - (post-ref post 'tags)) - ", ")) - '())) - ,(post-sxml post) - (p (@ (class "muted inbox")) - "Got a question or comment? Write to me at my email address " - "at the top of this page!"))) - -(define* (my-collection-template site title posts prefix - #:optional all-posts tag) - `((h2 ,title - ,(if tag - (aa `(img (@ (class "feed-icon-h2") - (src "/icon-16px.png") - (alt "subscribe to atom feed"))) - (tag-uri my-tag-prefix tag ".xml")) - '())) - ,(post-list-table site posts prefix) - (h2 (@ (id "tags")) "Tags") - ,(tag-links (or all-posts posts)) - ,(if tag - '(a (@ (href "/notes.html")) - "← all notes") - '()))) - -(define bandali-theme - (theme #:name "bandali" - #:layout - (lambda (site title body) - (base-layout site body - #:title title)) - #:post-template my-post-template - #:collection-template my-collection-template)) - -(module-define! - (resolve-module '(haunt builder blog)) - 'render-post - (lambda (theme site post) - (let ((title (post-ref post 'title)) - (body ((theme-post-template theme) post)) - (copy (post-ref post 'copyright))) - (base-layout site body #:title title #:copy copy)))) - -(register-metadata-parser! 'updated string->date*)