diff --git a/make-pages/BuilderQQ.hs b/make-pages/BuilderQQ.hs
index bde71c7..097094c 100644
--- a/make-pages/BuilderQQ.hs
+++ b/make-pages/BuilderQQ.hs
@@ -1,7 +1,7 @@
{-# LANGUAGE TemplateHaskell #-}
module BuilderQQ
(b,
- Builder, toStrictText, toLazyText, fromText, fromString, fromChar,
+ Builder, toLazyText, fromText, fromString, fromChar,
textMap, ifJust, escId, escAttr)
where
diff --git a/make-pages/Depend.hs b/make-pages/Depend.hs
index 269f757..df3db9c 100644
--- a/make-pages/Depend.hs
+++ b/make-pages/Depend.hs
@@ -25,7 +25,7 @@ dependSingle' :: FilePath -> Info -> FilePath -> FilePath -> Bool -> Builder
dependSingle' yamlDir info prefix build nsfw =
[b|$page: $deps $$(MAKEPAGES)|]
where
- images = #all if nsfw then #images info else #sfwImages info
+ images = if nsfw then #images info else #sfwImages info
paths = map #path images
dls = mapMaybe #download images
diff --git a/make-pages/Info.hs b/make-pages/Info.hs
index b942a56..9285788 100644
--- a/make-pages/Info.hs
+++ b/make-pages/Info.hs
@@ -2,8 +2,7 @@
module Info
(Info (..),
tagsFor, descFor, imagesFor, linksFor, updatesFor, compareFor, sortFor,
- Artist (..), Images' (..), Images, Image (..), Desc (..), DescField (..),
- Link (..), Update (..),
+ Artist (..), Image (..), Desc (..), DescField (..), Link (..), Update (..),
GalleryInfo (..), GalleryFilters (..), ArtistFilter (..), NsfwFilter (..),
IndexInfo (..),
readArtistFilter, matchArtist, readNsfwFilter, matchNsfw, matchFilters,
@@ -32,7 +31,6 @@ import qualified Data.Text as Text
import Data.YAML (FromYAML (..), (.:), (.:?), (.!=))
import qualified Data.YAML as YAML
import System.FilePath ((>), takeBaseName, takeExtension, splitExtension)
-import Data.Bifunctor (second)
data Info =
@@ -53,7 +51,7 @@ data Info =
desc :: !Desc,
nsfwDesc :: !Desc,
bg :: !(Maybe Text),
- images :: !Images,
+ images :: ![Image],
thumb' :: !(Maybe FilePath),
links :: ![Link],
extras :: ![FilePath]
@@ -86,14 +84,6 @@ data Image =
}
deriving (Eq, Show)
-data Images' a =
- Uncat [a] -- ^ uncategorised
- | Cat [(Text, [a])] -- ^ categorised
- deriving (Eq, Show, Functor, Foldable, Traversable)
-
-type Images = Images' Image
-
-
data Link =
Link {
title :: !Text,
@@ -115,21 +105,12 @@ instance HasField "sfw" Image Bool where getField = not . #nsfw
instance HasField "sfw" Link Bool where getField = not . #nsfw
instance HasField "sfw" Update Bool where getField = not . #nsfw
-instance HasField "all" (Images' a) [a] where
- getField (Uncat is) = is
- getField (Cat cats) = foldMap snd cats
-
-filterImages :: (a -> Bool) -> Images' a -> Images' a
-filterImages p (Uncat is) = Uncat $ filter p is
-filterImages p (Cat cats) =
- Cat $ filter (not . null . snd) $ map (second $ filter p) cats
-
-instance HasField "sfwImages" Info Images where
- getField = filterImages #sfw . #images
-instance HasField "nsfwImages" Info Images where
- getField = filterImages #nsfw . #images
-instance HasField "allNsfw" Info Bool where getField = null . #all . #sfwImages
-instance HasField "allSfw" Info Bool where getField = null . #all . #nsfwImages
+instance HasField "sfwImages" Info [Image] where
+ getField = filter #sfw . #images
+instance HasField "nsfwImages" Info [Image] where
+ getField = filter #nsfw . #images
+instance HasField "allNsfw" Info Bool where getField = null . #sfwImages
+instance HasField "allSfw" Info Bool where getField = null . #nsfwImages
instance HasField "anySfw" Info Bool where getField = not . #allNsfw
instance HasField "anyNsfw" Info Bool where getField = not . #allSfw
@@ -144,8 +125,7 @@ instance HasField "nsfwUpdates" Info [Update] where
getField = filter #nsfw . #updates
instance HasField "thumb" Info (Maybe FilePath) where
- getField (Info {thumb', images}) =
- thumb' <|> #path <$> find #sfw (#all images)
+ getField (Info {thumb', images}) = thumb' <|> #path <$> find #sfw images
instance HasField "mine" Info Bool where getField = isNothing . #artist
instance HasField "notMine" Info Bool where getField = isJust . #artist
@@ -201,7 +181,7 @@ descFor nsfw (Info {desc, nsfwDesc}) = if nsfw then desc <> nsfwDesc else desc
tagsFor :: Bool -> Info -> [Text]
tagsFor nsfw i = if nsfw then nub (#tags i <> #nsfwTags i) else #tags i
-imagesFor :: Bool -> Info -> Images
+imagesFor :: Bool -> Info -> [Image]
imagesFor nsfw = if nsfw then #images else #sfwImages
linksFor :: Bool -> Info -> [Link]
@@ -253,7 +233,7 @@ instance FromYAML Info where
<*> m .:? "desc" .!= NoDesc
<*> m .:? "nsfw-desc" .!= NoDesc
<*> m .:? "bg"
- <*> m .: "images"
+ <*> (m .: "images" >>= imageList)
<*> m .:? "thumb"
<*> m .:? "links" .!= []
<*> m .:? "extras" .!= []
@@ -281,7 +261,7 @@ instance FromYAML Image where
unlabelledImage :: YAML.Node YAML.Pos -> YAML.Parser Image
unlabelledImage = unlabelledImage' Nothing
-unlabelledImage' :: Maybe Text -> YAML.Node YAML.Pos -> YAML.Parser Image
+unlabelledImage' :: Maybe Text -> YAML.Node YAML.Pos -> YAML.Parser Image
unlabelledImage' label' y = asStr y <|> asObj y
where
asStr = YAML.withStr "path" \(Text.unpack -> path) ->
@@ -298,11 +278,6 @@ unlabelledImage' label' y = asStr y <|> asObj y
pathToLabel = Text.pack . gapToSpace . takeBaseName
gapToSpace = map \case '-' -> ' '; '_' -> ' '; c -> c
-instance FromYAML Images where
- parseYAML y = Uncat <$> imageList y
- <|> Cat <$> YAML.withSeq "list of categories" fromPairs y
- where fromPairs = traverse $ withPairM \label -> fmap (label,) . imageList
-
instance FromYAML Link where
parseYAML =
withPairM \title rest -> asStr title rest <|> asObj title rest
diff --git a/make-pages/SinglePage.hs b/make-pages/SinglePage.hs
index 5aee691..9ff5a6d 100644
--- a/make-pages/SinglePage.hs
+++ b/make-pages/SinglePage.hs
@@ -14,8 +14,6 @@ import qualified Data.Text.Lazy as Lazy
import System.FilePath (joinPath, splitPath, (>))
import qualified System.Process as Proc
import Text.Read (readMaybe)
-import qualified Data.HashSet as Set
-import Data.Traversable
-- | e.g. only nsfw images are present for a non-nsfw page
@@ -47,10 +45,10 @@ make' root prefix nsfw dataDir dir info@(Info {date, title, artist, bg}) = do
let formattedDate = formatLong date
- let buttonBar = makeButtonBar title $ addIds images
+ let buttonBar = makeButtonBar title images
let (image0@(Image {path = path0, download = download0'}),
- Size {width = width0, height = height0}) : otherImages
- = #all images
+ Size {width = width0, height = height0})
+ = head images
let download0 = fromMaybe path0 download0'
let path0' = pageFile path0
let tinyCls = if any (tiny . #second) images then [b| class=tiny|] else ""
@@ -62,7 +60,7 @@ make' root prefix nsfw dataDir dir info@(Info {date, title, artist, bg}) = do
let updatesList = makeUpdates updates
let makePrefetch (Image {path}) = [b||]
- let prefetches = map (makePrefetch . #first) otherImages
+ let prefetches = map (makePrefetch . #first) $ tail images
let makeWarning w = [b|@0
@@ -197,51 +195,35 @@ makeDesc (LongDesc fs) = [b|@0
|]
-addIds :: Images' (Image, a) -> Images' (Image, a, Text)
-addIds = snd . mapAccumL makeId Set.empty where
- makeId used (img, x) = (Set.insert newId used, (img, x, newId)) where
- newId = head $ filter (\i -> not $ i `Set.member` used) ids
- ids = [toStrictText [b|$label$i|] | i <- "" : map show [0::Int ..]]
- label = escId $ #label img
-
-makeButtonBar :: Strict.Text -> Images' (Image, Size, Text) -> Builder
+makeButtonBar :: Strict.Text -> [(Image, Size)] -> Builder
makeButtonBar title images =
case images of
- Uncat [] -> throw $ NoEligibleImages title
- Uncat [_] -> ""
- Cat [(_,[_])] -> ""
- Uncat imgs -> makeNav "uncat" $ makeAlts imgs
- Cat cats -> makeNav "cat" $ map (uncurry makeCat) cats
- where
- makeNav (cls :: Text) inner = [b|@0
- |]
- makeCat lbl imgs = [b|@0
- |]
- where alts = makeAlts imgs
- makeAlts imgs = [b|@0
+ [] -> throw $ NoEligibleImages title
+ [_] -> ""
+ _ -> [b|@0
+
+ |]
+ where alts = map (\(i, (im, sz)) -> altButton i im sz) $ zip [0..] images
-altButton :: Image -> Size -> Text -> Builder
-altButton img size i = [b|@0
+altButton :: Int -> Image -> Size -> Builder
+altButton i img size = [b|@0
-
-
+
|]
where
Image {label, path, nsfw, warning, download} = img
Size {width, height} = size
nsfwClass = if nsfw then [b| class=nsfw|] else ""
nsfwLabelClass = if nsfw then [b| class=nsfw-label|] else ""
+ checked = if i == 0 then [b| checked|] else ""
+ idLabel = escId label
path' = pageFile path
link = fromMaybe path download
warning' = ifJust warning \(escAttr -> w) -> [b| data-warning="$w"|]
@@ -315,7 +297,7 @@ imageSize dir img = do
Just (width, height) -> pure $ Size {width, height}
Nothing -> fail $ "couldn't understand identify output:\n" ++ output
-withSizes :: Traversable t => FilePath -> t Image -> IO (t (Image, Size))
+withSizes :: FilePath -> [Image] -> IO [(Image, Size)]
withSizes dir = traverse \img -> do
size <- imageSize dir $ #path img
pure (img, size)
diff --git a/make-pages/make-pages.cabal b/make-pages/make-pages.cabal
index d564260..9ff3431 100644
--- a/make-pages/make-pages.cabal
+++ b/make-pages/make-pages.cabal
@@ -32,7 +32,6 @@ executable make-pages
ConstraintKinds,
DataKinds,
DeriveAnyClass,
- DeriveTraversable,
DerivingStrategies,
DerivingVia,
DuplicateRecordFields,
@@ -47,7 +46,6 @@ executable make-pages
PatternSynonyms,
QuasiQuotes,
RankNTypes,
- ScopedTypeVariables,
StandaloneDeriving,
TupleSections,
TypeSynonymInstances,
diff --git a/style/shiny/single.css b/style/shiny/single.css
index f83d73b..2646a4d 100644
--- a/style/shiny/single.css
+++ b/style/shiny/single.css
@@ -92,7 +92,6 @@
}
}
-/*
.nsfw-label::after {
content: url(../18_plus_white.svg);
display: inline-block;
@@ -104,7 +103,6 @@
:checked ~ .nsfw-label::after {
content: url(../18_plus.svg);
}
-*/
#date { text-transform: lowercase; }
@@ -201,18 +199,3 @@ footer {
font-size: 150%;
}
}
-
-
-#alts {
- margin: 1.5em 0;
- text-align: center;
-}
-
-.cat :is(h3,ul) { margin: 0; }
-
-#alts h3 {
- font-weight: 600;
- display: inline;
- padding-right: 0.5em;
-}
-#alts ul { display: inline flex; }