module MathiasSM.Context.Project (projectContext) where
import Hakyll (Context, Item (itemBody), field, noResult)
import MathiasSM.Context.Language (languageContext)
import MathiasSM.Yaml.Project (Project (..), statusName)
projectContext :: Context Project
projectContext :: Context Project
projectContext =
[Context Project] -> Context Project
forall a. Monoid a => [a] -> a
mconcat
[ String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"title" Project -> String
projectTitle
, String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"href" Project -> String
projectHref
, String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"status" (Status -> String
statusName (Status -> String) -> (Project -> Status) -> Project -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Project -> Status
projectStatus)
, String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"startDate" (Day -> String
forall a. Show a => a -> String
show (Day -> String) -> (Project -> Day) -> Project -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Project -> Day
projectStart)
, String -> (Project -> Maybe String) -> Context Project
forall {b}. String -> (b -> Maybe String) -> Context b
optionalField String
"endDate" ((Day -> String) -> Maybe Day -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Day -> String
forall a. Show a => a -> String
show (Maybe Day -> Maybe String)
-> (Project -> Maybe Day) -> Project -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Project -> Maybe Day
projectEnd)
, String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"shortDescription" Project -> String
projectShortDescription
, String -> (Project -> String) -> Context Project
forall {b}. String -> (b -> String) -> Context b
projectField String
"longDescription" Project -> String
projectLongDescription
, Context Project
forall a. Context a
languageContext
]
where
projectField :: String -> (b -> String) -> Context b
projectField String
name b -> String
get = String -> (Item b -> Compiler String) -> Context b
forall a. String -> (Item a -> Compiler String) -> Context a
field String
name (String -> Compiler String
forall a. a -> Compiler a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Compiler String)
-> (Item b -> String) -> Item b -> Compiler String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> String
get (b -> String) -> (Item b -> b) -> Item b -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item b -> b
forall a. Item a -> a
itemBody)
optionalField :: String -> (b -> Maybe String) -> Context b
optionalField String
name b -> Maybe String
get = String -> (Item b -> Compiler String) -> Context b
forall a. String -> (Item a -> Compiler String) -> Context a
field String
name (Compiler String
-> (String -> Compiler String) -> Maybe String -> Compiler String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Compiler String
forall a. String -> Compiler a
noResult (String -> Compiler String) -> String -> Compiler String
forall a b. (a -> b) -> a -> b
$ String
"No " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name) String -> Compiler String
forall a. a -> Compiler a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe String -> Compiler String)
-> (Item b -> Maybe String) -> Item b -> Compiler String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Maybe String
get (b -> Maybe String) -> (Item b -> b) -> Item b -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item b -> b
forall a. Item a -> a
itemBody)