{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} module Web.Wheb.Plugins.Strapped ( StrappedContainer(..) , StrappedApp (..) , renderTemplate , initStrapped , module Text.Strapped ) where import Control.Monad.Except import Web.Wheb import Text.Strapped data StrappedContainer m = StrappedContainer { renderconfig :: RenderConfig , defaultBucket :: InputBucket m } class StrappedApp g m where getStrappedContainer :: g -> StrappedContainer m -- | Load Strapped from a directory matching the extention initStrapped :: MonadIO m => FilePath -> String -> InitM g s m (StrappedContainer (WhebT g s m)) initStrapped fp s = do mtmpls <- liftIO $ templateStoreFromDirectory fp s case mtmpls of Left err -> error (show err) Right tmpls -> return $ StrappedContainer (defaultConfig { templateStore = tmpls }) [] -- | Render a template or throw an error renderTemplate :: (MonadIO m, StrappedApp g (WhebT g s m)) => String -> InputBucket (WhebT g s m) -> WhebHandlerT g s m renderTemplate tName bucket = do sc <- getWithApp getStrappedContainer result <- render (renderconfig sc) (combineBuckets bucket (defaultBucket sc)) tName case result of Left err -> throwError $ Error500 (show err) Right b -> builder "text/html" b