Compare commits

..

3 commits

7 changed files with 27 additions and 25 deletions

View file

@ -7,7 +7,7 @@ module Info
allImages, sfwImages, nsfwImages, allImages, sfwImages, nsfwImages,
thumb, latestDateFor, latestYearFor, thumb, latestDateFor, latestYearFor,
sfwLinks, nsfwLinks, sfwUpdates, nsfwUpdates, sfwLinks, nsfwLinks, sfwUpdates, nsfwUpdates,
updatesFor, hasUpdatesFor, lastUpdateFor, updatesFor, bigUpdatesFor, hasUpdatesFor, lastUpdateFor,
tagsFor, descFor, imagesFor, linksFor, tagsFor, descFor, imagesFor, linksFor,
CompareKey (..), compareKeyFor, compareFor, sortFor, CompareKey (..), compareKeyFor, compareFor, sortFor,
@ -182,6 +182,9 @@ updatesWith p i = mapMaybe (traverse $ filterNE p) i.updates
updatesFor :: Bool -> Info -> [(Date, NonEmpty Update)] updatesFor :: Bool -> Info -> [(Date, NonEmpty Update)]
updatesFor nsfw = updatesWith \u -> nsfw || u.sfw updatesFor nsfw = updatesWith \u -> nsfw || u.sfw
bigUpdatesFor :: Bool -> Info -> [(Date, NonEmpty Update)]
bigUpdatesFor nsfw = updatesWith \u -> not u.ignoreSort && (nsfw || u.sfw)
sfwUpdates, nsfwUpdates :: Info -> [(Date, NonEmpty Update)] sfwUpdates, nsfwUpdates :: Info -> [(Date, NonEmpty Update)]
sfwUpdates = updatesWith (.sfw) sfwUpdates = updatesWith (.sfw)
nsfwUpdates = updatesWith (.nsfw) nsfwUpdates = updatesWith (.nsfw)

View file

