packages feed

wikimusic-ssr-0.6.0.0: src/WikiMusic/SSR/View/Components/Meta.hs

{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module WikiMusic.SSR.View.Components.Meta
  ( mkSharedHead,
  )
where

import Data.Text qualified as T
import Optics
import Relude
import Text.Blaze.Html
import Text.Blaze.Html5 as H
import Text.Blaze.Html5.Attributes as A
import WikiMusic.SSR.Model.Api
import WikiMusic.SSR.Model.Env

mkSharedHead :: (MonadIO m) => Env -> UiMode -> Palette -> Text -> m Html
mkSharedHead env mode palette pageTitle = do
  let style' = fromString . T.unpack $ (env ^. #mainCss)
  let modeStyle =
        if (mode ^. #value) == "dark"
          then env ^. #darkCss
          else env ^. #lightCss
  let paletteStyle = case palette ^. #value of
        "green" -> env ^. #palettes % #green
        _ -> env ^. #palettes % #mauve

  pure $ H.head $ do
    H.meta ! charset "utf-8"
    H.meta ! lang "en"
    H.title . fromString . T.unpack $ pageTitle
    meta ! name "viewport" ! content "width=device-width, initial-scale=1"
    H.style $ fromString . T.unpack $ modeStyle
    H.style $ fromString . T.unpack $ paletteStyle
    H.style style'