1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#lang pollen
◊; SPDX-License-Identifier: BlueOak-1.0.0
◊; This file is licensed under the Blue Oak Model License 1.0.0.
◊(require pollen/template db/base racket/list racket/match)
◊(define (fetch-series)
(define q "SELECT noun_plural, page, title FROM series ORDER BY noun_plural DESC")
(query-rows cache-conn q))
◊(define (series-item->txpr s)
(match-define (list n pagenode title) s)
`(li (a [[href ,pagenode]] (i ,title))))
◊(define (series-grouped-list)
;; Produces '((("noun1" "p.html" "Title") ("noun1" "q.html" "Title")) (("noun2" ...) ...))
(define init-group
(group-by first (map vector->list (fetch-series)) string-ci=?))
(define series-list-items
(for/list ([group (in-list init-group)])
`(div (h2 ,(first (first group))) (ul ,@(map series-item->txpr group)))))
`(section [[class "series-list"] [style "margin-top: 1.3rem"]] ,@series-list-items))
<!DOCTYPE html>
<html lang="en">
◊html$-page-head["The Local Yarn" #f]
<style>
header#front-page {
text-align: center;
}
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#lang pollen
◊; SPDX-License-Identifier: BlueOak-1.0.0
◊; This file is licensed under the Blue Oak Model License 1.0.0.
◊(require pollen/template racket/file)
<!DOCTYPE html>
<html lang="en">
◊html$-page-head["The Local Yarn" #f]
<style>
header#front-page {
text-align: center;
}
|
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
|
@keyframes slideFromRight {
0% { margin-right: -200%; }
100% { margin-right: 0%; }
}
#front-page-logo {
shape-outside: url(web-extra/mark.svg);
filter: brightness(0) saturate(100%) invert(20%) sepia(16%) saturate(903%) hue-rotate(153deg) brightness(93%) contrast(90%);
shape-margin: 1rem;
float: left;
margin-left: -20vw;
margin-right: 1rem;
z-index: -100;
}
main {
background: transparent;
font-size: 1.3em;
line-height: 1.2em;
}
</style>
</head>
<body style="overflow-x:hidden; hyphens: auto">
<header id="front-page"><div>
|
|
>
<
|
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
|
@keyframes slideFromRight {
0% { margin-right: -200%; }
100% { margin-right: 0%; }
}
#front-page-logo {
shape-outside: url(web-extra/mark.svg);
/* filter: brightness(0) saturate(100%) invert(20%) sepia(16%) saturate(903%) hue-rotate(153deg)
* brightness(93%) contrast(90%); */
shape-margin: 1rem;
float: left;
margin-left: -20vw;
margin-right: 1rem;
z-index: -100;
}
main {
background: transparent;
line-height: 1.2em;
}
</style>
</head>
<body style="overflow-x:hidden; hyphens: auto">
<header id="front-page"><div>
|
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
(almost) is ◊link[1]{arranged in time order, newest first}. There are also a few arranged into named
collections:
◊url[1]{/blog-pg1.html}
})
◊; stop for now: (crystalize-index-entries! '|index.html| front-page-body)
<main>
◊(->html front-page-body #:splice? #t)
◊(->html (series-grouped-list))
</main>
</body>
</html>
|
>
|
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
(almost) is ◊link[1]{arranged in time order, newest first}. There are also a few arranged into named
collections:
◊url[1]{/blog-pg1.html}
})
◊; stop for now: (crystalize-index-entries! '|index.html| front-page-body)
◊(display-to-file (html$-page-footer) "scribbled/site-footer.html" #:exists 'replace)
<main>
◊(->html front-page-body #:splice? #t)
◊(html$-series-list)
</main>
</body>
</html>
|