packages feed

shakebook-0.13.1.0: src/Shakebook/Defaults.hs

{- |
   Module     : Shakebook.Defaults
   License    : MIT
   Stability  : experimental

Seom sensible default settings for certain shakebook functions.
-}
module Shakebook.Defaults where

import           Lucid.CDN
import           RIO
import           RIO.List.Partial
import qualified RIO.Map                  as M
import qualified RIO.Text                 as T
import qualified RIO.Text.Partial         as T
import           RIO.Time
import           Shakebook.Lucid
import           Text.DocTemplates
import           Text.Pandoc.Definition
import           Text.Pandoc.Highlighting
import           Text.Pandoc.Options

defaultMonthUrlFormat :: UTCTime -> Text
defaultMonthUrlFormat = T.pack . formatTime defaultTimeLocale "%Y-%m"

defaultPrettyMonthFormat :: UTCTime -> Text
defaultPrettyMonthFormat = T.pack . formatTime defaultTimeLocale "%B, %Y"

defaultPrettyTimeFormat :: UTCTime -> Text
defaultPrettyTimeFormat = T.pack . formatTime defaultTimeLocale "%A, %B %d, %Y"

defaultHighlighting :: StyleFragment
defaultHighlighting = toStyleFragment pygments

defaultMarkdownReaderOptions :: ReaderOptions
defaultMarkdownReaderOptions = def { readerExtensions = pandocExtensions }

defaultHtml5WriterOptions :: WriterOptions
defaultHtml5WriterOptions = def { writerHTMLMathMethod = MathJax ""}

defaultLatexWriterOptions :: WriterOptions
defaultLatexWriterOptions = def { writerTableOfContents = True
                                , writerVariables = Context $ M.fromList [
                                               ("geometry", SimpleVal "margin=3cm")
                                             , ("fontsize", SimpleVal "10")
                                             , ("linkcolor",SimpleVal "blue")]
                                }

defaultVideoReplacement :: Text -> Text -> Inline
defaultVideoReplacement baseUrl x = Str $ "[Video available at [" <> baseUrl <> "/" <> x <> "]"

defaultDeriveTeaser :: Text -> Text
defaultDeriveTeaser = head . T.splitOn "<!-- more -->"

defaultCdnImports :: HtmlFragment
defaultCdnImports = toHtmlFragment $ do
  bootstrapCSS_5_0_0_alpha1
  bootstrapJS_5_0_0_alpha1
  fontawesome_4_7_0
  mathjax_3_1_0
  jquery_3_5_1
  popper_2_4_4