group gallery items by year
This commit is contained in:
parent
e9c19b2955
commit
6b995248a3
1 changed files with 21 additions and 6 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue