summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolpeon <git@volpeon.ink>2022-06-11 18:44:07 +0200
committerVolpeon <git@volpeon.ink>2022-06-11 18:44:07 +0200
commit6c81b7e3e6119e91160581a2e8f393df8424abe6 (patch)
tree0b41b017091a5ccddf7fecd6dd28d8cb87f6634b
parentUpdate (diff)
downloadvolpeon.ink-6c81b7e3e6119e91160581a2e8f393df8424abe6.tar.gz
volpeon.ink-6c81b7e3e6119e91160581a2e8f393df8424abe6.tar.bz2
volpeon.ink-6c81b7e3e6119e91160581a2e8f393df8424abe6.zip
Fixed page ordering in level 3 lists
-rw-r--r--assets/css/components/_hnav.scss2
-rw-r--r--content/art/index.md1
-rw-r--r--scripts/metadata_filter.lua229
-rw-r--r--yarn.lock2
4 files changed, 124 insertions, 110 deletions
diff --git a/assets/css/components/_hnav.scss b/assets/css/components/_hnav.scss
index 5f34e8c..74dba9f 100644
--- a/assets/css/components/_hnav.scss
+++ b/assets/css/components/_hnav.scss
@@ -4,7 +4,7 @@
4@include iro.props-namespace('hnav') { 4@include iro.props-namespace('hnav') {
5 @include iro.props-store(( 5 @include iro.props-store((
6 --colors: ( 6 --colors: (
7 --border: fn.global-color(--obj-hi) 7 --border: fn.global-color(--obj)
8 ) 8 )
9 ), 'colors'); 9 ), 'colors');
10 10
diff --git a/content/art/index.md b/content/art/index.md
index eadac7a..0b5072b 100644
--- a/content/art/index.md
+++ b/content/art/index.md
@@ -2,6 +2,7 @@
2title: Art 2title: Art
3position: 2 3position: 2
4list_layout: small-gallery 4list_layout: small-gallery
5list_order: date_desc
5list_limit: 6 6list_limit: 6
6feed: true 7feed: true
7--- 8---
diff --git a/scripts/metadata_filter.lua b/scripts/metadata_filter.lua
index 4ac4a4d..fcceffa 100644
--- a/scripts/metadata_filter.lua
+++ b/scripts/metadata_filter.lua
@@ -1,5 +1,13 @@
1local path = require 'pandoc.path' 1local path = require 'pandoc.path'
2 2
3function pandoc.List:flatten()
4 local result = pandoc.List()
5
6 for i = 1, #self do result:extend(self[i]) end
7
8 return result
9end
10
3function pandoc.List:flatMap(fn) 11function pandoc.List:flatMap(fn)
4 local mapped = self:map(fn) 12 local mapped = self:map(fn)
5 local result = pandoc.List() 13 local result = pandoc.List()
@@ -19,6 +27,32 @@ function pandoc.List:take(n)
19 return result 27 return result
20end 28end
21 29
30function page_sort(order)
31 return function(p1, p2)
32 if p1.position then
33 if p2.position then
34 return tonumber(p1.position) < tonumber(p2.position)
35 else
36 return true
37 end
38 elseif p2.position then
39 return false
40 elseif order == "date_desc" then
41 if p1.date then
42 if p2.date then
43 return p1.date.yyyy_mm_dd > p2.date.yyyy_mm_dd
44 else
45 return true
46 end
47 else
48 return false
49 end
50 else
51 return p1.title:upper() < p2.title:upper()
52 end
53 end
54end
55
22function slug(str) 56function slug(str)
23 return str:lower():gsub("[^ a-z]", ""):gsub("[ ]+", "-") 57 return str:lower():gsub("[^ a-z]", ""):gsub("[ ]+", "-")
24end 58end
@@ -135,41 +169,8 @@ function process_pages(global, order, pages_by_id)
135 end 169 end
136 end 170 end
137 171
138 pages_all:sort(function(p1, p2) 172 pages_all:sort(page_sort(order))
139 if p1.position then 173 pages_date_desc:sort(page_sort("date_desc"))
140 if p2.position then
141 return tonumber(p1.position) < tonumber(p2.position)
142 else
143 return true
144 end
145 elseif p2.position then
146 return false
147 elseif order == "date_desc" then
148 if p1.date then
149 if p2.date then
150 return p1.date.yyyy_mm_dd > p2.date.yyyy_mm_dd
151 else
152 return true
153 end
154 else
155 return false
156 end
157 else
158 return p1.title:upper() < p2.title:upper()
159 end
160 end)
161
162 pages_date_desc:sort(function(p1, p2)
163 if p1.position then
164 if p2.position then
165 return tonumber(p1.position) < tonumber(p2.position)
166 else
167 return true
168 end
169 else
170 return p1.date.yyyy_mm_dd > p2.date.yyyy_mm_dd
171 end
172 end)
173 174
174 local pages_data = { all = pages_all, date_desc = pages_date_desc, by_id = pages_by_id } 175 local pages_data = { all = pages_all, date_desc = pages_date_desc, by_id = pages_by_id }
175 176
@@ -199,6 +200,7 @@ function generate_list(meta)
199 title = p.title, 200 title = p.title,
200 subtitle = p.subtitle, 201 subtitle = p.subtitle,
201 date = p.date, 202 date = p.date,
203 position = p.position,
202 url = p.url, 204 url = p.url,
203 slug = p.slug, 205 slug = p.slug,
204 thumbnail = p.thumbnail, 206 thumbnail = p.thumbnail,
@@ -208,85 +210,96 @@ function generate_list(meta)
208 } 210 }
209 end) 211 end)
210 elseif meta.depth == "2" then 212 elseif meta.depth == "2" then
211 return meta.pages.all:map(function(cat) 213 return meta.pages.all
212 local limit = (cat.list_limit and tonumber(pandoc.utils.stringify(cat.list_limit))) or 214 :map(function(cat)
213 9999 215 local limit = (cat.list_limit and tonumber(pandoc.utils.stringify(cat.list_limit))) or
214 local allItems = ((cat.pages and cat.pages.all) or pandoc.List()):map(function(p) 216 9999
217 local allItems = ((cat.pages and cat.pages.all) or pandoc.List()):map(function(p)
218 return {
219 title = p.title,
220 subtitle = p.subtitle,
221 date = p.date,
222 position = p.position,
223 url = p.url,
224 slug = p.slug,
225 thumbnail = p.thumbnail,
226 icon = p.icon or cat.icon,
227 post_icon = p.post_icon or cat.list_post_icon or meta.list_post_icon,
228 indicator = cat.list_read_indicators,
229 }
230 end)
231 local items = allItems:take(limit)
232 local omitted = #allItems - #items
233
215 return { 234 return {
216 title = p.title, 235 title = cat.title,
217 subtitle = p.subtitle, 236 description = (cat.description and pandoc.MetaBlocks(pandoc.Para(cat.description))) or
218 date = p.date, 237 (not cat.no_description and cat.content),
219 url = p.url, 238 url = cat.url,
220 slug = p.slug, 239 slug = cat.slug,
221 thumbnail = p.thumbnail, 240 layout = cat.list_layout,
222 icon = p.icon or cat.icon, 241 items = items,
223 post_icon = p.post_icon or cat.list_post_icon or meta.list_post_icon, 242 total = tostring(#allItems),
224 indicator = cat.list_read_indicators, 243 omitted = omitted ~= 0 and tostring(omitted),
225 } 244 }
226 end) 245 end)
227 local items = allItems:take(limit) 246 :filter(function(cat) return #cat.items ~= 0 end)
228 local omitted = #allItems - #items
229
230 return {
231 title = cat.title,
232 description = (cat.description and pandoc.MetaBlocks(pandoc.Para(cat.description))) or
233 (not cat.no_description and cat.content),
234 url = cat.url,
235 slug = cat.slug,
236 layout = cat.list_layout,
237 items = items,
238 total = tostring(#allItems),
239 omitted = omitted ~= 0 and tostring(omitted),
240 }
241 end):filter(function(cat) return #cat.items ~= 0 end)
242 elseif meta.depth == "3" then 247 elseif meta.depth == "3" then
243 return meta.pages.all:map(function(cat) 248 return meta.pages.all
244 local limit = (cat.list_limit and tonumber(pandoc.utils.stringify(cat.list_limit))) or 249 :map(function(cat)
245 9999 250 local limit = (cat.list_limit and tonumber(pandoc.utils.stringify(cat.list_limit))) or
246 local allItems = (cat.pages and cat.pages.all or pandoc.List()):flatMap(function(c) 251 9999
247 if c.pages then 252 local allItems = (cat.pages and cat.pages.all or pandoc.List())
248 return c.pages.all:map(function(p) 253 :flatMap(function(c)
249 return { 254 if c.pages then
250 title = p.title, 255 return c.pages.all:map(function(p)
251 subtitle = p.subtitle, 256 return {
252 category = c.title, 257 title = p.title,
253 url = p.url, 258 subtitle = p.subtitle,
254 slug = p.slug, 259 date = p.date,
255 thumbnail = p.thumbnail, 260 position = p.position,
256 icon = p.icon or c.icon, 261 category = c.title,
257 post_icon = p.post_icon or c.list_post_icon or cat.list_post_icon, 262 url = p.url,
258 indicator = c.list_read_indicators, 263 slug = p.slug,
259 } 264 thumbnail = p.thumbnail,
265 icon = p.icon or c.icon,
266 post_icon = p.post_icon or c.list_post_icon or cat.list_post_icon,
267 indicator = c.list_read_indicators,
268 }
269 end)
270 else
271 local l = pandoc.List()
272 l:insert({
273 title = c.title,
274 subtitle = c.subtitle,
275 date = c.date,
276 position = c.position,
277 url = c.url,
278 slug = c.slug,
279 icon = c.icon or cat.icon,
280 post_icon = c.post_icon or cat.list_post_icon,
281 indicator = cat.list_read_indicators,
282 })
283 return l
284 end
260 end) 285 end)
261 else 286 allItems:sort(page_sort(cat.list_order))
262 local l = pandoc.List() 287 local items = allItems:take(limit)
263 l:insert({ 288 local omitted = #allItems - #items
264 title = c.title,
265 subtitle = c.subtitle,
266 url = c.url,
267 slug = c.slug,
268 icon = c.icon or cat.icon,
269 post_icon = c.post_icon or cat.list_post_icon,
270 indicator = cat.list_read_indicators,
271 })
272 return l
273 end
274 end)
275 local items = allItems:take(limit)
276 local omitted = #allItems - #items
277 289
278 return { 290 return {
279 title = cat.title, 291 title = cat.title,
280 description = (cat.description and pandoc.MetaBlocks(pandoc.Para(cat.description))) or 292 description = (cat.description and pandoc.MetaBlocks(pandoc.Para(cat.description))) or
281 (not cat.no_description and cat.content), 293 (not cat.no_description and cat.content),
282 url = cat.url, 294 url = cat.url,
283 slug = cat.slug, 295 slug = cat.slug,
284 layout = cat.list_layout, 296 layout = cat.list_layout,
285 items = items, 297 items = items,
286 total = tostring(#allItems), 298 total = tostring(#allItems),
287 omitted = omitted ~= 0 and tostring(omitted), 299 omitted = omitted ~= 0 and tostring(omitted),
288 } 300 }
289 end):filter(function(cat) return #cat.items ~= 0 end) 301 end)
302 :filter(function(cat) return #cat.items ~= 0 end)
290 end 303 end
291end 304end
292 305
diff --git a/yarn.lock b/yarn.lock
index 457fe0c..715491b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1280,7 +1280,7 @@ internal-slot@^1.0.3:
1280 1280
1281"iro-design@git+https://git.vulpes.one/git/iro-design.git": 1281"iro-design@git+https://git.vulpes.one/git/iro-design.git":
1282 version "1.0.0" 1282 version "1.0.0"
1283 resolved "git+https://git.vulpes.one/git/iro-design.git#e1b8b497f6935934be25c4c417bbe868594fa7a5" 1283 resolved "git+https://git.vulpes.one/git/iro-design.git#2e5311284e338baeb6bb3dfedb7b3d77a36df682"
1284 dependencies: 1284 dependencies:
1285 "@oddbird/blend" "^0.2.3" 1285 "@oddbird/blend" "^0.2.3"
1286 include-media "^1.4.9" 1286 include-media "^1.4.9"