group gallery items by year

This commit is contained in:
Rhiannon Morris 2020-07-18 11:43:35 +02:00
parent e9c19b2955
commit 6b995248a3

View file

@ -1,9 +1,8 @@
module GalleryPage (make) where module GalleryPage (make) where
import Control.Exception import Control.Exception
import Data.Function (on) import Data.Function (on, (&))
import Data.List (sortBy) import Data.List (sortBy, groupBy)
import Data.Ord (comparing)
import qualified Data.Text.Lazy as Lazy import qualified Data.Text.Lazy as Lazy
import Data.Text.Lazy.Builder (Builder, toLazyText) import Data.Text.Lazy.Builder (Builder, toLazyText)
import System.FilePath ((</>), takeDirectory) import System.FilePath ((</>), takeDirectory)
@ -42,9 +41,25 @@ make' title nsfw infos = [b|@0
</main> </main>
|] |]
where where
items = map (uncurry makeItem) infos items = map (uncurry $ makeYearItems nsfw) infosByYear
infos = sortBy (cmpInfo `on` snd) infos' infosByYear =
cmpInfo = flip (comparing #date) <> comparing #title infos & sortBy (cmpInfo `on` #second)
& map (\fi -> (fi, #year $ #second fi))
& groupBy ((==) `on` #second)
& map (\ys -> (#second (head ys), map #first ys))
cmpInfo (Info {date = d1, title = t1}) (Info {date = d2, title = t2}) =
compare d2 d1 <> compare t1 t2
makeYearItems :: Bool -- ^ nsfw
-> Integer -- ^ year
-> [(FilePath, Info)]
-> Builder
makeYearItems nsfw year infos = [b|@4
<li class="item year-marker">
<span class=year-text>$^year</span>
$4.items
|]
where items = map (uncurry $ makeItem nsfw) infos
makeItem :: Bool -> FilePath -> Info -> Builder makeItem :: Bool -> FilePath -> Info -> Builder
makeItem nsfw file info = [b|@4 makeItem nsfw file info = [b|@4