diff options
-rw-r--r-- | scripts/metadata.lua | 4 | ||||
-rw-r--r-- | scripts/page.lua | 33 | ||||
-rw-r--r-- | templates/layouts/exhibit.html | 2 | ||||
-rw-r--r-- | templates/layouts/page.html | 4 | ||||
-rw-r--r-- | templates/partials/related.html | 35 |
5 files changed, 64 insertions, 14 deletions
diff --git a/scripts/metadata.lua b/scripts/metadata.lua index d0a4f45..49a9c55 100644 --- a/scripts/metadata.lua +++ b/scripts/metadata.lua | |||
@@ -84,12 +84,10 @@ function process_pages(meta) | |||
84 | 84 | ||
85 | pages_all:sort(sort.page_sort(meta.list_order, meta.pages)) | 85 | pages_all:sort(sort.page_sort(meta.list_order, meta.pages)) |
86 | pages_date_desc:sort(sort.page_sort("date_desc", meta.pages)) | 86 | pages_date_desc:sort(sort.page_sort("date_desc", meta.pages)) |
87 | local pages_random = pages_all:clone():shuffle() | ||
88 | 87 | ||
89 | meta.pages = { | 88 | meta.pages = { |
90 | all = pages_all, | 89 | all = pages_all, |
91 | date_desc = pages_date_desc, | 90 | date_desc = pages_date_desc, |
92 | random = pages_random, | ||
93 | by_id = meta.pages | 91 | by_id = meta.pages |
94 | } | 92 | } |
95 | end | 93 | end |
@@ -167,8 +165,6 @@ function process(global, build, meta) | |||
167 | end | 165 | end |
168 | 166 | ||
169 | function Meta(meta) | 167 | function Meta(meta) |
170 | math.randomseed(os.time()) | ||
171 | |||
172 | local build = {} | 168 | local build = {} |
173 | 169 | ||
174 | for key, value in pairs(meta) do | 170 | for key, value in pairs(meta) do |
diff --git a/scripts/page.lua b/scripts/page.lua index f3802a2..dcbb36f 100644 --- a/scripts/page.lua +++ b/scripts/page.lua | |||
@@ -96,7 +96,7 @@ function generate_list(meta) | |||
96 | if meta.depth < 1 then return pandoc.List() end | 96 | if meta.depth < 1 then return pandoc.List() end |
97 | 97 | ||
98 | if meta.depth == 1 then | 98 | if meta.depth == 1 then |
99 | return meta.pages.all | 99 | return meta.pages.all:map(function (p) return d1_page_to_list_item(p) end) |
100 | end | 100 | end |
101 | 101 | ||
102 | if meta.depth == 2 then | 102 | if meta.depth == 2 then |
@@ -130,6 +130,22 @@ function generate_list(meta) | |||
130 | end | 130 | end |
131 | end | 131 | end |
132 | 132 | ||
133 | function generate_related(meta) | ||
134 | if not meta.parent then return nil end | ||
135 | |||
136 | meta = meta.parent | ||
137 | |||
138 | local items = meta.pages.random:take(2):map(function (p) return d1_page_to_list_item(p) end) | ||
139 | |||
140 | if #items == 0 then return nil end | ||
141 | |||
142 | return { | ||
143 | url = meta.url, | ||
144 | layout = meta.list_layout, | ||
145 | items = items | ||
146 | } | ||
147 | end | ||
148 | |||
133 | function deref_page(pages) | 149 | function deref_page(pages) |
134 | return function(ref) | 150 | return function(ref) |
135 | return pages[utils.stringify(ref)] | 151 | return pages[utils.stringify(ref)] |
@@ -139,7 +155,7 @@ end | |||
139 | function process_pages(meta) | 155 | function process_pages(meta) |
140 | meta.pages.all = meta.pages.all:filterMap(deref_page(meta.pages.by_id)) | 156 | meta.pages.all = meta.pages.all:filterMap(deref_page(meta.pages.by_id)) |
141 | meta.pages.date_desc = meta.pages.date_desc:filterMap(deref_page(meta.pages.by_id)) | 157 | meta.pages.date_desc = meta.pages.date_desc:filterMap(deref_page(meta.pages.by_id)) |
142 | meta.pages.random = meta.pages.random:filterMap(deref_page(meta.pages.by_id)) | 158 | meta.pages.random = meta.pages.all :clone():shuffle() |
143 | end | 159 | end |
144 | 160 | ||
145 | function resolve_urls(global, build, meta) | 161 | function resolve_urls(global, build, meta) |
@@ -177,12 +193,10 @@ function process(global, build, meta, dir) | |||
177 | process_base(meta) | 193 | process_base(meta) |
178 | resolve_urls(global, build, meta) | 194 | resolve_urls(global, build, meta) |
179 | 195 | ||
180 | if dir >= 0 then | 196 | for _, p in pairs(meta.pages.by_id) do |
181 | for _, p in pairs(meta.pages.by_id) do | 197 | p.parent = meta |
182 | p.parent = meta | 198 | process(global, build, p, 1) |
183 | process(global, build, p, 1) | 199 | p.parent = nil |
184 | p.parent = nil | ||
185 | end | ||
186 | end | 200 | end |
187 | 201 | ||
188 | process_pages(meta) | 202 | process_pages(meta) |
@@ -217,6 +231,8 @@ function prune(meta, up, down) | |||
217 | end | 231 | end |
218 | 232 | ||
219 | function Meta(meta) | 233 | function Meta(meta) |
234 | math.randomseed(os.time()) | ||
235 | |||
220 | local build = {} | 236 | local build = {} |
221 | 237 | ||
222 | for key, value in pairs(meta) do | 238 | for key, value in pairs(meta) do |
@@ -250,6 +266,7 @@ function Meta(meta) | |||
250 | process(global, build, meta, 0) | 266 | process(global, build, meta, 0) |
251 | 267 | ||
252 | meta.list = generate_list(meta) | 268 | meta.list = generate_list(meta) |
269 | meta.related = generate_related(meta) | ||
253 | 270 | ||
254 | if global.menus and global.menus.main then | 271 | if global.menus and global.menus.main then |
255 | global.menus.main = prep_menu(meta.namespace.full, global.menus.main) | 272 | global.menus.main = prep_menu(meta.namespace.full, global.menus.main) |
diff --git a/templates/layouts/exhibit.html b/templates/layouts/exhibit.html index fcc92a4..7a50635 100644 --- a/templates/layouts/exhibit.html +++ b/templates/layouts/exhibit.html | |||
@@ -53,6 +53,8 @@ | |||
53 | $body$ | 53 | $body$ |
54 | </div> | 54 | </div> |
55 | </div> | 55 | </div> |
56 | |||
57 | $partials/related()$ | ||
56 | </div> | 58 | </div> |
57 | </main> | 59 | </main> |
58 | 60 | ||
diff --git a/templates/layouts/page.html b/templates/layouts/page.html index f26c4bc..b1f7835 100644 --- a/templates/layouts/page.html +++ b/templates/layouts/page.html | |||
@@ -30,8 +30,6 @@ $body$ | |||
30 | 30 | ||
31 | $if(references)$ | 31 | $if(references)$ |
32 | <footer class="s-colored-links s-lists"> | 32 | <footer class="s-colored-links s-lists"> |
33 | <hr /> | ||
34 | |||
35 | <h1>References</h1> | 33 | <h1>References</h1> |
36 | <ul> | 34 | <ul> |
37 | $for(references)$ | 35 | $for(references)$ |
@@ -40,6 +38,8 @@ $body$ | |||
40 | </ul> | 38 | </ul> |
41 | </footer> | 39 | </footer> |
42 | $endif$ | 40 | $endif$ |
41 | |||
42 | $partials/related()$ | ||
43 | </article> | 43 | </article> |
44 | 44 | ||
45 | <div class="o-backdrop js-lightbox u-d-none t-dark"> | 45 | <div class="o-backdrop js-lightbox u-d-none t-dark"> |
diff --git a/templates/partials/related.html b/templates/partials/related.html new file mode 100644 index 0000000..b0d3f61 --- /dev/null +++ b/templates/partials/related.html | |||
@@ -0,0 +1,35 @@ | |||
1 | $if(related)$ | ||
2 | <footer> | ||
3 | <hr class="u-mt-700" /> | ||
4 | |||
5 | <div class="l-card-list"> | ||
6 | <header class="l-card-list__header"> | ||
7 | <h2 class="s-invisible-links u-mt-0"> | ||
8 | $if(related.url)$ | ||
9 | <a href="$related.url.rel$">Related</a> | ||
10 | $else$ | ||
11 | Related | ||
12 | $endif$ | ||
13 | </h2> | ||
14 | </header> | ||
15 | <div class="l-card-list__cards l-card-list__cards--$related.layout.id$"> | ||
16 | $if(related.layout.is_grid-2)$ | ||
17 | $related.items:partials/grid_card()$ | ||
18 | $elseif(related.layout.is_grid-3)$ | ||
19 | $related.items:partials/grid_card()$ | ||
20 | $elseif(related.layout.is_gallery-2)$ | ||
21 | $related.items:partials/gallery_card()$ | ||
22 | $elseif(related.layout.is_gallery-3)$ | ||
23 | $related.items:partials/gallery_card()$ | ||
24 | $else$ | ||
25 | <div class="u-d-contents u-d-none@sm-lo"> | ||
26 | $related.items:partials/list_card()$ | ||
27 | </div> | ||
28 | <div class="u-d-contents u-d-none@sm-hi"> | ||
29 | $related.items:partials/grid_card()$ | ||
30 | </div> | ||
31 | $endif$ | ||
32 | </div> | ||
33 | </div> | ||
34 | </footer> | ||
35 | $endif$ | ||