module Snap.Extras.SpliceUtils.Compiled where
import Blaze.ByteString.Builder.ByteString
import Control.Monad.Trans
import Data.Monoid
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Snap.Core
import qualified Snap.Extras.SpliceUtils.Interpreted as I
import Heist
import Heist.Compiled
import Text.XmlHtml
utilSplices :: MonadSnap m => Splices (Splice m)
utilSplices = do
"rqparam" ## paramSplice
"refererLink" ## refererCSplice
refererCSplice :: MonadSnap m => Splice m
refererCSplice = return $ yieldRuntimeText $ return .
maybe "/" T.decodeUtf8 =<< lift (getsRequest (getHeader "Referer"))
paramSplice :: MonadSnap m => Splice m
paramSplice = do
node <- getParamNode
let mat = getAttribute "name" node
case mat of
Nothing -> error $ (T.unpack $ elementTag node) ++
" must have a 'name' attribute"
Just at -> return $ yieldRuntime $ do
val <- lift $ getParam $ T.encodeUtf8 at
return $ maybe mempty fromByteString val
scriptsSplice :: MonadIO m
=> FilePath
-> String
-> Splice m
scriptsSplice d prefix = runNodeList =<< I.scriptsSplice d prefix