module Site.Filter where import Data.List qualified as List import Data.Text qualified as Text import PyF import Relude import Text.Blaze.Html5 ((!)) import Text.Blaze.Html5 qualified as H import Text.Blaze.Html5.Attributes qualified as A import Prelude () import Site.Lang import Site.Model import Site.Page import Utils.Html feedTitle :: Filter -> Text feedTitle (Filter language tag) = Text.unwords $ (if isNothing tag then ["All Posts"] else ["Posts"]) <> maybeToList ((\(Tag t) -> [fmt|tagged "{t}"|]) <$> tag) <> maybeToList (("in " <>) . langText <$> language) renderFilter :: Model -> Filter -> Content renderFilter model filt = Content (Just (feedTitle filt)) $ do H.a ! classes [ "fg-white" , "hover:bg-orange-100" , "block" , "p-1" ] -- https://codepen.io/sosuke/pen/Pjoqqp for #F76300 ! A.style "filter: invert(31%) sepia(72%) saturate(2199%) hue-rotate(17deg) brightness(111%) contrast(108%);" ! hrefRoute model (RouteFilterAtom filt) $ openIconic "rss-alt" ! classes ["h-4", "w-4"] H.div ! classes ["text-left"] $ mconcat $ List.intersperse " • " $ langLink <$> [minBound ..] H.div ! classes ["space-y-8", "pb-8"] $ renderPagesListing model (filterPosts model filt) where langLink l = H.a ! classes (["hover:underline"] <> prop) ! hrefRoute model (RouteFilter filt{filterLang = if Just l == filterLang filt then Nothing else Just l}) $ H.text (textOfLang l) where prop | Just x <- filterLang filt, x /= l = ["line-through"] | otherwise = []