module Contexts.Utils ( metadataToListField ) where import Data.Functor ((<&>)) import Data.String (fromString) import Hakyll import System.FilePath ((</>)) metadataToListField :: String -> String -> Context String metadataToListField :: String -> String -> Context String metadataToListField String mdName String mdKey = String -> Context String -> (Item String -> Compiler [Item String]) -> Context String forall a b. String -> Context a -> (Item b -> Compiler [Item a]) -> Context b listFieldWith String mdName Context String ctx ((Item String -> Compiler [Item String]) -> Context String) -> (Item String -> Compiler [Item String]) -> Context String forall a b. (a -> b) -> a -> b $ \Item String item -> Identifier -> String -> Compiler (Maybe String) forall (m :: * -> *). MonadMetadata m => Identifier -> String -> m (Maybe String) getMetadataField (Item String -> Identifier forall a. Item a -> Identifier itemIdentifier Item String item) String mdName Compiler (Maybe String) -> (Maybe String -> [Item String]) -> Compiler [Item String] forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b <&> [Item String] -> (String -> [Item String]) -> Maybe String -> [Item String] forall b a. b -> (a -> b) -> Maybe a -> b maybe [] ((String -> Item String) -> [String] -> [Item String] forall a b. (a -> b) -> [a] -> [b] map (Item String -> String -> Item String forall {a}. Item a -> String -> Item String itemize Item String item (String -> Item String) -> (String -> String) -> String -> Item String forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String trim) ([String] -> [Item String]) -> (String -> [String]) -> String -> [Item String] forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String -> [String] splitAll String ",") where ctx :: Context String ctx = String -> (Item String -> Compiler String) -> Context String forall a. String -> (Item a -> Compiler String) -> Context a field String mdKey (String -> Compiler String forall a. a -> Compiler a forall (m :: * -> *) a. Monad m => a -> m a return (String -> Compiler String) -> (Item String -> String) -> Item String -> Compiler String forall b c a. (b -> c) -> (a -> b) -> a -> c . Item String -> String forall a. Item a -> a itemBody) Context String -> Context String -> Context String forall a. Semigroup a => a -> a -> a <> Context String defaultContext itemize :: Item a -> String -> Item String itemize Item a item String md = Item { itemIdentifier :: Identifier itemIdentifier = String -> Identifier forall a. IsString a => String -> a fromString (String md String -> String -> String forall a. Semigroup a => a -> a -> a <> String "/" String -> String -> String forall a. Semigroup a => a -> a -> a <> String md) , itemBody :: String itemBody = Identifier -> String toFilePath (Item a -> Identifier forall a. Item a -> Identifier itemIdentifier Item a item) String -> String -> String </> String md }