hakyll/src/Hakyll/Web/Template/Context.hs

80 lines
2.4 KiB
Haskell
Raw Normal View History

2012-11-10 12:26:39 +00:00
--------------------------------------------------------------------------------
module Hakyll.Web.Template.Context
( Context
, field
2012-11-10 15:30:38 +00:00
, defaultContext
, bodyField
, urlField
, pathField
, categoryField
, titleField
2012-11-10 12:26:39 +00:00
) where
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
import Control.Applicative (empty, (<|>))
2012-11-10 12:26:39 +00:00
import Control.Arrow
2012-11-10 17:11:46 +00:00
import System.FilePath (takeBaseName, takeDirectory)
2012-11-10 15:30:38 +00:00
--------------------------------------------------------------------------------
2012-11-10 12:26:39 +00:00
import Hakyll.Core.Compiler
2012-11-10 15:30:38 +00:00
import Hakyll.Core.Identifier
2012-11-10 17:11:46 +00:00
import Hakyll.Web.Page.Internal
2012-11-10 15:30:38 +00:00
import Hakyll.Web.Urls
2012-11-10 12:26:39 +00:00
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
type Context a = Compiler (String, (Identifier a, a)) String
2012-11-10 12:26:39 +00:00
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
field :: String -> Compiler (Identifier a, a) String -> Context a
field key value = arr checkKey >>> (empty ||| value)
2012-11-10 12:26:39 +00:00
where
checkKey (k, x)
2012-11-10 17:11:46 +00:00
| k /= key = Left ()
2012-11-10 12:26:39 +00:00
| otherwise = Right x
2012-11-10 15:30:38 +00:00
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
defaultContext :: Context Page
2012-11-10 15:30:38 +00:00
defaultContext =
bodyField "body" <|>
urlField "url" <|>
pathField "path" <|>
categoryField "category" <|>
2012-11-10 17:11:46 +00:00
titleField "title" <|>
missingField
2012-11-10 15:30:38 +00:00
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
bodyField :: String -> Context Page
2012-11-10 15:30:38 +00:00
bodyField key = field key $ arr snd
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
urlField :: String -> Context a
2012-11-10 15:30:38 +00:00
urlField key = field key $ fst ^>> getRouteFor >>^ maybe empty toUrl
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
pathField :: String -> Context a
2012-11-10 15:30:38 +00:00
pathField key = field key $ arr $ toFilePath . fst
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
categoryField :: String -> Context a
2012-11-10 15:30:38 +00:00
categoryField key = pathField key >>^ (takeBaseName . takeDirectory)
--------------------------------------------------------------------------------
2012-11-10 17:11:46 +00:00
titleField :: String -> Context a
2012-11-10 15:30:38 +00:00
titleField key = pathField key >>^ takeBaseName
2012-11-10 17:11:46 +00:00
--------------------------------------------------------------------------------
missingField :: Context a
missingField = arr $ \(k, _) -> "$" ++ k ++ "$"