@ -5,7 +5,7 @@ import Info
import BuilderQQ import BuilderQQ
import Data.List (sortBy, intersperse) import Data.List (sortBy, intersperse)
import Data.Maybe (catMaybes) import Data.Maybe (catMaybes, fromMaybe)
import Data.Function (on) 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
@ -41,21 +41,28 @@ make' root name ginfo@(GalleryInfo {title, desc, prefix}) output infos = [b|
where where
link = [b|$root/$prefix|] link = [b|$root/$prefix|]
nsfw = ginfo.nsfw nsfw = ginfo.nsfw
items = map (uncurry $ makeItem root prefix nsfw) $ items = concatMap (uncurry $ makeItems root prefix nsfw) $
sortBy (flip (compareFor nsfw `on` snd)) $ sortBy (flip (compareFor nsfw `on` snd)) $
filter (not . (.unlisted) . snd) infos filter (not . (.unlisted) . snd) infos
selflink = case output of selflink = case output of
Nothing -> "" Nothing -> ""
Just o -> [b|<atom:link href="$link/$o" rel="self" />|] Just o -> [b|<atom:link href="$link/$o" rel="self" />|]
makeItem :: Strict.Text -> FilePath -> Bool -> FilePath -> Info -> Builder makeItems :: Strict.Text -> FilePath -> Bool -> FilePath -> Info -> [Builder]
makeItem root prefix nsfw path info@(Info {title}) = [b| makeItems root prefix nsfw path info =
makeItem root prefix nsfw path info Nothing :
map (makeItem root prefix nsfw path info . Just . fst)
(bigUpdatesFor nsfw info)
makeItem :: Strict.Text -> FilePath -> Bool -> FilePath ->
Info -> Maybe Date -> Builder
makeItem root prefix nsfw path info@(Info {title}) date = [b|
<item> <item>
<title><![CDATA[$title$suffix]]></title> <title><![CDATA[$title$suffix]]></title>
<link>$link</link> <link>$link</link>
<guid>$link</guid> <guid>$link$guidSuffix</guid>
<dc:creator><![CDATA[$creator]]></dc:creator> <dc:creator><![CDATA[$creator]]></dc:creator>
<pubDate>$date</pubDate> <pubDate>$dateStr</pubDate>
$body $body
</item> </item>
|] |]
@ -70,8 +77,9 @@ makeItem root prefix nsfw path info@(Info {title}) = [b|
suffix = if null parts then "" suffix = if null parts then ""
else " (" <> mconcat (intersperse ", " parts) <> ")" else " (" <> mconcat (intersperse ", " parts) <> ")"
guidSuffix = maybe "" (("?" <>) . show) date
parts = catMaybes [o18, cnt, up] parts = catMaybes [o18, cnt, up]
up = do guard $ hasUpdatesFor nsfw info; Just "updated" up = "updated" <$ date
o18 = do guard $ nsfw && anyNsfw info; Just "🔞" o18 = do guard $ nsfw && anyNsfw info; Just "🔞"
cnt = do let len = maybe 0 length $ allImages <$> imagesFor nsfw info cnt = do let len = maybe 0 length $ allImages <$> imagesFor nsfw info
guard $ len /= 1; Just [b|$len images|] guard $ len /= 1; Just [b|$len images|]
@ -81,13 +89,13 @@ makeItem root prefix nsfw path info@(Info {title}) = [b|
creator = maybe "niss" (.name) info.artist creator = maybe "niss" (.name) info.artist
date = formatRSS $ latestDateFor nsfw info dateStr = formatRSS $ fromMaybe info.date date
artist = ifJust info.artist \case artist = ifJust info.artist \case
Artist name Nothing -> [b|<p>by $name|] Artist name Nothing -> [b|<p>by $name|]
Artist name (Just url) -> [b|<p>by <a href="$url">$name</a>|] Artist name (Just url) -> [b|<p>by <a href="$url">$name</a>|]
desc = makeDesc $ descFor nsfw info desc = makeDesc $ descFor nsfw info
preview = previewImage info preview = previewImage info
image = case preview of image = case preview of
Just (PFull img) -> figure (escAttr img.desc) $ pageFile img Just (PFull img) -> figure (escAttr img.desc) $ pageFile img
Just (PThumb th) -> figure "full image hidden" $ thumbFile th Just (PThumb th) -> figure "full image hidden" $ thumbFile th

View file

@ -33,7 +33,6 @@
--border-col: var(--text-col); --border-col: var(--text-col);
--border: 3px solid var(--border-col); --border: 3px solid var(--border-col);
--border-radius: 1.5em;
--background: hsla(0, 0%, 0%, 60%); --background: hsla(0, 0%, 0%, 60%);
--button-bg: hsla(0deg, 0%, 0%, 20%); --button-bg: hsla(0deg, 0%, 0%, 20%);
@ -41,7 +40,7 @@
--button-border: 1px solid hsla(0deg, 0%, 0%, 40%); --button-border: 1px solid hsla(0deg, 0%, 0%, 40%);
--button-border-selected: 1px solid hsla(0deg, 0%, 100%, 30%); --button-border-selected: 1px solid hsla(0deg, 0%, 100%, 30%);
--button-pad: 0.15em 0.8em; --button-pad: 0.15em 0.8em;
--button-radius: 1000px; --button-radius: 1000em;
font-family: Muller; font-family: Muller;
font-weight: 600; font-weight: 600;

View file

@ -67,7 +67,7 @@
.filterlist label { .filterlist label {
cursor: pointer; cursor: pointer;
padding: 0.15em 0.4em; padding: 0.15em 0.4em;
border-radius: 1000px; border-radius: var(--button-radius);
border: 1px solid transparent; border: 1px solid transparent;
} }
@ -149,7 +149,7 @@
} }
#filterstuff li { #filterstuff li {
border-radius: 1em; border-radius: var(--button-radius);
} }
} }

View file

@ -9,7 +9,6 @@
.page { .page {
width: 37.5em; width: 37.5em;
border-radius: var(--border-radius);
} }
#title::before, #title::after { #title::before, #title::after {

View file

@ -24,7 +24,6 @@ dialog {
background: var(--background); background: var(--background);
border: var(--border); border: var(--border);
border-radius: var(--border-radius);
box-shadow: 0 0 50px #fff6; box-shadow: 0 0 50px #fff6;
} }
@ -60,7 +59,7 @@ dialog {
button { button {
border: none; border: none;
border-radius: 0.75em; border-radius: var(--button-radius);
padding: 0.5em 1em; padding: 0.5em 1em;
font-family: Muller; font-family: Muller;

View file

@ -62,8 +62,8 @@ body {
transform: rotate(-15deg); transform: rotate(-15deg);
background: hsl(330deg, 40%, 16%); background: hsl(330deg, 40%, 16%);
padding: 0.25em 0.5em; padding: 0.35em 1em;
border-radius: 0.5em; border-radius: var(--button-radius);
} }
#cw-text b { font-weight: 900; } #cw-text b { font-weight: 900; }
#cw-text::before { #cw-text::before {
@ -108,12 +108,6 @@ body {
box-shadow: var(--text-shadow); box-shadow: var(--text-shadow);
} }
#info .light-bg {
background: hsl(0deg, 0%, 100%, 75%);
padding: 5px;
border-radius: 8px;
}
#info .floating { #info .floating {
float: right; float: right;
margin-left: 0.8em; margin-left: 0.8em;