diff --git a/Makefile b/Makefile
index 5d799cd..4d31084 100644
--- a/Makefile
+++ b/Makefile
@@ -5,30 +5,44 @@ INFONAME = info.yaml
# SMALL = thumbnails, MED = single pages (link to full size)
SMALL := 200
-MED := 1200
+MED := 1000
MAKEPAGES = $(TMPDIR)/make-pages
-YAMLS != find $(DATADIR) -iname "*.yaml"
+YAMLS != find $(DATADIR) -name $(INFONAME)
-all: make-pages $(BUILDDIR)/index.html
+SCRIPTS := $(wildcard script/*.js)
+STYLES := $(wildcard style/*.css style/*.png)
+FONTS := $(shell find fonts \
+ -iname '*.eot' -or -iname '*.svg' -or \
+ -iname '*.ttf' -or -iname '*.woff' -or \
+ -iname '*.woff2' -or -iname '*.css')
+STATIC := $(SCRIPTS) $(STYLES) $(FONTS)
+BSTATIC := $(patsubst %,$(BUILDDIR)/%,$(STATIC))
+
+all: make-pages $(BUILDDIR)/index.html $(BSTATIC)
+
+$(BUILDDIR)/%: %
+ echo "[copy] "$@
+ mkdir -p $(dir $@)
+ cp $< $@
$(BUILDDIR)/index.html: $(DATADIR)/galleries.yaml $(MAKEPAGES)
echo "[index]"
mkdir -p $(dir $@)
- $(MAKEPAGES) index $< -o $@
+ $(MAKEPAGES) $(MPFLAGS) index $< -o $@
-$(MAKEPAGES): make-pages
+$(MAKEPAGES): make-pages/*.hs make-pages/make-pages.cabal
echo "[make-pages]"
mkdir -p $(dir $@)
- cabal v2-build all -O0
+ cabal v2-build all -O0 -j
find dist-newstyle -name make-pages -executable -type f \
-exec cp {} $@ \;
$(TMPDIR)/galleries.d: $(DATADIR)/galleries.yaml $(MAKEPAGES)
- echo "[gallery-deps] "$@
+ echo "[deps] "$@
mkdir -p $(dir $@)
- $(MAKEPAGES) depend-gallery $< -o $@ \
+ $(MAKEPAGES) $(MPFLAGS) depend-gallery $< -o $@ \
-B $(BUILDDIR) -D $(DATADIR) -T $(TMPDIR) -I $(INFONAME)
-include $(TMPDIR)/galleries.d
diff --git a/make-pages/Depend.hs b/make-pages/Depend.hs
index 28cbe50..7b4be3a 100644
--- a/make-pages/Depend.hs
+++ b/make-pages/Depend.hs
@@ -64,7 +64,8 @@ dependGallery' (GalleryInfo {title, prefix, filters}) infos' build data_ tmp =
$@path: $@files'
echo "[gallery] "$$@
mkdir -p $$(dir $$@)
- $$(MAKEPAGES) gallery -t "$*title" -o "$$@" $$<
+ $$(MAKEPAGES) $$(MPFLAGS) gallery -t "$*title" -o "$$@" \
+ $$(filter $$(DATADIR)/%/$$(INFONAME),$$^)
$rules
@@ -79,29 +80,29 @@ makeRules :: FilePath -- ^ prefix
-> Builder
makeRules prefix filters build data_ tmp = [b|@0
$@buildPrefix/%/index.html: $@data_/%/info.yaml
- echo "[single] "$$@
+ echo "[single] "$$@
mkdir -p $$(dir $$@)
- $$(MAKEPAGES) single "$$<" -o "$$@" $flags
+ $$(MAKEPAGES) $$(MPFLAGS) single "$$<" -o "$$@" $flags
$@tmpPrefix/%.d: $@data_/%/info.yaml
- echo "[deps] "$$@
+ echo "[deps] "$$@
mkdir -p $$(dir $$@)
- $$(MAKEPAGES) depend-single $flags \
+ $$(MAKEPAGES) $$(MPFLAGS) depend-single $flags \
-o "$$@" -p "$@prefix" -B "$@build" -D "$@data_" $$<
$@buildPrefix/%: $@data_/%
- echo "[copy] "$$@
+ echo "[copy] "$$@
mkdir -p $$(dir $$@)
cp "$$<" "$$@"
$@buildPrefix/%_small.png: $@data_/%.png
- echo "[resize] "$$@
+ echo "[resize] "$$@
mkdir -p $$(dir $$@)
convert -resize '$$(SMALL)x$$(SMALL)^' \
-gravity center -crop 1:1+0 "$$<" "$$@"
$@buildPrefix/%_med.png: $@data_/%.png
- echo "[resize] "$$@
+ echo "[resize] "$$@
mkdir -p $$(dir $$@)
convert -resize '$$(MED)x$$(MED)>' "$$<" "$$@"
|]
diff --git a/make-pages/GalleryPage.hs b/make-pages/GalleryPage.hs
index 6adc043..062eefb 100644
--- a/make-pages/GalleryPage.hs
+++ b/make-pages/GalleryPage.hs
@@ -21,6 +21,7 @@ make' title infos = [b|@0
+
$*title
diff --git a/make-pages/IndexPage.hs b/make-pages/IndexPage.hs
index 3ef8c1e..d389822 100644
--- a/make-pages/IndexPage.hs
+++ b/make-pages/IndexPage.hs
@@ -14,6 +14,7 @@ make' ginfos = [b|@0
+
gallery list
@@ -31,9 +32,11 @@ make' ginfos = [b|@0
items = map makeItem ginfos
makeItem :: GalleryInfo -> Builder
-makeItem (GalleryInfo {title, prefix}) = [b|@4
-
-
- $*title
-
+makeItem (GalleryInfo {title, prefix, filters}) = [b|@4
+ $*title
|]
+ where
+ nsfw = if hasNsfw filters then " class=nsfw" else ""
+
+hasNsfw :: GalleryFilters -> Bool
+hasNsfw (GalleryFilters {nsfw}) = nsfw /= Just False
diff --git a/make-pages/Info.hs b/make-pages/Info.hs
index 8bd48da..96b3208 100644
--- a/make-pages/Info.hs
+++ b/make-pages/Info.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fdefer-typed-holes #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Info
(Info (..), Artist (..), Image (..), Link (..),
@@ -27,11 +28,11 @@ data Info =
date :: !Day,
title :: !(Maybe Text),
artist :: !(Maybe Artist), -- nothing = me, obv
- warning :: !(Maybe Text),
tags :: ![Text],
nsfwTags :: ![Text],
description :: !(Maybe Text),
images :: ![Image],
+ background :: !(Maybe Text),
thumb' :: !(Maybe FilePath),
links :: ![Link]
}
@@ -46,9 +47,10 @@ data Artist =
data Image =
Image {
- label :: !Text,
- path :: !FilePath,
- nsfw :: !Bool
+ label :: !Text,
+ path :: !FilePath,
+ nsfw :: !Bool,
+ warning :: !(Maybe Text)
}
deriving (Eq, Show)
@@ -80,11 +82,11 @@ instance FromYAML Info where
Info <$> m .: "date"
<*> m .:? "title"
<*> m .:? "artist"
- <*> m .:? "warning"
<*> m .:? "tags" .!= []
<*> m .:? "nsfw-tags" .!= []
<*> m .:? "description"
<*> m .: "images"
+ <*> m .:? "background"
<*> m .:? "thumb"
<*> m .:? "links" .!= []
@@ -95,10 +97,29 @@ instance FromYAML Artist where
Artist <$> m .: "name" <*> m .:? "url"
instance FromYAML Image where
- parseYAML = labelledOptNsfw Image "path" "path"
+ parseYAML y = do
+ Pair label rest <- parseYAML y
+ asStr label rest <|> asObj label rest
+ where
+ asStr label = YAML.withStr "path" \(Text.unpack -> path) ->
+ pure $ Image {label, path, nsfw = False, warning = Nothing}
+ asObj label = YAML.withMap "image info" \m -> do
+ path <- m .: "path"
+ nsfw <- m .:? "nsfw" .!= False
+ warning <- m .:? "warning"
+ pure $ Image {label, path, nsfw, warning}
instance FromYAML Link where
- parseYAML = labelledOptNsfw Link "url" "url"
+ parseYAML y = do
+ Pair title rest <- parseYAML y
+ asStr title rest <|> asObj title rest
+ where
+ asStr title = YAML.withStr "url" \url ->
+ pure $ Link {title, url, nsfw = False}
+ asObj title = YAML.withMap "link info" \m -> do
+ url <- m .: "url"
+ nsfw <- m .:? "nsfw" .!= False
+ pure $ Link {title, url, nsfw}
data GalleryInfo =
@@ -166,33 +187,6 @@ instance (FromYAML a, FromYAML b) => FromYAML (Pair a b) where
_ -> fail "expected exactly one pair"
-data OptNsfw a = NoNsfw !a | WithNsfw !a !Bool
-
-appOptNsfw :: (a -> Bool -> b) -> OptNsfw a -> b
-appOptNsfw f (NoNsfw x) = f x False
-appOptNsfw f (WithNsfw x n) = f x n
-
-labelledOptNsfw :: FromYAML a
- => (Text -> a -> Bool -> b)
- -> String -- ^ name in \"expected\" message
- -> Text -- ^ field name
- -> YAML.Node YAML.Pos -> YAML.Parser b
-labelledOptNsfw f name field y = do
- Pair l n' <- parseYAML y
- n <- parseOptNsfw name field n'
- pure $ appOptNsfw (f l) n
-
-parseOptNsfw :: FromYAML a
- => String -- ^ name in \"expected\" message
- -> Text -- ^ field name
- -> YAML.Node YAML.Pos -> YAML.Parser (OptNsfw a)
-parseOptNsfw name field y = yes y <|> no y where
- yes = YAML.withMap (name <> " & nsfw") \m ->
- WithNsfw <$> m .: field
- <*> m .:? "nsfw" .!= False
- no = fmap NoNsfw . parseYAML
-
-
instance FromYAML Day where
parseYAML = YAML.withStr "date" \str ->
case readMaybe $ Text.unpack str of
diff --git a/make-pages/SinglePage.hs b/make-pages/SinglePage.hs
index ccc80f7..a040dd2 100644
--- a/make-pages/SinglePage.hs
+++ b/make-pages/SinglePage.hs
@@ -30,29 +30,38 @@ make nsfw = toLazyText . make' nsfw
make' :: Bool -> Info -> Builder
make' nsfw (Info {date, title, artist, tags, nsfwTags,
- description, images, links}) = [b|@0
+ description, images, background, links}) = [b|@0
+
+
$titleTag
$titleHeader
$artistTag
- $formattedDate
+ $formattedDate
$buttonBar
+
+
-
-
-
+
- $descSection
+
+ $descSection
- $tagsList
+ $tagsList
- $linksList
+ $linksList
+