#lang pollen/mode racket/base ; SPDX-License-Identifier: BlueOak-1.0.0 ; This file is licensed under the Blue Oak Model License 1.0.0. ;; Builds the paginated “blog” HTML files (blog-pg1.html ...) from the SQLite cache ;; The files will be written out every time this module is evaluated! (see end) (require "crystalize.rkt" "snippets-html.rkt" "dust.rkt" racket/file sugar/list) (provide main) ;; How many items per blog page (define per-page 5) ;; Returns a string containing the entire HTML contents of a given blog page (define (blog-page posts-str pagenum total-pages) (define page-nav (html$-paginate-navlinks pagenum total-pages "blog")) ◊string-append{ ◊html$-page-head[(format "The Local Yarn: Blog, p. ~a" pagenum)] ◊html$-page-body-open[] ◊posts-str ◊html$-page-body-close[] }) ;; Grabs all the articles+notes from the cache and writes out all the blog page files (define (build-blog) (listing-context 'blog) ; honor conceal directives for the blog (define arts-n-notes (slice-at (listing-htmls (articles+notes 'full #:series #f)) per-page)) (define pagecount (length arts-n-notes)) (for ([pagenum (in-range 1 (+ 1 pagecount))] [page (in-list arts-n-notes)]) (define filename (format "blog-pg~a.html" pagenum)) (displayln (format "Writing: ~a" filename)) (display-to-file (blog-page (apply string-append page) pagenum pagecount) filename #:mode 'text #:exists 'replace))) (define (main) ;; Do it! (build-blog))