24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
+
-
-
+
+
|
;; 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"
racket/file
sugar/list)
(provide main)
;; How many items per blog page
(define per-page 1)
(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{
<!DOCTYPE html>
<html lang="en">
◊html$-page-head[(format "The Local Yarn: Blog, p. ~a" pagenum)]
◊html$-page-body-open[]
<!DOCTYPE html>
<html lang="en">
◊html$-page-head[(format "The Local Yarn: Blog, p. ~a" pagenum)]
◊html$-page-body-open[]
<aside><i>Everything, in reverse time order. Well, almost everything.</i></aside>
<aside><i>Everything, in reverse time order. Well, almost everything.</i></aside>
<nav id="top-nav"><ul>◊|page-nav|</ul></nav>
<nav id="top-nav"><ul>◊|page-nav|</ul></nav>
◊posts-str
◊posts-str
<nav id="bottom-nav"><ul>◊|page-nav|</ul></nav>
<nav id="bottom-nav"><ul>◊|page-nav|</ul></nav>
◊html$-page-body-close[]
</html>})
◊html$-page-body-close[]
</html>})
;; Grabs all the articles+notes from the cache and writes out all the blog page files
(define (build-blog)
(spell-of-summoning!) ; Turn on the DB
(define articles+notes (slice-at (list/articles+notes 'listing_full_html #:series #f) per-page))
(define pagecount (length articles+notes))
(for ([pagenum (in-range 1 (+ 1 pagecount))]
[page (in-list articles+notes)])
(define filename (format "blog-pg~a.html" pagenum))
(println (format "Writing: ~a" filename))
(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)
;; Do it!
(build-blog))
|