cleanup a little

This commit is contained in:
rhiannon morris 2024-08-18 06:35:06 +02:00
parent fa0b826c26
commit 47d0d6a2cb

View file

@ -10,6 +10,7 @@ import Data.Function (on)
import qualified Data.Text as Strict import qualified Data.Text as Strict
import qualified Data.Text.Lazy as Lazy import qualified Data.Text.Lazy as Lazy
import System.FilePath (takeDirectory) import System.FilePath (takeDirectory)
import Control.Monad
make :: Strict.Text -- ^ website root e.g. @https://gallery.niss.website@ make :: Strict.Text -- ^ website root e.g. @https://gallery.niss.website@
@ -47,9 +48,9 @@ make' root name ginfo@(GalleryInfo {title, desc, prefix}) output infos = [b|@0
Just o -> [b|<link href="$link/$o" rel="self" />|] Just o -> [b|<link href="$link/$o" rel="self" />|]
makeItem :: Strict.Text -> FilePath -> Bool -> FilePath -> Info -> Builder makeItem :: Strict.Text -> FilePath -> Bool -> FilePath -> Info -> Builder
makeItem root prefix nsfw path i@(Info {title, artist}) = [b|@4 makeItem root prefix nsfw path info@(Info {title}) = [b|@4
<item> <item>
<title>$title$suf</title> <title>$title$suffix</title>
<link>$link</link> <link>$link</link>
<guid>$link</guid> <guid>$link</guid>
$body $body
@ -57,46 +58,39 @@ makeItem root prefix nsfw path i@(Info {title, artist}) = [b|@4
</item> </item>
|] |]
where where
suf = let parts = catMaybes [o18, cnt, up] in body = [b|@6
if null parts then "" <description> <![CDATA[
else " (" <> mconcat (intersperse ", " parts) <> ")" $8.image
up = if hasUpdatesFor nsfw i then Just "updated" else Nothing $8.artist
o18 = if nsfw && anyNsfw i then Just "🔞" else Nothing $8.desc
cnt = let len = maybe 0 length $ allImages <$> imagesFor nsfw i in ]]> </description>
if len == 1 then Nothing else Just [b|$len images|] |]
suffix = if null parts then ""
else " (" <> mconcat (intersperse ", " parts) <> ")"
parts = catMaybes [o18, cnt, up]
up = do guard $ hasUpdatesFor nsfw info; Just "updated"
o18 = do guard $ nsfw && anyNsfw info; Just "🔞"
cnt = do let len = maybe 0 length $ allImages <$> imagesFor nsfw info
guard $ len /= 1; Just [b|$len images|]
dir = takeDirectory path dir = takeDirectory path
link = [b|$root/$prefix/$dir|] link = [b|$root/$prefix/$dir|]
date = formatRSS $ latestDateFor nsfw i date = formatRSS $ latestDateFor nsfw info
artist' = ifJust artist \case artist = ifJust info.artist \case
Artist {name, url = Nothing} -> [b|<p>by $name|] Artist name Nothing -> [b|<p>by $name|]
Artist {name, url = Just url} -> [b|<p>by <a href="$url">$name</a>|] Artist name (Just url) -> [b|<p>by <a href="$url">$name</a>|]
desc = descFor nsfw i desc = makeDesc $ descFor nsfw info
desc' = makeDesc desc
body = [b|@6 image = case previewImage info of
<description> <![CDATA[ Just (PFull img) -> figure $ pageFile img
$8.image Just (PThumb th) -> figure $ thumbFile th
$8.artist' Nothing -> ""
$8.desc' figure p = [b|<figure> <a href="$link"><img src="$link/$p"></a> </figure>|]
]]> </description>
|]
image = case previewImage i of
Just (PFull img) -> go $ pageFile img
Just (PThumb th) -> go $ thumbFile th
Nothing -> ""
where go p = [b|@0
<figure>
<a href="$link"><img src="$link/$p"></a>
</figure>
|]
makeDesc :: Desc -> Builder makeDesc :: Desc -> Builder
makeDesc NoDesc = "" makeDesc NoDesc = ""
makeDesc (TextDesc txt) = [b|$txt|] makeDesc (TextDesc txt) = [b|$txt|]
makeDesc (LongDesc fs) = [b|<dl>$fields</dl>|] makeDesc (LongDesc fs) = [b|<dl>$fields</dl>|]
where where fields = map (\(DescField {name, text}) -> [b|<dt>$name <dd>$text|]) fs
fields = map makeField fs
makeField (DescField {name, text}) = [b|<dt>$name <dd>$text|]