summaryrefslogtreecommitdiffstats
path: root/src/Zettel/Common.hs
blob: 5ad9ef36d69c7ff676b42e0d5380c5d78336db61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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