{-# LANGUAGE OverloadedStrings #-}
module Contexts.Blog (
title
, font
, description
, beforeContentBodyAdditionalComponent
, headerAdditionalComponent
, footerAdditionalComponent
, tagCloud
, gSuite
, disqus
, katexJsCtx
, postCtx
, listCtx
) where
import Contexts.Field (descriptionField, imageField)
import Control.Monad.Extra (ifM)
import Control.Monad.Reader (asks, lift)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import Hakyll
import Lucid.Base (Html, ToHtml (..), renderText, toHtml)
import Lucid.Html5
import Config.Blog (BlogConfig (..))
import Config.Site (GSuite (..), gSuiteConf)
import Contexts.Core
import Contexts.Field (tagsField')
import Rules.Blog.Type
import Utils (mconcatM, sanitizeDisqusName)
{-# INLINE toLink #-}
toLink :: String -> String -> Html ()
toLink :: String -> String -> HtmlT Identity ()
toLink String
text String
path = [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
a_ [Text -> Attribute
href_ (String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String -> String
toUrl String
path)] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ String -> HtmlT Identity ()
forall a (m :: * -> *). (ToHtml a, Monad m) => a -> HtmlT m ()
forall (m :: * -> *). Monad m => String -> HtmlT m ()
toHtml String
text
title :: Monad m => BlogConfReader n m (Context String)
title :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
title = String -> String -> Context String
forall a. String -> String -> Context a
constField String
"blog-title" (String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks BlogConfig n -> String
forall (m :: * -> *). BlogConfig m -> String
blogName
font :: Monad m => BlogConfReader n m (Context String)
font :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
font = String -> String -> Context String
forall a. String -> String -> Context a
constField String
"blog-font-html" (String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (HtmlT Identity () -> String
forall a. Show a => a -> String
show (HtmlT Identity () -> String)
-> (BlogConfig n -> HtmlT Identity ()) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> HtmlT Identity ()
forall (m :: * -> *). BlogConfig m -> HtmlT Identity ()
blogFont)
description :: Monad m => BlogConfReader n m (Context String)
description :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
description = String -> String -> Context String
forall a. String -> String -> Context a
constField String
"blog-description" (String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks BlogConfig n -> String
forall (m :: * -> *). BlogConfig m -> String
blogDescription
beforeContentBodyAdditionalComponent :: Monad m => BlogConfReader n m (Context String)
beforeContentBodyAdditionalComponent :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
beforeContentBodyAdditionalComponent = String -> String -> Context String
forall a. String -> String -> Context a
constField String
"before-content-body-additional-component"
(String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (HtmlT Identity () -> String
forall a. Show a => a -> String
show (HtmlT Identity () -> String)
-> (BlogConfig n -> HtmlT Identity ()) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> HtmlT Identity ()
forall (m :: * -> *). BlogConfig m -> HtmlT Identity ()
blogBeforeContentBodyAdditional)
headerAdditionalComponent :: Monad m => BlogConfReader n m (Context String)
= String -> String -> Context String
forall a. String -> String -> Context a
constField String
"header-additional-component"
(String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (HtmlT Identity () -> String
forall a. Show a => a -> String
show (HtmlT Identity () -> String)
-> (BlogConfig n -> HtmlT Identity ()) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> HtmlT Identity ()
forall (m :: * -> *). BlogConfig m -> HtmlT Identity ()
blogHeaderAdditional)
footerAdditionalComponent :: Monad m => BlogConfReader n m (Context String)
= String -> String -> Context String
forall a. String -> String -> Context a
constField String
"footer-additional-component"
(String -> Context String)
-> ReaderT (BlogConfig n) m String
-> ReaderT (BlogConfig n) m (Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> String) -> ReaderT (BlogConfig n) m String
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (HtmlT Identity () -> String
forall a. Show a => a -> String
show (HtmlT Identity () -> String)
-> (BlogConfig n -> HtmlT Identity ()) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> HtmlT Identity ()
forall (m :: * -> *). BlogConfig m -> HtmlT Identity ()
blogFooterAdditional)
tagCloud :: Monad m
=> BlogConfReader m m (Context a)
tagCloud :: forall (m :: * -> *) a. Monad m => BlogConfReader m m (Context a)
tagCloud = do
Tags
tags <- (BlogConfig m -> m Tags) -> ReaderT (BlogConfig m) m (m Tags)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks BlogConfig m -> m Tags
forall (m :: * -> *). BlogConfig m -> m Tags
blogTagBuilder ReaderT (BlogConfig m) m (m Tags)
-> (m Tags -> ReaderT (BlogConfig m) m Tags)
-> ReaderT (BlogConfig m) m Tags
forall a b.
ReaderT (BlogConfig m) m a
-> (a -> ReaderT (BlogConfig m) m b) -> ReaderT (BlogConfig m) m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= m Tags -> ReaderT (BlogConfig m) m Tags
forall (m :: * -> *) a.
Monad m =>
m a -> ReaderT (BlogConfig m) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift
Context a -> BlogConfReader m m (Context a)
forall a. a -> ReaderT (BlogConfig m) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context a -> BlogConfReader m m (Context a))
-> Context a -> BlogConfReader m m (Context a)
forall a b. (a -> b) -> a -> b
$ String -> (Item a -> Compiler String) -> Context a
forall a. String -> (Item a -> Compiler String) -> Context a
field String
"tag-cloud" ((Item a -> Compiler String) -> Context a)
-> (Item a -> Compiler String) -> Context a
forall a b. (a -> b) -> a -> b
$ Compiler String -> Item a -> Compiler String
forall a b. a -> b -> a
const (Compiler String -> Item a -> Compiler String)
-> Compiler String -> Item a -> Compiler String
forall a b. (a -> b) -> a -> b
$
Text -> String
TL.unpack (Text -> String) -> (String -> Text) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HtmlT Identity () -> Text
forall a. Html a -> Text
renderText (HtmlT Identity () -> Text)
-> (String -> HtmlT Identity ()) -> String -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
div_ [Text -> Attribute
class_ Text
"tags"] (HtmlT Identity () -> HtmlT Identity ())
-> (String -> HtmlT Identity ()) -> String -> HtmlT Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> HtmlT Identity ()
forall a (m :: * -> *). (ToHtml a, Monad m) => a -> HtmlT m ()
forall (m :: * -> *). Monad m => String -> HtmlT m ()
toHtmlRaw
(String -> String) -> Compiler String -> Compiler String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> String -> Int -> Int -> Int -> String)
-> ([String] -> String) -> Tags -> Compiler String
renderTags String -> String -> Int -> Int -> Int -> String
forall {b} {b} {b}. String -> String -> b -> b -> b -> String
toLink' [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat Tags
tags
where
toLink' :: String -> String -> b -> b -> b -> String
toLink' String
tag String
path = (b -> b -> String) -> b -> b -> b -> String
forall a b. a -> b -> a
const ((b -> b -> String) -> b -> b -> b -> String)
-> (b -> b -> String) -> b -> b -> b -> String
forall a b. (a -> b) -> a -> b
$ (b -> String) -> b -> b -> String
forall a b. a -> b -> a
const ((b -> String) -> b -> b -> String)
-> (b -> String) -> b -> b -> String
forall a b. (a -> b) -> a -> b
$ String -> b -> String
forall a b. a -> b -> a
const (String -> b -> String) -> String -> b -> String
forall a b. (a -> b) -> a -> b
$
Text -> String
TL.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ HtmlT Identity () -> Text
forall a. Html a -> Text
renderText (HtmlT Identity () -> Text) -> HtmlT Identity () -> Text
forall a b. (a -> b) -> a -> b
$
[Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"tag is-dark"] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ String -> String -> HtmlT Identity ()
toLink String
tag String
path
gSuite :: Monad m
=> BlogConfReader n m (Context String)
gSuite :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
gSuite = Context String -> Context String -> Context String
forall a. Semigroup a => a -> a -> a
(<>)
(Context String -> Context String -> Context String)
-> ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String -> Context String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BlogConfig n -> Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (String -> String -> Context String
forall a. String -> String -> Context a
constField String
"google-cx" (String -> Context String)
-> (BlogConfig n -> String) -> BlogConfig n -> Context String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((GSuite -> String
gCxPrefix GSuite
gSuiteConf String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
":") String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> String)
-> (BlogConfig n -> String) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> String
forall (m :: * -> *). BlogConfig m -> String
blogGoogleCx)
ReaderT (BlogConfig n) m (Context String -> Context String)
-> ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall a b.
ReaderT (BlogConfig n) m (a -> b)
-> ReaderT (BlogConfig n) m a -> ReaderT (BlogConfig n) m b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> String -> Context String
forall a. String -> String -> Context a
constField String
"google-site-verification" (GSuite -> String
gSiteVerifyKey GSuite
gSuiteConf))
disqus :: Monad m
=> BlogConfReader n m (Context String)
= (BlogConfig n -> Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((BlogConfig n -> Context String)
-> ReaderT (BlogConfig n) m (Context String))
-> (BlogConfig n -> Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> String -> Context String
forall a. String -> String -> Context a
constField String
"disqus" (String -> Context String)
-> (BlogConfig n -> String) -> BlogConfig n -> Context String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
sanitizeDisqusName (String -> String)
-> (BlogConfig n -> String) -> BlogConfig n -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> String
forall (m :: * -> *). BlogConfig m -> String
blogName
katexJsCtx :: Monad m
=> BlogConfReader n m (Context String)
katexJsCtx :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
katexJsCtx = ReaderT (BlogConfig n) m Bool
-> ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall (m :: * -> *) a. Monad m => m Bool -> m a -> m a -> m a
ifM ((BlogConfig n -> Bool) -> ReaderT (BlogConfig n) m Bool
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks ((BlogConfig n -> Bool) -> ReaderT (BlogConfig n) m Bool)
-> (BlogConfig n -> Bool) -> ReaderT (BlogConfig n) m Bool
forall a b. (a -> b) -> a -> b
$ Bool -> Bool
not (Bool -> Bool) -> (BlogConfig n -> Bool) -> BlogConfig n -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlogConfig n -> Bool
forall (m :: * -> *). BlogConfig m -> Bool
blogIsPreview) (Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Context String
forall a. Monoid a => a
mempty) (ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String))
-> ReaderT (BlogConfig n) m (Context String)
-> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$
String -> String -> Context String
forall a. String -> String -> Context a
constField String
"katex-script" (String -> Context String) -> String -> Context String
forall a b. (a -> b) -> a -> b
$ Text -> String
TL.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ HtmlT Identity () -> Text
forall a. Html a -> Text
renderText (HtmlT Identity () -> Text) -> HtmlT Identity () -> Text
forall a b. (a -> b) -> a -> b
$ do
[Attribute] -> Text -> HtmlT Identity ()
forall arg result. TermRaw arg result => arg -> result
script_ [Text -> Attribute
defer_ Text
"", Text -> Attribute
type_ Text
"text/javascript", Text -> Attribute
src_ Text
"/vendor/katex/katex.min.js"] Text
TL.empty
[Attribute] -> Text -> HtmlT Identity ()
forall arg result. TermRaw arg result => arg -> result
script_ [Text -> Attribute
defer_ Text
"", Text -> Attribute
type_ Text
"text/javascript", Text -> Attribute
src_ Text
"/vendor/katex/auto-render.min.js"] Text
TL.empty
postCtx :: Monad m
=> Tags
-> BlogConfReader n m (Context String)
postCtx :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
Tags -> BlogConfReader n m (Context String)
postCtx Tags
tags = [ReaderT (BlogConfig n) m (Context String)]
-> ReaderT (BlogConfig n) m (Context String)
forall (m :: * -> *) b. (Monad m, Monoid b) => [m b] -> m b
mconcatM [
Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
dateCtx
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Tags -> Context String
forall a. String -> Tags -> Context a
tagsField' String
"tags" Tags
tags
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Int -> Context String
descriptionField String
"description" Int
150
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Context String
imageField String
"image"
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
siteCtx
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
jsPathCtx
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
defaultContext
, ReaderT (BlogConfig n) m (Context String)
forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
katexJsCtx
]
listCtx :: Monad m
=> BlogConfReader n m (Context String)
listCtx :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
listCtx = [ReaderT (BlogConfig n) m (Context String)]
-> ReaderT (BlogConfig n) m (Context String)
forall (m :: * -> *) b. (Monad m, Monoid b) => [m b] -> m b
mconcatM [
Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
siteCtx
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Context String
bodyField String
"body"
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ Context String
forall a. Context a
metadataField
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Context String
forall a. String -> Context a
pathField String
"path"
, Context String -> ReaderT (BlogConfig n) m (Context String)
forall a. a -> ReaderT (BlogConfig n) m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Context String -> ReaderT (BlogConfig n) m (Context String))
-> Context String -> ReaderT (BlogConfig n) m (Context String)
forall a b. (a -> b) -> a -> b
$ String -> Context String
forall a. String -> Context a
urlField String
"url"
, ReaderT (BlogConfig n) m (Context String)
forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
katexJsCtx
]