{-# 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)
headerAdditionalComponent :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
headerAdditionalComponent = 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)
footerAdditionalComponent :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
footerAdditionalComponent = 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)
disqus :: forall (m :: * -> *) (n :: * -> *).
Monad m =>
BlogConfReader n m (Context String)
disqus = (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
  ]