summaryrefslogtreecommitdiffstats
path: root/src/Zettel/Common.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Zettel/Common.hs')
-rw-r--r--src/Zettel/Common.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Zettel/Common.hs b/src/Zettel/Common.hs
new file mode 100644
index 0000000..5ad9ef3
--- /dev/null
+++ b/src/Zettel/Common.hs
@@ -0,0 +1,34 @@
+{-# 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