module Hakyll.Web.Template.Blaze ( Template , applyTemplate , applyTemplateList , applyTemplateListWith , string , preEscapedString -- For API compatibility with first release , toHtml , safeToHtml ) where import Hakyll (Context(..), Item, Compiler, itemSetBody, missingField, itemBody) import Data.Monoid (mappend) import Data.List (intercalate) import Text.Blaze.Html (Html) import Text.Blaze.Internal (string, preEscapedString) import qualified Text.Blaze.Html as H import Text.Blaze.Html.Renderer.String (renderHtml) type Template m a = (String -> m String) -> Item a -> m Html applyTemplate :: Template Compiler String -- ^ Blaze template -> Context String -- ^ Hakyll context -> Item String -- ^ The item -> Compiler (Item String) -- ^ Resulting HTML applyTemplate tpl ctx item = tpl ctx' item >>= return . renderHtml >>= \body -> return $ itemSetBody body item where ctx' :: String -> Compiler String ctx' key = unContext (ctx `mappend` missingField) key item applyTemplateListWith :: String -- ^ String to join template with -> Template Compiler String -- ^ Blaze template -> Context String -- ^ Hakyll context -> [Item String] -- ^ List of items -> Compiler String -- ^ Resulting HTML applyTemplateListWith delimiter tpl ctx items = mapM (applyTemplate tpl ctx) items >>= return . intercalate delimiter . map itemBody applyTemplateList = applyTemplateListWith "" toHtml, safeToHtml :: String -> Html -- | toHtml specialised to String. toHtml = string -- | preEscapedToHtml specialised to String -- Also safeToHtml sounds better than preEscapedToHtml safeToHtml = preEscapedString