{-# LANGUAGE OverloadedRecordDot #-} module Zettel.Common where import qualified Data.Map.Strict as Map import Text.Pandoc.Builder (HasMeta (..), ToMetaValue (..)) import Text.Pandoc.Definition (MetaValue (..), Pandoc (..)) import Zettel.Types trySet :: (HasMeta a, ToMetaValue b) => Text -> Maybe b -> a -> a trySet t (Just b) a = setMeta t b a trySet _ Nothing a = a refreshPandocMetaZettel' :: (HasMeta a) => ZettelId -> Zettel -> a -> a refreshPandocMetaZettel' zid z = trySet "modified" z.zettelMetadata.zettelModifiedDate . trySet "date" z.zettelMetadata.zettelCreationDate . trySet "author" z.zettelMetadata.zettelAuthor . setMeta "title" (MetaInlines z.zettelTitle) . setMeta "tags" z.zettelMetadata.zettelTags . setMeta "categories" z.zettelMetadata.zettelCats . setMeta "backlinks" z.zettelPrev . setMeta "forwardlinks" z.zettelNext . setMeta "zettelid" zid clearPandocAttr :: Pandoc -> Pandoc clearPandocAttr (Pandoc _ b) = Pandoc mempty b refreshPandocMetaZettel :: ZettelId -> Zettel -> Zettel refreshPandocMetaZettel zid z = z {zettelBody = refreshPandocMetaZettel' zid z . clearPandocAttr $ zettelBody z} refreshPandocMeta :: ZettelGraph -> ZettelGraph refreshPandocMeta = ZettelGraph . Map.mapWithKey refreshPandocMetaZettel . unZettelGraph