neuron-1.0.0.0: src/app/Neuron/Web/HeadHtml.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Neuron.Web.HeadHtml
( HeadHtml,
getHeadHtml,
renderHeadHtml,
)
where
import Development.Shake
import Reflex.Dom.Core
import Reflex.Dom.Pandoc (PandocBuilder)
import Reflex.Dom.Pandoc.PandocRaw (PandocRaw (..))
import Relude
import Rib.Shake (ribInputDir)
import System.FilePath ((</>))
import Text.Pandoc.Definition (Format (..))
newtype HeadHtml = HeadHtml (Maybe Text)
getHeadHtml :: Action HeadHtml
getHeadHtml = do
headHtmlPath <- ribInputDir <&> (</> "head.html")
doesFileExist headHtmlPath >>= \case
True ->
HeadHtml . Just . toText <$> readFile' headHtmlPath
False ->
pure $ HeadHtml Nothing
renderHeadHtml :: PandocBuilder t m => HeadHtml -> m ()
renderHeadHtml (HeadHtml headHtml) = case headHtml of
Nothing ->
-- Include the MathJax script if no custom head.html is provided.
elAttr "script" ("id" =: "MathJax-script" <> "src" =: "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" <> "async" =: "") blank
Just html ->
elPandocRaw (Format "html") html