From 6b995248a329dbd1255ddbf0c4941bdebbda03e2 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sat, 18 Jul 2020 11:43:35 +0200 Subject: [PATCH] group gallery items by year --- make-pages/GalleryPage.hs | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/make-pages/GalleryPage.hs b/make-pages/GalleryPage.hs index 7e08ca7..673c733 100644 --- a/make-pages/GalleryPage.hs +++ b/make-pages/GalleryPage.hs @@ -1,9 +1,8 @@ module GalleryPage (make) where import Control.Exception -import Data.Function (on) -import Data.List (sortBy) -import Data.Ord (comparing) +import Data.Function (on, (&)) +import Data.List (sortBy, groupBy) import qualified Data.Text.Lazy as Lazy import Data.Text.Lazy.Builder (Builder, toLazyText) import System.FilePath ((), takeDirectory) @@ -42,9 +41,25 @@ make' title nsfw infos = [b|@0 |] where - items = map (uncurry makeItem) infos - infos = sortBy (cmpInfo `on` snd) infos' - cmpInfo = flip (comparing #date) <> comparing #title + items = map (uncurry $ makeYearItems nsfw) infosByYear + infosByYear = + 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 +
  • + $^year + $4.items + |] + where items = map (uncurry $ makeItem nsfw) infos makeItem :: Bool -> FilePath -> Info -> Builder makeItem nsfw file info = [b|@4