content: module Heist.Splices.BindStrict where
  
  ------------------------------------------------------------------------------
  import           Data.Text (Text)
  import qualified Data.Text as T
  import qualified Text.XmlHtml as X
  
  ------------------------------------------------------------------------------
  import           Heist.Common
  import           Heist.Interpreted.Internal
  import           Heist.Splices.Apply
  import           Heist.Splices.Bind
  import           Heist.Internal.Types.HeistState
  
  -- | Default name for the bind splice.
  bindStrictTag :: Text
  bindStrictTag = "bindStrict"
  
  
  ------------------------------------------------------------------------------
  -- | Implementation of the bind splice.
  bindStrictImpl :: Monad n => Splice n
  bindStrictImpl = do
      node <- getParamNode
      cs <- runChildren
      let err = "must supply \"" ++ T.unpack bindAttr ++
                "\" attribute in <" ++ T.unpack (X.elementTag node) ++ ">"
      maybe (return () `orError` err) (add cs)
            (X.getAttribute bindAttr node)
      return []
  
    where
      add cs nm = modifyHS $ bindSplice nm $ do
          caller <- getParamNode
          ctx <- getContext
          rawApply "bindstrict-content" cs Nothing ctx (X.childNodes caller)
  