module SimpleForm.Digestive.Combined (
SimpleForm,
getSimpleForm,
postSimpleForm,
simpleForm,
simpleForm',
input,
input_,
toForm,
withFields,
wrap,
fieldset
) where
import Data.Monoid
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Writer
import Data.Text (Text)
import qualified Data.Text as T
import Text.Blaze.Html (Html)
import Text.Digestive.View
import Text.Digestive.Form
import Text.Digestive.Types (Env)
import SimpleForm.Digestive (toForm, withFields, wrap, fieldset, simpleForm, simpleForm')
import SimpleForm.Combined
import SimpleForm.Digestive.Internal
import SimpleForm.Digestive.Validation
import SimpleForm.Render
getSimpleForm :: (Monad m) =>
Renderer
-> Maybe a
-> SimpleForm a (Form Html m a)
-> m Html
getSimpleForm render val form = do
view <- getForm T.empty initialForm
return $ snd $ simpleForm' render (view, val) form
where
(initialForm, _) = simpleForm' render (noView, val) form
noView :: View Html
noView = error "SimpleForm.Digestive.Combined: cannot use View in generating Form"
postSimpleForm :: (Monad m) =>
Renderer
-> m (Env m)
-> SimpleForm a (Form Html m a)
-> m (Html, Maybe a)
postSimpleForm render env form = do
env' <- env
(view, val) <- postForm T.empty initialForm env'
let html = snd $ simpleForm' render (view, val) form
return (html, val)
where
(initialForm, _) = simpleForm' render (noView, Nothing) form
noView :: View Html
noView = error "SimpleForm.Digestive.Combined: cannot use View in generating Form"
input :: (Eq a, Monad m) =>
Text
-> (r -> Maybe a)
-> (Widget a, Validation a)
-> InputOptions
-> SimpleForm r (Form Html m a)
input n sel (w,v) opt = SimpleForm $ ReaderT $ \env -> do
tell $ input' n sel w opt env
return $ validationToForm n v
input_ :: (DefaultWidget a, DefaultValidation a, Eq a, Monad m) =>
Text
-> (r -> Maybe a)
-> SimpleForm r (Form Html m a)
input_ n sel = input n sel (wdef,vdef) mempty